mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
Add a periodic DB vacuuming task
This commit is contained in:
committed by
Jorge Martin Espinosa
parent
5d6aa1fcfd
commit
734485255a
+3
@@ -12,16 +12,19 @@ import io.element.android.libraries.matrix.api.core.SessionId
|
||||
|
||||
interface WorkManagerScheduler {
|
||||
fun submit(workManagerRequest: WorkManagerRequest)
|
||||
fun hasPendingWork(sessionId: SessionId, requestType: WorkManagerRequestType): Boolean
|
||||
fun cancel(sessionId: SessionId)
|
||||
}
|
||||
|
||||
fun workManagerTag(sessionId: SessionId, requestType: WorkManagerRequestType): String {
|
||||
val prefix = when (requestType) {
|
||||
WorkManagerRequestType.NOTIFICATION_SYNC -> "notifications"
|
||||
WorkManagerRequestType.DB_VACUUM -> "db_vacuum"
|
||||
}
|
||||
return "$prefix-$sessionId"
|
||||
}
|
||||
|
||||
enum class WorkManagerRequestType {
|
||||
NOTIFICATION_SYNC,
|
||||
DB_VACUUM,
|
||||
}
|
||||
|
||||
+5
@@ -11,6 +11,7 @@ package io.element.android.libraries.workmanager.impl
|
||||
import androidx.work.WorkManager
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.libraries.core.bool.orFalse
|
||||
import dev.zacsweers.metro.SingleIn
|
||||
import io.element.android.libraries.matrix.api.core.SessionId
|
||||
import io.element.android.libraries.sessionstorage.api.observer.SessionListener
|
||||
@@ -51,6 +52,10 @@ class DefaultWorkManagerScheduler(
|
||||
)
|
||||
}
|
||||
|
||||
override fun hasPendingWork(sessionId: SessionId, requestType: WorkManagerRequestType): Boolean {
|
||||
return workManager.getWorkInfosByTag(workManagerTag(sessionId, requestType)).get()?.isNotEmpty().orFalse()
|
||||
}
|
||||
|
||||
override fun cancel(sessionId: SessionId) {
|
||||
Timber.d("Cancelling work for sessionId: $sessionId")
|
||||
for (requestType in WorkManagerRequestType.entries) {
|
||||
|
||||
+6
@@ -10,17 +10,23 @@ package io.element.android.libraries.workmanager.test
|
||||
|
||||
import io.element.android.libraries.matrix.api.core.SessionId
|
||||
import io.element.android.libraries.workmanager.api.WorkManagerRequest
|
||||
import io.element.android.libraries.workmanager.api.WorkManagerRequestType
|
||||
import io.element.android.libraries.workmanager.api.WorkManagerScheduler
|
||||
import io.element.android.tests.testutils.lambda.lambdaError
|
||||
|
||||
class FakeWorkManagerScheduler(
|
||||
private val submitLambda: (WorkManagerRequest) -> Unit = { lambdaError() },
|
||||
private val hasPendingWorkLambda: (SessionId, WorkManagerRequestType) -> Boolean = { _, _ -> false },
|
||||
private val cancelLambda: (SessionId) -> Unit = { lambdaError() },
|
||||
) : WorkManagerScheduler {
|
||||
override fun submit(workManagerRequest: WorkManagerRequest) {
|
||||
submitLambda(workManagerRequest)
|
||||
}
|
||||
|
||||
override fun hasPendingWork(sessionId: SessionId, requestType: WorkManagerRequestType): Boolean {
|
||||
return hasPendingWorkLambda(sessionId, requestType)
|
||||
}
|
||||
|
||||
override fun cancel(sessionId: SessionId) {
|
||||
cancelLambda(sessionId)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user