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