mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
Make sure we schedule the vacuum task only if there isn't an existing one
This commit is contained in:
committed by
Jorge Martin Espinosa
parent
95cded80a6
commit
2e88815e1b
+10
-2
@@ -15,6 +15,7 @@ import dev.zacsweers.metro.AssistedInject
|
|||||||
import io.element.android.libraries.di.annotations.ApplicationContext
|
import io.element.android.libraries.di.annotations.ApplicationContext
|
||||||
import io.element.android.libraries.matrix.api.MatrixClientProvider
|
import io.element.android.libraries.matrix.api.MatrixClientProvider
|
||||||
import io.element.android.libraries.matrix.api.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
|
import timber.log.Timber
|
||||||
|
|
||||||
@AssistedInject
|
@AssistedInject
|
||||||
class VacuumDatabaseWorker(
|
class VacuumDatabaseWorker(
|
||||||
@@ -27,12 +28,19 @@ class VacuumDatabaseWorker(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun doWork(): Result {
|
override suspend fun doWork(): Result {
|
||||||
|
Timber.d("Starting database vacuuming...")
|
||||||
val sessionId = inputData.getString(SESSION_ID_PARAM)?.let(::SessionId) ?: return Result.failure()
|
val sessionId = inputData.getString(SESSION_ID_PARAM)?.let(::SessionId) ?: return Result.failure()
|
||||||
val client = matrixClientProvider.getOrRestore(sessionId).getOrNull() ?: return Result.failure()
|
val client = matrixClientProvider.getOrRestore(sessionId).getOrNull() ?: return Result.failure()
|
||||||
return client.performDatabaseVacuum()
|
return client.performDatabaseVacuum()
|
||||||
.fold(
|
.fold(
|
||||||
onSuccess = { Result.success() },
|
onSuccess = {
|
||||||
onFailure = { Result.failure() }
|
Timber.d("Database vacuuming finished successfully")
|
||||||
|
Result.success()
|
||||||
|
},
|
||||||
|
onFailure = {
|
||||||
|
Timber.e(it, "Database vacuuming failed")
|
||||||
|
Result.failure()
|
||||||
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -12,7 +12,6 @@ import androidx.work.WorkManager
|
|||||||
import dev.zacsweers.metro.AppScope
|
import dev.zacsweers.metro.AppScope
|
||||||
import dev.zacsweers.metro.ContributesBinding
|
import dev.zacsweers.metro.ContributesBinding
|
||||||
import dev.zacsweers.metro.SingleIn
|
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.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.sessionstorage.api.observer.SessionListener
|
import io.element.android.libraries.sessionstorage.api.observer.SessionListener
|
||||||
import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
|
import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
|
||||||
@@ -53,7 +52,9 @@ class DefaultWorkManagerScheduler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun hasPendingWork(sessionId: SessionId, requestType: WorkManagerRequestType): Boolean {
|
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) {
|
override fun cancel(sessionId: SessionId) {
|
||||||
|
|||||||
Reference in New Issue
Block a user