mirror of https://github.com/tasks/tasks
Merge sync work
parent
d589a89506
commit
eaa47029e7
@ -1,50 +0,0 @@
|
|||||||
package org.tasks.jobs
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import androidx.hilt.work.HiltWorker
|
|
||||||
import androidx.work.WorkerParameters
|
|
||||||
import dagger.assisted.Assisted
|
|
||||||
import dagger.assisted.AssistedInject
|
|
||||||
import kotlinx.coroutines.*
|
|
||||||
import org.tasks.LocalBroadcastManager
|
|
||||||
import org.tasks.R
|
|
||||||
import org.tasks.analytics.Firebase
|
|
||||||
import org.tasks.billing.Inventory
|
|
||||||
import org.tasks.caldav.CaldavSynchronizer
|
|
||||||
import org.tasks.data.CaldavAccount.Companion.TYPE_CALDAV
|
|
||||||
import org.tasks.data.CaldavAccount.Companion.TYPE_TASKS
|
|
||||||
import org.tasks.data.CaldavDao
|
|
||||||
import org.tasks.preferences.Preferences
|
|
||||||
|
|
||||||
@HiltWorker
|
|
||||||
class SyncCaldavWork @AssistedInject constructor(
|
|
||||||
@Assisted context: Context,
|
|
||||||
@Assisted workerParams: WorkerParameters,
|
|
||||||
firebase: Firebase,
|
|
||||||
localBroadcastManager: LocalBroadcastManager,
|
|
||||||
preferences: Preferences,
|
|
||||||
private val caldavDao: CaldavDao,
|
|
||||||
private val caldavSynchronizer: CaldavSynchronizer,
|
|
||||||
private val inventory: Inventory
|
|
||||||
) : SyncWork(context, workerParams, firebase, localBroadcastManager, preferences) {
|
|
||||||
|
|
||||||
override suspend fun enabled() = getAccounts().isNotEmpty()
|
|
||||||
|
|
||||||
override val syncStatus = R.string.p_sync_ongoing_caldav
|
|
||||||
|
|
||||||
override suspend fun doSync() {
|
|
||||||
caldavJobs().awaitAll()
|
|
||||||
inventory.updateTasksAccount()
|
|
||||||
}
|
|
||||||
|
|
||||||
private suspend fun caldavJobs(): List<Deferred<Unit>> = coroutineScope {
|
|
||||||
getAccounts().map {
|
|
||||||
async(Dispatchers.IO) {
|
|
||||||
caldavSynchronizer.sync(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private suspend fun getAccounts() =
|
|
||||||
caldavDao.getAccounts(TYPE_CALDAV, TYPE_TASKS)
|
|
||||||
}
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
package org.tasks.jobs
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import androidx.hilt.work.HiltWorker
|
|
||||||
import androidx.work.WorkerParameters
|
|
||||||
import dagger.assisted.Assisted
|
|
||||||
import dagger.assisted.AssistedInject
|
|
||||||
import kotlinx.coroutines.*
|
|
||||||
import org.tasks.LocalBroadcastManager
|
|
||||||
import org.tasks.R
|
|
||||||
import org.tasks.analytics.Firebase
|
|
||||||
import org.tasks.data.CaldavAccount.Companion.TYPE_ETEBASE
|
|
||||||
import org.tasks.data.CaldavDao
|
|
||||||
import org.tasks.etebase.EtebaseSynchronizer
|
|
||||||
import org.tasks.preferences.Preferences
|
|
||||||
|
|
||||||
@HiltWorker
|
|
||||||
class SyncEtebaseWork @AssistedInject constructor(
|
|
||||||
@Assisted context: Context,
|
|
||||||
@Assisted workerParams: WorkerParameters,
|
|
||||||
firebase: Firebase,
|
|
||||||
localBroadcastManager: LocalBroadcastManager,
|
|
||||||
preferences: Preferences,
|
|
||||||
private val caldavDao: CaldavDao,
|
|
||||||
private val synchronizer: EtebaseSynchronizer
|
|
||||||
) : SyncWork(context, workerParams, firebase, localBroadcastManager, preferences) {
|
|
||||||
|
|
||||||
override suspend fun enabled() = caldavDao.getAccounts(TYPE_ETEBASE).isNotEmpty()
|
|
||||||
|
|
||||||
override val syncStatus = R.string.p_sync_ongoing_etebase
|
|
||||||
|
|
||||||
override suspend fun doSync() {
|
|
||||||
jobs().awaitAll()
|
|
||||||
}
|
|
||||||
|
|
||||||
private suspend fun jobs(): List<Deferred<Unit>> = coroutineScope {
|
|
||||||
caldavDao.getAccounts(TYPE_ETEBASE)
|
|
||||||
.map {
|
|
||||||
async(Dispatchers.IO) {
|
|
||||||
synchronizer.sync(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
package org.tasks.jobs
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import androidx.hilt.work.HiltWorker
|
|
||||||
import androidx.work.WorkerParameters
|
|
||||||
import dagger.assisted.Assisted
|
|
||||||
import dagger.assisted.AssistedInject
|
|
||||||
import kotlinx.coroutines.*
|
|
||||||
import org.tasks.LocalBroadcastManager
|
|
||||||
import org.tasks.R
|
|
||||||
import org.tasks.analytics.Firebase
|
|
||||||
import org.tasks.data.GoogleTaskListDao
|
|
||||||
import org.tasks.gtasks.GoogleTaskSynchronizer
|
|
||||||
import org.tasks.preferences.Preferences
|
|
||||||
|
|
||||||
@HiltWorker
|
|
||||||
class SyncGoogleTasksWork @AssistedInject constructor(
|
|
||||||
@Assisted context: Context,
|
|
||||||
@Assisted workerParams: WorkerParameters,
|
|
||||||
firebase: Firebase,
|
|
||||||
localBroadcastManager: LocalBroadcastManager,
|
|
||||||
private val preferences: Preferences,
|
|
||||||
private val googleTaskListDao: GoogleTaskListDao,
|
|
||||||
private val googleTaskSynchronizer: GoogleTaskSynchronizer
|
|
||||||
) : SyncWork(context, workerParams, firebase, localBroadcastManager, preferences) {
|
|
||||||
|
|
||||||
override suspend fun enabled() = googleTaskListDao.getAccounts().isNotEmpty()
|
|
||||||
|
|
||||||
override val syncStatus = R.string.p_sync_ongoing_google_tasks
|
|
||||||
|
|
||||||
override suspend fun doSync() {
|
|
||||||
if (preferences.isManualSort) {
|
|
||||||
preferences.isPositionHackEnabled = true
|
|
||||||
}
|
|
||||||
googleTaskJobs().awaitAll()
|
|
||||||
}
|
|
||||||
|
|
||||||
private suspend fun googleTaskJobs(): List<Deferred<Unit>> = coroutineScope {
|
|
||||||
googleTaskListDao
|
|
||||||
.getAccounts()
|
|
||||||
.mapIndexed { i, account ->
|
|
||||||
async(Dispatchers.IO) {
|
|
||||||
googleTaskSynchronizer.sync(account, i)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,53 +0,0 @@
|
|||||||
package org.tasks.jobs
|
|
||||||
|
|
||||||
import android.accounts.AccountManager
|
|
||||||
import android.content.ContentResolver
|
|
||||||
import android.content.Context
|
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.hilt.work.HiltWorker
|
|
||||||
import androidx.work.WorkerParameters
|
|
||||||
import dagger.assisted.Assisted
|
|
||||||
import dagger.assisted.AssistedInject
|
|
||||||
import org.tasks.LocalBroadcastManager
|
|
||||||
import org.tasks.R
|
|
||||||
import org.tasks.analytics.Firebase
|
|
||||||
import org.tasks.data.OpenTaskDao
|
|
||||||
import org.tasks.data.OpenTaskDao.Companion.SUPPORTED_TYPES
|
|
||||||
import org.tasks.opentasks.OpenTasksSynchronizer
|
|
||||||
import org.tasks.preferences.Preferences
|
|
||||||
|
|
||||||
@HiltWorker
|
|
||||||
class SyncOpenTasksWork @AssistedInject constructor(
|
|
||||||
@Assisted context: Context,
|
|
||||||
@Assisted workerParams: WorkerParameters,
|
|
||||||
firebase: Firebase,
|
|
||||||
localBroadcastManager: LocalBroadcastManager,
|
|
||||||
preferences: Preferences,
|
|
||||||
private val openTasksSynchronizer: OpenTasksSynchronizer,
|
|
||||||
private val openTaskDao: OpenTaskDao
|
|
||||||
) : SyncWork(context, workerParams, firebase, localBroadcastManager, preferences) {
|
|
||||||
override val syncStatus = R.string.p_sync_ongoing_opentasks
|
|
||||||
|
|
||||||
override suspend fun enabled() = openTaskDao.shouldSync()
|
|
||||||
|
|
||||||
override suspend fun doSync() {
|
|
||||||
openTasksSynchronizer.sync()
|
|
||||||
|
|
||||||
if (isImmediate) {
|
|
||||||
AccountManager
|
|
||||||
.get(context)
|
|
||||||
.accounts
|
|
||||||
.filter { SUPPORTED_TYPES.contains(it.type) }
|
|
||||||
.forEach {
|
|
||||||
ContentResolver.requestSync(
|
|
||||||
it,
|
|
||||||
openTaskDao.authority,
|
|
||||||
Bundle().apply {
|
|
||||||
putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true)
|
|
||||||
putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue