Options to run background workers only using wifi
parent
dafca9e1e1
commit
297029a659
@ -1,71 +0,0 @@
|
|||||||
package org.koitharu.kotatsu.core.util
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import androidx.work.WorkInfo
|
|
||||||
import androidx.work.WorkManager
|
|
||||||
import androidx.work.WorkQuery
|
|
||||||
import androidx.work.WorkRequest
|
|
||||||
import androidx.work.await
|
|
||||||
import androidx.work.impl.WorkManagerImpl
|
|
||||||
import java.util.UUID
|
|
||||||
import kotlin.coroutines.resume
|
|
||||||
import kotlin.coroutines.resumeWithException
|
|
||||||
import kotlin.coroutines.suspendCoroutine
|
|
||||||
|
|
||||||
@SuppressLint("RestrictedApi")
|
|
||||||
class WorkManagerHelper(
|
|
||||||
workManager: WorkManager,
|
|
||||||
) {
|
|
||||||
|
|
||||||
private val workManagerImpl = workManager as WorkManagerImpl
|
|
||||||
|
|
||||||
suspend fun deleteWork(id: UUID) = suspendCoroutine { cont ->
|
|
||||||
workManagerImpl.workTaskExecutor.executeOnTaskThread {
|
|
||||||
try {
|
|
||||||
workManagerImpl.workDatabase.workSpecDao().delete(id.toString())
|
|
||||||
cont.resume(Unit)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
cont.resumeWithException(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun deleteWorks(ids: Collection<UUID>) = suspendCoroutine { cont ->
|
|
||||||
workManagerImpl.workTaskExecutor.executeOnTaskThread {
|
|
||||||
try {
|
|
||||||
val db = workManagerImpl.workDatabase
|
|
||||||
db.runInTransaction {
|
|
||||||
for (id in ids) {
|
|
||||||
db.workSpecDao().delete(id.toString())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cont.resume(Unit)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
cont.resumeWithException(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun getWorkInfosByTag(tag: String): List<WorkInfo> {
|
|
||||||
return workManagerImpl.getWorkInfosByTag(tag).await()
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun getFinishedWorkInfosByTag(tag: String): List<WorkInfo> {
|
|
||||||
val query = WorkQuery.Builder.fromTags(listOf(tag))
|
|
||||||
.addStates(listOf(WorkInfo.State.SUCCEEDED, WorkInfo.State.CANCELLED, WorkInfo.State.FAILED))
|
|
||||||
.build()
|
|
||||||
return workManagerImpl.getWorkInfos(query).await()
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun getWorkInfoById(id: UUID): WorkInfo? {
|
|
||||||
return workManagerImpl.getWorkInfoById(id).await()
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun getUniqueWorkInfoByName(name: String): List<WorkInfo> {
|
|
||||||
return workManagerImpl.getWorkInfosForUniqueWork(name).await().orEmpty()
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun updateWork(request: WorkRequest): WorkManager.UpdateResult {
|
|
||||||
return workManagerImpl.updateWork(request).await()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
package org.koitharu.kotatsu.core.util.ext
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import androidx.work.WorkInfo
|
||||||
|
import androidx.work.WorkManager
|
||||||
|
import androidx.work.WorkQuery
|
||||||
|
import androidx.work.WorkRequest
|
||||||
|
import androidx.work.await
|
||||||
|
import androidx.work.impl.WorkManagerImpl
|
||||||
|
import java.util.UUID
|
||||||
|
import kotlin.coroutines.resume
|
||||||
|
import kotlin.coroutines.resumeWithException
|
||||||
|
import kotlin.coroutines.suspendCoroutine
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
suspend fun WorkManager.deleteWork(id: UUID) = suspendCoroutine { cont ->
|
||||||
|
workManagerImpl.workTaskExecutor.executeOnTaskThread {
|
||||||
|
try {
|
||||||
|
workManagerImpl.workDatabase.workSpecDao().delete(id.toString())
|
||||||
|
cont.resume(Unit)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
cont.resumeWithException(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
suspend fun WorkManager.deleteWorks(ids: Collection<UUID>) = suspendCoroutine { cont ->
|
||||||
|
workManagerImpl.workTaskExecutor.executeOnTaskThread {
|
||||||
|
try {
|
||||||
|
val db = workManagerImpl.workDatabase
|
||||||
|
db.runInTransaction {
|
||||||
|
for (id in ids) {
|
||||||
|
db.workSpecDao().delete(id.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cont.resume(Unit)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
cont.resumeWithException(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
suspend fun WorkManager.awaitWorkInfosByTag(tag: String): List<WorkInfo> {
|
||||||
|
return getWorkInfosByTag(tag).await()
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
suspend fun WorkManager.awaitFinishedWorkInfosByTag(tag: String): List<WorkInfo> {
|
||||||
|
val query = WorkQuery.Builder.fromTags(listOf(tag))
|
||||||
|
.addStates(listOf(WorkInfo.State.SUCCEEDED, WorkInfo.State.CANCELLED, WorkInfo.State.FAILED))
|
||||||
|
.build()
|
||||||
|
return getWorkInfos(query).await()
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
suspend fun WorkManager.awaitWorkInfoById(id: UUID): WorkInfo? {
|
||||||
|
return getWorkInfoById(id).await()
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
suspend fun WorkManager.awaitUniqueWorkInfoByName(name: String): List<WorkInfo> {
|
||||||
|
return getWorkInfosForUniqueWork(name).await().orEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
suspend fun WorkManager.awaitUpdateWork(request: WorkRequest): WorkManager.UpdateResult {
|
||||||
|
return updateWork(request).await()
|
||||||
|
}
|
||||||
|
|
||||||
|
private val WorkManager.workManagerImpl
|
||||||
|
@SuppressLint("RestrictedApi") inline get() = this as WorkManagerImpl
|
||||||
@ -1,12 +1,10 @@
|
|||||||
package org.koitharu.kotatsu.settings.work
|
package org.koitharu.kotatsu.settings.work
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
|
|
||||||
interface PeriodicWorkScheduler {
|
interface PeriodicWorkScheduler {
|
||||||
|
|
||||||
suspend fun schedule(context: Context)
|
suspend fun schedule()
|
||||||
|
|
||||||
suspend fun unschedule(context: Context)
|
suspend fun unschedule()
|
||||||
|
|
||||||
suspend fun isScheduled(context: Context): Boolean
|
suspend fun isScheduled(): Boolean
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue