Add Tasks.org account type

pull/1208/head
Alex Baker 5 years ago
parent 49c7672822
commit 50c62a4114

@ -30,6 +30,7 @@ import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory
import org.tasks.caldav.iCalendar.Companion.fromVtodo
import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavAccount.Companion.TYPE_TASKS
import org.tasks.data.CaldavCalendar
import org.tasks.data.CaldavDao
import org.tasks.data.CaldavTask
@ -64,6 +65,7 @@ class CaldavSynchronizer @Inject constructor(
suspend fun sync(account: CaldavAccount) {
Thread.currentThread().contextClassLoader = context.classLoader
if (account.accountType != TYPE_TASKS) {
if (!inventory.hasPro) {
setError(account, context.getString(R.string.requires_pro_subscription))
return
@ -72,6 +74,7 @@ class CaldavSynchronizer @Inject constructor(
setError(account, context.getString(R.string.password_required))
return
}
}
try {
synchronize(account)
} catch (e: SocketTimeoutException) {

@ -93,6 +93,9 @@ class CaldavAccount : Parcelable {
val isOpenTaskEteSync: Boolean
get() = uuid.openTaskType() == ACCOUNT_TYPE_ETESYNC
val isTasksOrg: Boolean
get() = accountType == TYPE_TASKS
fun listSettingsClass(): Class<out BaseListSettingsActivity> = when(accountType) {
TYPE_ETESYNC -> EteSyncCalendarSettingsActivity::class.java
TYPE_LOCAL -> LocalListSettingsActivity::class.java
@ -159,6 +162,7 @@ class CaldavAccount : Parcelable {
const val TYPE_ETESYNC = 1
const val TYPE_LOCAL = 2
const val TYPE_OPENTASKS = 3
const val TYPE_TASKS = 4
fun String?.openTaskType(): String? = this?.split(":")?.get(0)

@ -32,8 +32,13 @@ abstract class CaldavDao {
@Query("SELECT * FROM caldav_accounts WHERE cda_uuid = :uuid LIMIT 1")
abstract suspend fun getAccountByUuid(uuid: String): CaldavAccount?
@Query("SELECT * FROM caldav_accounts WHERE cda_account_type = :type")
abstract suspend fun getAccounts(type: Int): List<CaldavAccount>
suspend fun getAccounts(vararg types: Int) = getAccounts(types.toList())
@Query("SELECT * FROM caldav_accounts WHERE cda_account_type IN (:types)")
abstract suspend fun getAccounts(types: List<Int>): List<CaldavAccount>
@Query("SELECT * FROM caldav_accounts WHERE cda_account_type = :type AND cda_username = :username")
abstract suspend fun getAccount(type: Int, username: String): CaldavAccount?
@Query("SELECT * FROM caldav_accounts ORDER BY cda_account_type, UPPER(cda_name)")
abstract suspend fun getAccounts(): List<CaldavAccount>

@ -10,6 +10,7 @@ import org.tasks.R
import org.tasks.analytics.Firebase
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
@ -23,7 +24,7 @@ class SyncCaldavWork @WorkerInject constructor(
private val caldavSynchronizer: CaldavSynchronizer
) : SyncWork(context, workerParams, firebase, localBroadcastManager, preferences) {
override suspend fun enabled() = caldavDao.getAccounts(TYPE_CALDAV).isNotEmpty()
override suspend fun enabled() = getAccounts().isNotEmpty()
override val syncStatus = R.string.p_sync_ongoing_caldav
@ -32,11 +33,13 @@ class SyncCaldavWork @WorkerInject constructor(
}
private suspend fun caldavJobs(): List<Deferred<Unit>> = coroutineScope {
caldavDao.getAccounts(TYPE_CALDAV)
.map {
getAccounts().map {
async(Dispatchers.IO) {
caldavSynchronizer.sync(it)
}
}
}
private suspend fun getAccounts() =
caldavDao.getAccounts(TYPE_CALDAV, TYPE_TASKS)
}

@ -15,6 +15,7 @@ import org.tasks.R
import org.tasks.data.CaldavAccount.Companion.TYPE_CALDAV
import org.tasks.data.CaldavAccount.Companion.TYPE_ETESYNC
import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS
import org.tasks.data.CaldavAccount.Companion.TYPE_TASKS
import org.tasks.data.CaldavDao
import org.tasks.data.GoogleTaskListDao
import org.tasks.data.OpenTaskDao
@ -148,7 +149,7 @@ class WorkManagerImpl constructor(
scheduleBackgroundSync(
TAG_BACKGROUND_SYNC_CALDAV,
SyncCaldavWork::class.java,
enabled && caldavDao.getAccounts(TYPE_CALDAV).isNotEmpty(),
enabled && caldavDao.getAccounts(TYPE_CALDAV, TYPE_TASKS).isNotEmpty(),
unmetered)
}
throttle.run {

@ -20,7 +20,7 @@ class OpenTaskAccountSettingsActivity : BaseCaldavAccountSettingsActivity(), Too
binding.passwordLayout.visibility = View.GONE
binding.urlLayout.visibility = View.GONE
if (caldavAccount!!.isOpenTaskEteSync) {
if (caldavAccount!!.isOpenTaskEteSync || caldavAccount!!.isTasksOrg) {
binding.repeat.visibility = View.GONE
}
}

@ -148,6 +148,7 @@ class Synchronization : InjectingPreferenceFragment() {
if (isNullOrEmpty(error)) {
preference.setSummary(when {
account.isCaldavAccount -> R.string.caldav
account.isTasksOrg -> R.string.tasks_org
account.isEteSyncAccount
|| (account.isOpenTasks
&& account.uuid?.startsWith(ACCOUNT_TYPE_ETESYNC) == true) ->
@ -164,7 +165,8 @@ class Synchronization : InjectingPreferenceFragment() {
val intent = Intent(context, when {
account.isCaldavAccount -> CaldavAccountSettingsActivity::class.java
account.isEteSyncAccount -> EteSyncAccountSettingsActivity::class.java
account.isOpenTasks -> OpenTaskAccountSettingsActivity::class.java
account.isOpenTasks || account.isTasksOrg ->
OpenTaskAccountSettingsActivity::class.java
else -> throw IllegalArgumentException("Unexpected account type: $account")
})
intent.putExtra(BaseCaldavAccountSettingsActivity.EXTRA_CALDAV_DATA, account)

@ -8,6 +8,7 @@ import org.tasks.R
import org.tasks.data.CaldavAccount.Companion.TYPE_CALDAV
import org.tasks.data.CaldavAccount.Companion.TYPE_ETESYNC
import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS
import org.tasks.data.CaldavAccount.Companion.TYPE_TASKS
import org.tasks.data.CaldavDao
import org.tasks.data.GoogleTaskDao
import org.tasks.data.GoogleTaskListDao
@ -54,7 +55,8 @@ class SyncAdapters @Inject constructor(
googleTasks.sync(false)
}
if (task.checkTransitory(SyncFlags.FORCE_CALDAV_SYNC) || !task.caldavUpToDate(original)) {
if (caldavDao.isAccountType(task.id, TYPE_CALDAV)) {
if (caldavDao.isAccountType(task.id, TYPE_CALDAV)
|| caldavDao.isAccountType(task.id, TYPE_TASKS)) {
caldav.sync(false)
}
if (caldavDao.isAccountType(task.id, TYPE_ETESYNC)) {
@ -103,7 +105,8 @@ class SyncAdapters @Inject constructor(
private suspend fun isGoogleTaskSyncEnabled() = googleTaskListDao.getAccounts().isNotEmpty()
private suspend fun isCaldavSyncEnabled() = caldavDao.getAccounts(TYPE_CALDAV).isNotEmpty()
private suspend fun isCaldavSyncEnabled() =
caldavDao.getAccounts(TYPE_CALDAV, TYPE_TASKS).isNotEmpty()
private suspend fun isEteSyncEnabled() = caldavDao.getAccounts(TYPE_ETESYNC).isNotEmpty()

@ -13,6 +13,7 @@
<string name="caldav">CalDAV</string>
<string name="etesync">EteSync</string>
<string name="davx5">DAVx⁵</string>
<string name="tasks_org">Tasks.org</string>
<string name="etesync_url">https://api.etesync.com</string>
<string name="help_url_sync">https://tasks.org/sync</string>

Loading…
Cancel
Save