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.billing.Inventory
import org.tasks.caldav.iCalendar.Companion.fromVtodo import org.tasks.caldav.iCalendar.Companion.fromVtodo
import org.tasks.data.CaldavAccount import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavAccount.Companion.TYPE_TASKS
import org.tasks.data.CaldavCalendar import org.tasks.data.CaldavCalendar
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDao
import org.tasks.data.CaldavTask import org.tasks.data.CaldavTask
@ -64,13 +65,15 @@ class CaldavSynchronizer @Inject constructor(
suspend fun sync(account: CaldavAccount) { suspend fun sync(account: CaldavAccount) {
Thread.currentThread().contextClassLoader = context.classLoader Thread.currentThread().contextClassLoader = context.classLoader
if (!inventory.hasPro) { if (account.accountType != TYPE_TASKS) {
setError(account, context.getString(R.string.requires_pro_subscription)) if (!inventory.hasPro) {
return setError(account, context.getString(R.string.requires_pro_subscription))
} return
if (isNullOrEmpty(account.password)) { }
setError(account, context.getString(R.string.password_required)) if (isNullOrEmpty(account.password)) {
return setError(account, context.getString(R.string.password_required))
return
}
} }
try { try {
synchronize(account) synchronize(account)

@ -93,6 +93,9 @@ class CaldavAccount : Parcelable {
val isOpenTaskEteSync: Boolean val isOpenTaskEteSync: Boolean
get() = uuid.openTaskType() == ACCOUNT_TYPE_ETESYNC get() = uuid.openTaskType() == ACCOUNT_TYPE_ETESYNC
val isTasksOrg: Boolean
get() = accountType == TYPE_TASKS
fun listSettingsClass(): Class<out BaseListSettingsActivity> = when(accountType) { fun listSettingsClass(): Class<out BaseListSettingsActivity> = when(accountType) {
TYPE_ETESYNC -> EteSyncCalendarSettingsActivity::class.java TYPE_ETESYNC -> EteSyncCalendarSettingsActivity::class.java
TYPE_LOCAL -> LocalListSettingsActivity::class.java TYPE_LOCAL -> LocalListSettingsActivity::class.java
@ -159,6 +162,7 @@ class CaldavAccount : Parcelable {
const val TYPE_ETESYNC = 1 const val TYPE_ETESYNC = 1
const val TYPE_LOCAL = 2 const val TYPE_LOCAL = 2
const val TYPE_OPENTASKS = 3 const val TYPE_OPENTASKS = 3
const val TYPE_TASKS = 4
fun String?.openTaskType(): String? = this?.split(":")?.get(0) 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") @Query("SELECT * FROM caldav_accounts WHERE cda_uuid = :uuid LIMIT 1")
abstract suspend fun getAccountByUuid(uuid: String): CaldavAccount? abstract suspend fun getAccountByUuid(uuid: String): CaldavAccount?
@Query("SELECT * FROM caldav_accounts WHERE cda_account_type = :type") suspend fun getAccounts(vararg types: Int) = getAccounts(types.toList())
abstract suspend fun getAccounts(type: Int): List<CaldavAccount>
@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)") @Query("SELECT * FROM caldav_accounts ORDER BY cda_account_type, UPPER(cda_name)")
abstract suspend fun getAccounts(): List<CaldavAccount> abstract suspend fun getAccounts(): List<CaldavAccount>

@ -10,6 +10,7 @@ import org.tasks.R
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.caldav.CaldavSynchronizer import org.tasks.caldav.CaldavSynchronizer
import org.tasks.data.CaldavAccount.Companion.TYPE_CALDAV import org.tasks.data.CaldavAccount.Companion.TYPE_CALDAV
import org.tasks.data.CaldavAccount.Companion.TYPE_TASKS
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDao
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -23,7 +24,7 @@ class SyncCaldavWork @WorkerInject constructor(
private val caldavSynchronizer: CaldavSynchronizer private val caldavSynchronizer: CaldavSynchronizer
) : SyncWork(context, workerParams, firebase, localBroadcastManager, preferences) { ) : 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 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 { private suspend fun caldavJobs(): List<Deferred<Unit>> = coroutineScope {
caldavDao.getAccounts(TYPE_CALDAV) getAccounts().map {
.map { async(Dispatchers.IO) {
async(Dispatchers.IO) { caldavSynchronizer.sync(it)
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_CALDAV
import org.tasks.data.CaldavAccount.Companion.TYPE_ETESYNC import org.tasks.data.CaldavAccount.Companion.TYPE_ETESYNC
import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS 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.CaldavDao
import org.tasks.data.GoogleTaskListDao import org.tasks.data.GoogleTaskListDao
import org.tasks.data.OpenTaskDao import org.tasks.data.OpenTaskDao
@ -148,7 +149,7 @@ class WorkManagerImpl constructor(
scheduleBackgroundSync( scheduleBackgroundSync(
TAG_BACKGROUND_SYNC_CALDAV, TAG_BACKGROUND_SYNC_CALDAV,
SyncCaldavWork::class.java, SyncCaldavWork::class.java,
enabled && caldavDao.getAccounts(TYPE_CALDAV).isNotEmpty(), enabled && caldavDao.getAccounts(TYPE_CALDAV, TYPE_TASKS).isNotEmpty(),
unmetered) unmetered)
} }
throttle.run { throttle.run {

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

@ -148,6 +148,7 @@ class Synchronization : InjectingPreferenceFragment() {
if (isNullOrEmpty(error)) { if (isNullOrEmpty(error)) {
preference.setSummary(when { preference.setSummary(when {
account.isCaldavAccount -> R.string.caldav account.isCaldavAccount -> R.string.caldav
account.isTasksOrg -> R.string.tasks_org
account.isEteSyncAccount account.isEteSyncAccount
|| (account.isOpenTasks || (account.isOpenTasks
&& account.uuid?.startsWith(ACCOUNT_TYPE_ETESYNC) == true) -> && account.uuid?.startsWith(ACCOUNT_TYPE_ETESYNC) == true) ->
@ -164,7 +165,8 @@ class Synchronization : InjectingPreferenceFragment() {
val intent = Intent(context, when { val intent = Intent(context, when {
account.isCaldavAccount -> CaldavAccountSettingsActivity::class.java account.isCaldavAccount -> CaldavAccountSettingsActivity::class.java
account.isEteSyncAccount -> EteSyncAccountSettingsActivity::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") else -> throw IllegalArgumentException("Unexpected account type: $account")
}) })
intent.putExtra(BaseCaldavAccountSettingsActivity.EXTRA_CALDAV_DATA, 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_CALDAV
import org.tasks.data.CaldavAccount.Companion.TYPE_ETESYNC import org.tasks.data.CaldavAccount.Companion.TYPE_ETESYNC
import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS 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.CaldavDao
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDao
import org.tasks.data.GoogleTaskListDao import org.tasks.data.GoogleTaskListDao
@ -54,7 +55,8 @@ class SyncAdapters @Inject constructor(
googleTasks.sync(false) googleTasks.sync(false)
} }
if (task.checkTransitory(SyncFlags.FORCE_CALDAV_SYNC) || !task.caldavUpToDate(original)) { 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) caldav.sync(false)
} }
if (caldavDao.isAccountType(task.id, TYPE_ETESYNC)) { 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 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() private suspend fun isEteSyncEnabled() = caldavDao.getAccounts(TYPE_ETESYNC).isNotEmpty()

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

Loading…
Cancel
Save