Remove OpenTask accounts when native added

pull/1800/head
Alex Baker 4 years ago
parent c9be5728b1
commit 5e94537849

@ -13,11 +13,11 @@ import org.dmfs.tasks.contract.TaskContract.*
import org.dmfs.tasks.contract.TaskContract.Properties import org.dmfs.tasks.contract.TaskContract.Properties
import org.json.JSONObject import org.json.JSONObject
import org.tasks.R import org.tasks.R
import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS
import org.tasks.data.CaldavAccount.Companion.openTaskType import org.tasks.data.CaldavAccount.Companion.openTaskType
import timber.log.Timber import timber.log.Timber
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
import kotlin.collections.ArrayList
open class OpenTaskDao @Inject constructor( open class OpenTaskDao @Inject constructor(
@ApplicationContext context: Context, @ApplicationContext context: Context,
@ -29,7 +29,9 @@ open class OpenTaskDao @Inject constructor(
val taskLists: Uri = TaskLists.getContentUri(authority) val taskLists: Uri = TaskLists.getContentUri(authority)
val properties: Uri = Properties.getContentUri(authority) val properties: Uri = Properties.getContentUri(authority)
suspend fun newAccounts(): List<String> = getListsByAccount().newAccounts(caldavDao) suspend fun shouldSync() =
caldavDao.getAccounts(TYPE_OPENTASKS).isNotEmpty() ||
getListsByAccount().filterActive(caldavDao).isNotEmpty()
suspend fun getListsByAccount(): Map<String, List<CaldavCalendar>> = suspend fun getListsByAccount(): Map<String, List<CaldavCalendar>> =
getLists().groupBy { it.account!! } getLists().groupBy { it.account!! }
@ -143,10 +145,8 @@ open class OpenTaskDao @Inject constructor(
) )
val SUPPORTED_TYPE_FILTER = SUPPORTED_TYPES.joinToString(" OR ") { "ACCOUNT_TYPE = '$it'" } val SUPPORTED_TYPE_FILTER = SUPPORTED_TYPES.joinToString(" OR ") { "ACCOUNT_TYPE = '$it'" }
suspend fun Map<String, List<CaldavCalendar>>.newAccounts(caldavDao: CaldavDao) = suspend fun Map<String, List<CaldavCalendar>>.filterActive(caldavDao: CaldavDao) =
filterNot { (_, lists) -> caldavDao.anyExist(lists.map { it.url!! }) } filterNot { (_, lists) -> caldavDao.anyExist(lists.map { it.url!! }) }
.map { it.key }
.distinct()
fun String?.isDavx5(): Boolean = this?.startsWith(ACCOUNT_TYPE_DAVx5) == true fun String?.isDavx5(): Boolean = this?.startsWith(ACCOUNT_TYPE_DAVx5) == true

@ -11,8 +11,6 @@ import dagger.assisted.AssistedInject
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS
import org.tasks.data.CaldavDao
import org.tasks.data.OpenTaskDao import org.tasks.data.OpenTaskDao
import org.tasks.data.OpenTaskDao.Companion.SUPPORTED_TYPES import org.tasks.data.OpenTaskDao.Companion.SUPPORTED_TYPES
import org.tasks.opentasks.OpenTasksSynchronizer import org.tasks.opentasks.OpenTasksSynchronizer
@ -26,14 +24,11 @@ class SyncOpenTasksWork @AssistedInject constructor(
localBroadcastManager: LocalBroadcastManager, localBroadcastManager: LocalBroadcastManager,
preferences: Preferences, preferences: Preferences,
private val openTasksSynchronizer: OpenTasksSynchronizer, private val openTasksSynchronizer: OpenTasksSynchronizer,
private val caldavDao: CaldavDao,
private val openTaskDao: OpenTaskDao private val openTaskDao: OpenTaskDao
) : SyncWork(context, workerParams, firebase, localBroadcastManager, preferences) { ) : SyncWork(context, workerParams, firebase, localBroadcastManager, preferences) {
override val syncStatus = R.string.p_sync_ongoing_opentasks override val syncStatus = R.string.p_sync_ongoing_opentasks
override suspend fun enabled() = override suspend fun enabled() = openTaskDao.shouldSync()
caldavDao.getAccounts(TYPE_OPENTASKS).isNotEmpty()
|| openTaskDao.newAccounts().isNotEmpty()
override suspend fun doSync() { override suspend fun doSync() {
openTasksSynchronizer.sync() openTasksSynchronizer.sync()

@ -28,7 +28,6 @@ import org.tasks.R
import org.tasks.data.CaldavAccount import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavAccount.Companion.TYPE_CALDAV import org.tasks.data.CaldavAccount.Companion.TYPE_CALDAV
import org.tasks.data.CaldavAccount.Companion.TYPE_ETEBASE import org.tasks.data.CaldavAccount.Companion.TYPE_ETEBASE
import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS
import org.tasks.data.CaldavAccount.Companion.TYPE_TASKS import org.tasks.data.CaldavAccount.Companion.TYPE_TASKS
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDao
import org.tasks.data.GoogleTaskListDao import org.tasks.data.GoogleTaskListDao
@ -179,8 +178,8 @@ class WorkManagerImpl constructor(
scheduleBackgroundSync( scheduleBackgroundSync(
TAG_BACKGROUND_SYNC_OPENTASKS, TAG_BACKGROUND_SYNC_OPENTASKS,
SyncOpenTasksWork::class.java, SyncOpenTasksWork::class.java,
caldavDao.getAccounts(TYPE_OPENTASKS).isNotEmpty() openTaskDao.shouldSync()
|| openTaskDao.newAccounts().isNotEmpty()) )
} }
} }

@ -21,10 +21,10 @@ import org.tasks.data.CaldavDao
import org.tasks.data.CaldavTask import org.tasks.data.CaldavTask
import org.tasks.data.MyAndroidTask import org.tasks.data.MyAndroidTask
import org.tasks.data.OpenTaskDao import org.tasks.data.OpenTaskDao
import org.tasks.data.OpenTaskDao.Companion.filterActive
import org.tasks.data.OpenTaskDao.Companion.isDavx5 import org.tasks.data.OpenTaskDao.Companion.isDavx5
import org.tasks.data.OpenTaskDao.Companion.isDecSync import org.tasks.data.OpenTaskDao.Companion.isDecSync
import org.tasks.data.OpenTaskDao.Companion.isEteSync import org.tasks.data.OpenTaskDao.Companion.isEteSync
import org.tasks.data.OpenTaskDao.Companion.newAccounts
import org.tasks.data.OpenTaskDao.Companion.toLocalCalendar import org.tasks.data.OpenTaskDao.Companion.toLocalCalendar
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@ -43,28 +43,28 @@ class OpenTasksSynchronizer @Inject constructor(
private val inventory: Inventory) { private val inventory: Inventory) {
suspend fun sync() { suspend fun sync() {
val lists = openTaskDao.getListsByAccount() val lists = openTaskDao.getListsByAccount().filterActive(caldavDao)
lists.newAccounts(caldavDao) lists.keys
.filter { caldavDao.getAccountByUuid(it) == null } .filter { caldavDao.getAccountByUuid(it) == null }
.map { .map {
CaldavAccount().apply { CaldavAccount().apply {
name = it.split(":")[1] name = it.split(":")[1]
uuid = it uuid = it
accountType = CaldavAccount.TYPE_OPENTASKS accountType = CaldavAccount.TYPE_OPENTASKS
}
}
.onEach { caldavDao.insert(it) }
.forEach {
firebase.logEvent(
R.string.event_sync_add_account,
R.string.param_type to when {
it.uuid.isDavx5() -> Constants.SYNC_TYPE_DAVX5
it.uuid.isEteSync() -> Constants.SYNC_TYPE_ETESYNC_OT
it.uuid.isDecSync() -> Constants.SYNC_TYPE_DECSYNC
else -> throw IllegalArgumentException()
}
)
} }
}
.onEach { caldavDao.insert(it) }
.forEach {
firebase.logEvent(
R.string.event_sync_add_account,
R.string.param_type to when {
it.uuid.isDavx5() -> Constants.SYNC_TYPE_DAVX5
it.uuid.isEteSync() -> Constants.SYNC_TYPE_ETESYNC_OT
it.uuid.isDecSync() -> Constants.SYNC_TYPE_DECSYNC
else -> throw IllegalArgumentException()
}
)
}
caldavDao.getAccounts(CaldavAccount.TYPE_OPENTASKS).forEach { account -> caldavDao.getAccounts(CaldavAccount.TYPE_OPENTASKS).forEach { account ->
val entries = lists[account.uuid!!] val entries = lists[account.uuid!!]
if (entries == null) { if (entries == null) {

@ -2,7 +2,11 @@ package org.tasks.sync
import com.todoroo.astrid.data.SyncFlags import com.todoroo.astrid.data.SyncFlags
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import kotlinx.coroutines.* import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.data.CaldavAccount.Companion.TYPE_CALDAV import org.tasks.data.CaldavAccount.Companion.TYPE_CALDAV
@ -110,7 +114,5 @@ class SyncAdapters @Inject constructor(
private suspend fun isEtebaseEnabled() = caldavDao.getAccounts(TYPE_ETEBASE).isNotEmpty() private suspend fun isEtebaseEnabled() = caldavDao.getAccounts(TYPE_ETEBASE).isNotEmpty()
private suspend fun isOpenTaskSyncEnabled() = private suspend fun isOpenTaskSyncEnabled() = openTaskDao.shouldSync()
caldavDao.getAccounts(TYPE_OPENTASKS).isNotEmpty()
|| openTaskDao.newAccounts().isNotEmpty()
} }
Loading…
Cancel
Save