|
|
|
@ -91,19 +91,21 @@ class WorkManagerImpl(
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override suspend fun startEnqueuedSync() {
|
|
|
|
|
if (getSyncJob().any { it.state == WorkInfo.State.ENQUEUED }) {
|
|
|
|
|
sync(true)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override suspend fun sync(immediate: Boolean) {
|
|
|
|
|
Timber.d("sync(immediate = $immediate)")
|
|
|
|
|
val builder = OneTimeWorkRequest.Builder(SyncWork::class.java)
|
|
|
|
|
.setInputData(EXTRA_IMMEDIATE to immediate)
|
|
|
|
|
.setConstraints(networkConstraints)
|
|
|
|
|
if (!immediate) {
|
|
|
|
|
builder.setInitialDelay(1, TimeUnit.MINUTES)
|
|
|
|
|
}
|
|
|
|
|
val append = withContext(Dispatchers.IO) {
|
|
|
|
|
workManager.getWorkInfosByTag(TAG_SYNC).get().any {
|
|
|
|
|
it.state == WorkInfo.State.RUNNING
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
val append = getSyncJob().any { it.state == WorkInfo.State.RUNNING }
|
|
|
|
|
Timber.d("sync: immediate=$immediate, append=$append)")
|
|
|
|
|
enqueue(workManager.beginUniqueWork(
|
|
|
|
|
TAG_SYNC,
|
|
|
|
|
if (append) APPEND_OR_REPLACE else REPLACE,
|
|
|
|
@ -256,6 +258,10 @@ class WorkManagerImpl(
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private suspend fun getSyncJob() = withContext(Dispatchers.IO) {
|
|
|
|
|
workManager.getWorkInfosForUniqueWork(TAG_SYNC).get()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun <B : WorkRequest.Builder<B, *>, W : WorkRequest> WorkRequest.Builder<B, W>.setInputData(
|
|
|
|
|