diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/workmanager/VacuumDatabaseWorker.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/workmanager/VacuumDatabaseWorker.kt index 0602c2fdc2..c6f1b32405 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/workmanager/VacuumDatabaseWorker.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/workmanager/VacuumDatabaseWorker.kt @@ -15,6 +15,7 @@ import dev.zacsweers.metro.AssistedInject import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.SessionId +import timber.log.Timber @AssistedInject class VacuumDatabaseWorker( @@ -27,12 +28,19 @@ class VacuumDatabaseWorker( } override suspend fun doWork(): Result { + Timber.d("Starting database vacuuming...") val sessionId = inputData.getString(SESSION_ID_PARAM)?.let(::SessionId) ?: return Result.failure() val client = matrixClientProvider.getOrRestore(sessionId).getOrNull() ?: return Result.failure() return client.performDatabaseVacuum() .fold( - onSuccess = { Result.success() }, - onFailure = { Result.failure() } + onSuccess = { + Timber.d("Database vacuuming finished successfully") + Result.success() + }, + onFailure = { + Timber.e(it, "Database vacuuming failed") + Result.failure() + } ) } } diff --git a/libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/DefaultWorkManagerScheduler.kt b/libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/DefaultWorkManagerScheduler.kt index 476e5995a8..ce16e323de 100644 --- a/libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/DefaultWorkManagerScheduler.kt +++ b/libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/DefaultWorkManagerScheduler.kt @@ -12,7 +12,6 @@ import androidx.work.WorkManager import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.SingleIn -import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver @@ -53,7 +52,9 @@ class DefaultWorkManagerScheduler( } override fun hasPendingWork(sessionId: SessionId, requestType: WorkManagerRequestType): Boolean { - return workManager.getWorkInfosByTag(workManagerTag(sessionId, requestType)).get()?.isNotEmpty().orFalse() + val workInfos = workManager.getWorkInfosByTag(workManagerTag(sessionId, requestType)).get().orEmpty() + // It has pending work if it's periodic or it isn't but it's not finished + return workInfos.any { it.periodicityInfo != null || !it.state.isFinished } } override fun cancel(sessionId: SessionId) {