package com.vgmlr.kiln
import android.content.Context
import androidx.work.CoroutineWorker
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.WorkerParameters
import java.time.LocalDate
import java.util.concurrent.TimeUnit
import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequestBuilder
class KilnIconSyncWorker(context: Context, params: WorkerParameters) :
CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
val db = KilnDb.get(applicationContext)
val account = KilnIconSync.iconAccount(
db.accountDao().getAll(),
KilnPrefs.get(applicationContext).defaultAccountId.value
) ?: return Result.success()
val records = db.dayRecordDao().getAll(account.id)
val buttons = KilnButtonSet(db.buttonDao().getAll(account.id))
KilnIconSync.apply(
applicationContext,
KilnGradientPalette.bucketToday(records, buttons, LocalDate.now())
)
return Result.success()
}
companion object {
private const val WORK_NAME = "icon_sync"
private const val ONCE_NAME = "icon_sync_once"
fun schedule(context: Context) {
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
WORK_NAME,
ExistingPeriodicWorkPolicy.KEEP,
PeriodicWorkRequestBuilder<KilnIconSyncWorker>(6, TimeUnit.HOURS).build()
)
}
fun runOnce(context: Context) {
WorkManager.getInstance(context).enqueueUniqueWork(
ONCE_NAME,
ExistingWorkPolicy.REPLACE,
OneTimeWorkRequestBuilder<KilnIconSyncWorker>().build()
)
}
}
}