diff --git a/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapterTest.kt b/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapterTest.kt index b5d6d381c..a64fb4b02 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapterTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapterTest.kt @@ -2,9 +2,7 @@ package com.todoroo.astrid.adapter import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.PropertyValue -import org.tasks.filters.CaldavFilter import com.todoroo.astrid.dao.TaskDao -import org.tasks.data.entity.Task import com.todoroo.astrid.service.TaskMover import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.UninstallModules @@ -15,11 +13,15 @@ import org.junit.Before import org.junit.Test import org.tasks.LocalBroadcastManager import org.tasks.R -import org.tasks.data.entity.CaldavCalendar -import org.tasks.data.dao.CaldavDao -import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.TaskContainer import org.tasks.data.TaskListQuery.getQuery +import org.tasks.data.dao.CaldavDao +import org.tasks.data.dao.GoogleTaskDao +import org.tasks.data.entity.CaldavAccount +import org.tasks.data.entity.CaldavAccount.Companion.TYPE_CALDAV +import org.tasks.data.entity.CaldavCalendar +import org.tasks.data.entity.Task +import org.tasks.filters.CaldavFilter import org.tasks.injection.InjectingTestCase import org.tasks.injection.ProductionModule import org.tasks.makers.CaldavTaskMaker.CALENDAR @@ -45,7 +47,10 @@ class CaldavManualSortTaskAdapterTest : InjectingTestCase() { private lateinit var adapter: CaldavManualSortTaskAdapter private val tasks = ArrayList() - private val filter = CaldavFilter(CaldavCalendar(name = "calendar", uuid = "1234")) + private val filter = CaldavFilter( + calendar = CaldavCalendar(name = "calendar", uuid = "1234"), + account = CaldavAccount(accountType = TYPE_CALDAV) + ) private val dataSource = object : TaskAdapterDataSource { override fun getItem(position: Int) = tasks[position] diff --git a/app/src/androidTest/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapterTest.kt b/app/src/androidTest/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapterTest.kt index 53e129fd1..eca69485c 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapterTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapterTest.kt @@ -2,7 +2,6 @@ package com.todoroo.astrid.adapter import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.PropertyValue -import org.tasks.filters.GtasksFilter import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.service.TaskMover import dagger.hilt.android.testing.HiltAndroidTest @@ -17,8 +16,11 @@ import org.tasks.data.TaskContainer import org.tasks.data.TaskListQuery.getQuery import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.GoogleTaskDao +import org.tasks.data.entity.CaldavAccount +import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.Task +import org.tasks.filters.CaldavFilter import org.tasks.injection.InjectingTestCase import org.tasks.injection.ProductionModule import org.tasks.makers.CaldavTaskMaker.CALENDAR @@ -41,7 +43,10 @@ class GoogleTaskManualSortAdapterTest : InjectingTestCase() { private lateinit var adapter: GoogleTaskManualSortAdapter private val tasks = ArrayList() - private val filter = GtasksFilter(CaldavCalendar(uuid = "1234")) + private val filter = CaldavFilter( + calendar = CaldavCalendar(uuid = "1234"), + account = CaldavAccount(accountType = TYPE_GOOGLE_TASKS) + ) private val dataSource = object : TaskAdapterDataSource { override fun getItem(position: Int) = tasks[position] diff --git a/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt b/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt index c3d5ac20d..72bcc21b7 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt @@ -1,8 +1,6 @@ package com.todoroo.astrid.service import com.natpryce.makeiteasy.MakeItEasy.with -import org.tasks.filters.CaldavFilter -import org.tasks.filters.GtasksFilter import com.todoroo.astrid.dao.TaskDao import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.UninstallModules @@ -17,6 +15,7 @@ import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount.Companion.TYPE_CALDAV import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.data.entity.CaldavCalendar +import org.tasks.filters.CaldavFilter import org.tasks.injection.InjectingTestCase import org.tasks.injection.ProductionModule import org.tasks.jobs.WorkManager @@ -306,11 +305,23 @@ class TaskMoverTest : InjectingTestCase() { } private suspend fun moveToGoogleTasks(list: String, vararg tasks: Long) { - taskMover.move(tasks.toList(), GtasksFilter(CaldavCalendar(uuid = list))) + taskMover.move( + tasks.toList(), + CaldavFilter( + calendar = CaldavCalendar(uuid = list), + account = CaldavAccount(accountType = TYPE_GOOGLE_TASKS) + ) + ) } private suspend fun moveToCaldavList(calendar: String, vararg tasks: Long) { - taskMover.move(tasks.toList(), CaldavFilter(CaldavCalendar(name = "", uuid = calendar))) + taskMover.move( + tasks.toList(), + CaldavFilter( + CaldavCalendar(name = "", uuid = calendar), + account = CaldavAccount(accountType = TYPE_CALDAV) + ) + ) } private suspend fun setAccountType(account: String, type: Int) { diff --git a/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt b/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt index aef2a50a8..a52fbb450 100644 --- a/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt +++ b/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt @@ -1,7 +1,6 @@ package org.tasks.data import com.natpryce.makeiteasy.MakeItEasy.with -import org.tasks.filters.GtasksFilter import com.todoroo.astrid.dao.TaskDao import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.UninstallModules @@ -13,7 +12,9 @@ import org.tasks.R import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.entity.CaldavAccount +import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.data.entity.CaldavCalendar +import org.tasks.filters.CaldavFilter import org.tasks.injection.InjectingTestCase import org.tasks.injection.ProductionModule import org.tasks.makers.CaldavTaskMaker.CALENDAR @@ -33,7 +34,7 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() { @Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var taskDao: TaskDao @Inject lateinit var preferences: Preferences - private lateinit var filter: GtasksFilter + private lateinit var filter: CaldavFilter @Before override fun setUp() { @@ -45,7 +46,7 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() { caldavDao.insert(CaldavAccount()) caldavDao.insert(calendar) } - filter = GtasksFilter(calendar) + filter = CaldavFilter(calendar, account = CaldavAccount(accountType = TYPE_GOOGLE_TASKS)) } @Test @@ -101,7 +102,7 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() { with(ORDER, order), with(PARENT, parent), )) - googleTaskDao.insert(newCaldavTask(with(CALENDAR, filter.list.uuid), with(TASK, id))) + googleTaskDao.insert(newCaldavTask(with(CALENDAR, filter.uuid), with(TASK, id))) } private suspend fun query(): List = taskDao.fetchTasks { diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt index 375e7784b..64eec9691 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt @@ -51,6 +51,7 @@ import org.tasks.analytics.Firebase import org.tasks.billing.Inventory import org.tasks.billing.PurchaseActivity import org.tasks.caldav.BaseCaldavCalendarSettingsActivity +import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_ACCOUNT import org.tasks.compose.drawer.DrawerAction import org.tasks.compose.drawer.DrawerItem import org.tasks.compose.drawer.MenuSearchBar @@ -200,9 +201,9 @@ class MainActivity : AppCompatActivity() { REQUEST_NEW_LIST ) - REQUEST_NEW_LIST -> lifecycleScope.launch { + REQUEST_NEW_LIST -> { val account = - caldavDao.getAccount(it.header.id) ?: return@launch + caldavDao.getAccount(it.header.id.toLong()) ?: return@launch when (it.header.subheaderType) { NavigationDrawerSubheader.SubheaderType.GOOGLE_TASKS -> startActivityForResult( @@ -211,7 +212,7 @@ class MainActivity : AppCompatActivity() { GoogleTaskListSettingsActivity::class.java ) .putExtra( - GoogleTaskListSettingsActivity.EXTRA_ACCOUNT, + EXTRA_CALDAV_ACCOUNT, account ), REQUEST_NEW_LIST @@ -225,7 +226,7 @@ class MainActivity : AppCompatActivity() { account.listSettingsClass() ) .putExtra( - BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT, + EXTRA_CALDAV_ACCOUNT, account ), REQUEST_NEW_LIST diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt index 1f1ad426a..fe838f053 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -80,7 +80,6 @@ import org.tasks.R import org.tasks.ShortcutManager import org.tasks.TasksApplication import org.tasks.activities.FilterSettingsActivity -import org.tasks.activities.GoogleTaskListSettingsActivity import org.tasks.activities.PlaceSettingsActivity import org.tasks.activities.TagSettingsActivity import org.tasks.analytics.Firebase @@ -121,7 +120,6 @@ import org.tasks.filters.CaldavFilter import org.tasks.filters.CustomFilter import org.tasks.filters.Filter import org.tasks.filters.FilterImpl -import org.tasks.filters.GtasksFilter import org.tasks.filters.MyTasksFilter import org.tasks.filters.PlaceFilter import org.tasks.filters.TagFilter @@ -462,7 +460,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL when (filter) { is CaldavFilter -> R.menu.menu_caldav_list_fragment is CustomFilter -> R.menu.menu_custom_filter - is GtasksFilter -> R.menu.menu_gtasks_list_fragment is TagFilter -> R.menu.menu_tag_view_fragment is PlaceFilter -> R.menu.menu_location_list_fragment else -> null @@ -571,15 +568,12 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL true } R.id.menu_caldav_list_fragment -> { - val calendar = (filter as CaldavFilter).calendar - lifecycleScope.launch { - val account = caldavDao.getAccountByUuid(calendar.account!!) - listSettingsRequest.launch( - Intent(activity, account!!.listSettingsClass()) - .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT, account) - .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR, calendar) - ) - } + val filter = filter as? CaldavFilter ?: return false + listSettingsRequest.launch( + Intent(activity, filter.account.listSettingsClass()) + .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT, filter.account) + .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR, filter.calendar) + ) true } R.id.menu_location_settings -> { @@ -590,13 +584,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL ) true } - R.id.menu_gtasks_list_settings -> { - listSettingsRequest.launch( - Intent(activity, GoogleTaskListSettingsActivity::class.java) - .putExtra(GoogleTaskListSettingsActivity.EXTRA_STORE_DATA, (filter as GtasksFilter).list) - ) - true - } R.id.menu_tag_settings -> { listSettingsRequest.launch( Intent(activity, TagSettingsActivity::class.java) diff --git a/app/src/main/java/com/todoroo/astrid/adapter/SubheaderClickHandler.kt b/app/src/main/java/com/todoroo/astrid/adapter/SubheaderClickHandler.kt index b5df4c9b3..856e9df4b 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/SubheaderClickHandler.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/SubheaderClickHandler.kt @@ -7,9 +7,8 @@ import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.launch import org.tasks.LocalBroadcastManager -import org.tasks.activities.GoogleTaskListSettingsActivity import org.tasks.activities.TagSettingsActivity -import org.tasks.caldav.BaseCaldavCalendarSettingsActivity +import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_ACCOUNT import org.tasks.data.dao.CaldavDao import org.tasks.data.listSettingsClass import org.tasks.dialogs.NewFilterDialog @@ -22,9 +21,9 @@ import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.CALDAV import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.GOOGLE_TASKS import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.PREFERENCE import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.TASKS -import org.tasks.preferences.TasksPreferences import org.tasks.location.LocationPickerActivity import org.tasks.preferences.MainPreferences +import org.tasks.preferences.TasksPreferences import timber.log.Timber import javax.inject.Inject @@ -66,26 +65,14 @@ class SubheaderClickHandler @Inject constructor( ) REQUEST_NEW_LIST -> { (activity as AppCompatActivity).lifecycleScope.launch { - val account = caldavDao.getAccount(subheader.id) ?: return@launch + val account = caldavDao.getAccount(subheader.id.toLong()) ?: return@launch when (subheader.subheaderType) { - NavigationDrawerSubheader.SubheaderType.GOOGLE_TASKS -> - activity.startActivityForResult( - Intent(activity, GoogleTaskListSettingsActivity::class.java) - .putExtra( - GoogleTaskListSettingsActivity.EXTRA_ACCOUNT, - account - ), - REQUEST_NEW_LIST - ) - + NavigationDrawerSubheader.SubheaderType.GOOGLE_TASKS, NavigationDrawerSubheader.SubheaderType.CALDAV, NavigationDrawerSubheader.SubheaderType.TASKS -> activity.startActivityForResult( Intent(activity, account.listSettingsClass()) - .putExtra( - BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT, - account - ), + .putExtra(EXTRA_CALDAV_ACCOUNT, account), REQUEST_NEW_LIST ) diff --git a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt index c9ba2b335..e289d6dff 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt @@ -17,7 +17,6 @@ import org.tasks.data.entity.TaskListMetadata import org.tasks.filters.AstridOrderingFilter import org.tasks.filters.CaldavFilter import org.tasks.filters.Filter -import org.tasks.filters.GtasksFilter import org.tasks.filters.MyTasksFilter import org.tasks.filters.TagFilter import org.tasks.filters.TodayFilter @@ -47,9 +46,11 @@ class TaskAdapterProvider @Inject constructor( } } if (filter.supportsManualSort() && preferences.isManualSort) { - when (filter) { - is GtasksFilter -> return GoogleTaskManualSortAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) - is CaldavFilter -> return CaldavManualSortTaskAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) + if (filter is CaldavFilter) { + when { + filter.isGoogleTasks -> return GoogleTaskManualSortAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) + filter.isIcalendar -> return CaldavManualSortTaskAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) + } } } return TaskAdapter(preferences.addTasksToTop(), googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) diff --git a/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt b/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt index 251476425..6db0a39ee 100644 --- a/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt @@ -14,7 +14,6 @@ import androidx.compose.ui.platform.ComposeView import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.lifecycleScope import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.launch import net.fortuna.ical4j.model.Recur import net.fortuna.ical4j.model.WeekDay import org.tasks.R @@ -22,7 +21,6 @@ import org.tasks.compose.edit.RepeatRow import org.tasks.data.dao.CaldavDao import org.tasks.data.entity.CaldavAccount import org.tasks.filters.CaldavFilter -import org.tasks.filters.GtasksFilter import org.tasks.repeats.BasicRecurrenceDialog import org.tasks.repeats.RecurrenceUtils.newRecur import org.tasks.repeats.RepeatRuleToString @@ -91,27 +89,23 @@ class RepeatControlSet : TaskEditControlFragment() { }, repeatAfterCompletion = viewModel.repeatAfterCompletion.collectAsStateWithLifecycle().value, onClick = { - lifecycleScope.launch { - val accountType = viewModel.selectedList.value - .let { - when (it) { - is CaldavFilter -> it.account - is GtasksFilter -> it.account - else -> null - } + val accountType = viewModel.selectedList.value + .let { + when (it) { + is CaldavFilter -> it.account + else -> null } - ?.let { caldavDao.getAccountByUuid(it) } - ?.accountType - ?: CaldavAccount.TYPE_LOCAL - BasicRecurrenceDialog.newBasicRecurrenceDialog( - target = this@RepeatControlSet, - rc = REQUEST_RECURRENCE, - rrule = viewModel.recurrence.value, - dueDate = viewModel.dueDate.value, - accountType = accountType, - ) - .show(parentFragmentManager, FRAG_TAG_BASIC_RECURRENCE) - } + } + ?.accountType + ?: CaldavAccount.TYPE_LOCAL + BasicRecurrenceDialog.newBasicRecurrenceDialog( + target = this@RepeatControlSet, + rc = REQUEST_RECURRENCE, + rrule = viewModel.recurrence.value, + dueDate = viewModel.dueDate.value, + accountType = accountType, + ) + .show(parentFragmentManager, FRAG_TAG_BASIC_RECURRENCE) }, onRepeatFromChanged = { viewModel.repeatAfterCompletion.value = it } ) diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt index 4fd409802..84707158a 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskCreator.kt @@ -33,7 +33,6 @@ import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_NONE import org.tasks.data.entity.Task.Companion.IMPORTANCE import org.tasks.filters.CaldavFilter import org.tasks.filters.Filter -import org.tasks.filters.GtasksFilter import org.tasks.filters.mapFromSerializedString import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.Preferences @@ -88,25 +87,27 @@ class TaskCreator @Inject constructor( ) } else { val remoteList = defaultFilterProvider.getDefaultList() - if (remoteList is GtasksFilter) { - googleTaskDao.insertAndShift( - task, - CaldavTask( - task = task.id, - calendar = remoteList.remoteId, - remoteId = null - ), - addToTop - ) - } else if (remoteList is CaldavFilter) { - caldavDao.insert( - task, - CaldavTask( - task = task.id, - calendar = remoteList.uuid, - ), - addToTop - ) + if (remoteList is CaldavFilter) { + if (remoteList.isGoogleTasks) { + googleTaskDao.insertAndShift( + task, + CaldavTask( + task = task.id, + calendar = remoteList.uuid, + remoteId = null + ), + addToTop + ) + } else { + caldavDao.insert( + task, + CaldavTask( + task = task.id, + calendar = remoteList.uuid, + ), + addToTop + ) + } } } if (task.hasTransitory(Place.KEY)) { diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt index ce3bdc52c..477cc3af8 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt @@ -1,19 +1,16 @@ package com.todoroo.astrid.service -import org.tasks.BuildConfig import org.tasks.LocalBroadcastManager import org.tasks.caldav.VtodoCache import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.TaskDao import org.tasks.data.db.DbUtils.dbchunk -import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.Task import org.tasks.data.getLocalList import org.tasks.filters.CaldavFilter import org.tasks.filters.Filter -import org.tasks.filters.GtasksFilter import org.tasks.preferences.Preferences import org.tasks.sync.SyncAdapters import org.tasks.time.DateTimeUtils2.currentTimeMillis @@ -31,16 +28,13 @@ class TaskMover @Inject constructor( suspend fun getSingleFilter(tasks: List): Filter? { val caldavCalendars = caldavDao.getCalendars(tasks) - if (caldavCalendars.size == 1) { + return if (caldavCalendars.size == 1) { val list = caldavCalendars.first() val account = list.account?.let { caldavDao.getAccountByUuid(it) } - return when (account?.accountType) { - null -> null - CaldavAccount.TYPE_GOOGLE_TASKS -> GtasksFilter(list) - else -> CaldavFilter(list) - } + account?.let { CaldavFilter(calendar = list, account = it) } + } else { + null } - return null } suspend fun move(task: Long, list: Long) { @@ -48,14 +42,11 @@ class TaskMover @Inject constructor( val account = calendar.account?.let { caldavDao.getAccountByUuid(it) } ?: return move( ids = listOf(task), - selectedList = if (account.accountType == CaldavAccount.TYPE_GOOGLE_TASKS) - GtasksFilter(calendar) - else - CaldavFilter(calendar) + selectedList = CaldavFilter(calendar = calendar, account = account), ) } - suspend fun move(ids: List, selectedList: Filter) { + suspend fun move(ids: List, selectedList: CaldavFilter) { val tasks = ids .dbchunk() .flatMap { taskDao.getChildren(it) } @@ -64,7 +55,7 @@ class TaskMover @Inject constructor( val taskIds = tasks.map { it.id } taskDao.setParent(0, ids.intersect(taskIds.toSet()).toList()) tasks.forEach { performMove(it, selectedList) } - if (selectedList is CaldavFilter) { + if (selectedList.isIcalendar) { caldavDao.updateParents(selectedList.uuid) } taskIds.dbchunk().forEach { @@ -76,10 +67,11 @@ class TaskMover @Inject constructor( suspend fun migrateLocalTasks() { val list = caldavDao.getLocalList() - move(taskDao.getLocalTasks(), CaldavFilter(list)) + val account = list.account?.let { caldavDao.getAccountByUuid(it) } ?: return + move(taskDao.getLocalTasks(), CaldavFilter(calendar = list, account = account)) } - private suspend fun performMove(task: Task, selectedList: Filter) { + private suspend fun performMove(task: Task, selectedList: CaldavFilter) { googleTaskDao.getByTaskId(task.id)?.let { moveGoogleTask(task, it, selectedList) return @@ -91,16 +83,16 @@ class TaskMover @Inject constructor( moveLocalTask(task, selectedList) } - private suspend fun moveGoogleTask(task: Task, googleTask: CaldavTask, selected: Filter) { - if (selected is GtasksFilter && googleTask.calendar == selected.remoteId) { + private suspend fun moveGoogleTask(task: Task, googleTask: CaldavTask, selected: CaldavFilter) { + if (googleTask.calendar == selected.uuid) { return } val id = task.id val children = taskDao.getChildren(id) caldavDao.markDeleted(children + id, currentTimeMillis()) - when(selected) { - is GtasksFilter -> { - val listId = selected.remoteId + when { + selected.isGoogleTasks -> { + val listId = selected.uuid googleTaskDao.insertAndShift( task = task, caldavTask = CaldavTask( @@ -120,7 +112,7 @@ class TaskMover @Inject constructor( } ?.let { googleTaskDao.insert(it) } } - is CaldavFilter -> { + else -> { val listId = selected.uuid val newParent = CaldavTask( task = id, @@ -136,13 +128,11 @@ class TaskMover @Inject constructor( newChild }.let { caldavDao.insert(it) } } - else -> require(!BuildConfig.DEBUG) } } - private suspend fun moveCaldavTask(task: Task, caldavTask: CaldavTask, selected: Filter) { - if (selected is CaldavFilter - && caldavTask.calendar == selected.uuid) { + private suspend fun moveCaldavTask(task: Task, caldavTask: CaldavTask, selected: CaldavFilter) { + if (caldavTask.calendar == selected.uuid) { return } val id = task.id @@ -154,8 +144,9 @@ class TaskMover @Inject constructor( toDelete.addAll(childIds) } caldavDao.markDeleted(toDelete, currentTimeMillis()) - when (selected) { - is CaldavFilter -> { + when { + selected.isGoogleTasks -> moveToGoogleTasks(id, childIds, selected) + else -> { val from = caldavDao.getCalendar(caldavTask.calendar!!) val id1 = caldavTask.task val listId = selected.uuid @@ -181,15 +172,13 @@ class TaskMover @Inject constructor( } ?.let { caldavDao.insert(it) } } - is GtasksFilter -> moveToGoogleTasks(id, childIds, selected) - else -> require(!BuildConfig.DEBUG) } } - private suspend fun moveLocalTask(task: Task, selected: Filter) { - when (selected) { - is GtasksFilter -> moveToGoogleTasks(task.id, taskDao.getChildren(task.id), selected) - is CaldavFilter -> { + private suspend fun moveLocalTask(task: Task, selected: CaldavFilter) { + when { + selected.isGoogleTasks -> moveToGoogleTasks(task.id, taskDao.getChildren(task.id), selected) + else -> { val id = task.id val listId = selected.uuid val tasks: MutableMap = HashMap() @@ -210,14 +199,16 @@ class TaskMover @Inject constructor( caldavDao.insert(task, root, preferences.addTasksToTop()) caldavDao.insert(tasks.values) } - else -> require(!BuildConfig.DEBUG) } } - private suspend fun moveToGoogleTasks(id: Long, children: List, filter: GtasksFilter) { + private suspend fun moveToGoogleTasks(id: Long, children: List, filter: CaldavFilter) { + if (!filter.isGoogleTasks) { + return + } val task = taskDao.fetch(id) ?: return taskDao.setParent(id, children) - val listId = filter.remoteId + val listId = filter.uuid googleTaskDao.insertAndShift( task, CaldavTask( diff --git a/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt b/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt index ddcd4b7f7..23092dc07 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt @@ -32,7 +32,7 @@ import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.Filter import org.tasks.data.entity.Tag import org.tasks.data.entity.TagData -import org.tasks.filters.GtasksFilter +import org.tasks.filters.CaldavFilter import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.Preferences import org.tasks.time.DateTimeUtils2.currentTimeMillis @@ -270,7 +270,10 @@ class Upgrader @Inject constructor( } else { val googleTaskList = caldavDao.getCalendarByUuid(defaultGoogleTaskList!!) if (googleTaskList != null) { - defaultFilterProvider.defaultList = GtasksFilter(googleTaskList) + caldavDao.getAccountByUuid(googleTaskList.account!!)?.let { + defaultFilterProvider.defaultList = + CaldavFilter(calendar = googleTaskList, account = it) + } } } } diff --git a/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt b/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt index 6944f1e92..f868091cd 100644 --- a/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt @@ -18,12 +18,14 @@ import kotlinx.coroutines.withContext import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.Strings.isNullOrEmpty +import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_ACCOUNT +import org.tasks.caldav.BaseCaldavCalendarSettingsActivity.Companion.EXTRA_CALDAV_CALENDAR import org.tasks.compose.settings.Toaster import org.tasks.data.dao.CaldavDao import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavCalendar +import org.tasks.filters.CaldavFilter import org.tasks.filters.Filter -import org.tasks.filters.GtasksFilter import org.tasks.themes.TasksIcons import org.tasks.themes.TasksTheme import timber.log.Timber @@ -35,6 +37,12 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { @Inject lateinit var taskDeleter: TaskDeleter @Inject lateinit var localBroadcastManager: LocalBroadcastManager + private val account: CaldavAccount + get() = intent.getParcelableExtra(EXTRA_CALDAV_ACCOUNT)!! + + private val list: CaldavCalendar? + get() = intent.getParcelableExtra(EXTRA_CALDAV_CALENDAR) + private var isNewList = false private lateinit var gtasksList: CaldavCalendar private val createListViewModel: CreateListViewModel by viewModels() @@ -45,12 +53,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { val snackbar = SnackbarHostState() override fun onCreate(savedInstanceState: Bundle?) { - gtasksList = intent.getParcelableExtra(EXTRA_STORE_DATA) - ?: CaldavCalendar( - account = intent.getParcelableExtra(EXTRA_ACCOUNT)!!.username - ).apply { - isNewList = true - } + gtasksList = list ?: CaldavCalendar(account = account.username).apply { isNewList = true } super.onCreate(savedInstanceState) if (savedInstanceState == null) { baseViewModel.setColor(gtasksList.color) @@ -78,7 +81,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { } override val filter: Filter? - get() = if (isNewList) null else GtasksFilter(gtasksList) + get() = if (isNewList) null else CaldavFilter(calendar = gtasksList, account = account) override val toolbarTitle: String get() = if (isNew) getString(R.string.new_list) else gtasksList.name!! @@ -123,7 +126,11 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { setResult( Activity.RESULT_OK, Intent(TaskListFragment.ACTION_RELOAD) - .putExtra(MainActivity.OPEN_FILTER, GtasksFilter(gtasksList))) + .putExtra( + MainActivity.OPEN_FILTER, + CaldavFilter(calendar = gtasksList, account = account) + ) + ) } finish() } @@ -172,7 +179,11 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { setResult( Activity.RESULT_OK, - Intent().putExtra(MainActivity.OPEN_FILTER, GtasksFilter(result.copy(id = id)))) + Intent().putExtra( + MainActivity.OPEN_FILTER, + CaldavFilter(calendar = result.copy(id = id), account = account) + ) + ) finish() } @@ -199,7 +210,11 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { setResult( Activity.RESULT_OK, Intent(TaskListFragment.ACTION_RELOAD) - .putExtra(MainActivity.OPEN_FILTER, GtasksFilter(result))) + .putExtra( + MainActivity.OPEN_FILTER, + CaldavFilter(calendar = result, account = account) + ) + ) finish() } @@ -210,9 +225,4 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { //toast(R.string.gtasks_GLA_errorIOAuth) return } - - companion object { - const val EXTRA_ACCOUNT = "extra_account" - const val EXTRA_STORE_DATA = "extra_store_data" - } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt b/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt index c47bc24f0..baac736a6 100644 --- a/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt +++ b/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt @@ -18,10 +18,6 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.todoroo.astrid.adapter.FilterViewHolder import com.todoroo.astrid.adapter.NavigationDrawerAdapter -import org.tasks.filters.CaldavFilter -import org.tasks.filters.CustomFilter -import org.tasks.filters.GtasksFilter -import org.tasks.filters.TagFilter import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import org.tasks.LocalBroadcastManager @@ -33,10 +29,13 @@ import org.tasks.data.dao.LocationDao import org.tasks.data.dao.TagDataDao import org.tasks.data.listSettingsClass import org.tasks.databinding.ActivityTagOrganizerBinding +import org.tasks.filters.CaldavFilter +import org.tasks.filters.CustomFilter import org.tasks.filters.Filter import org.tasks.filters.FilterListItem import org.tasks.filters.FilterProvider import org.tasks.filters.PlaceFilter +import org.tasks.filters.TagFilter import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.preferences.Preferences import javax.inject.Inject @@ -103,18 +102,11 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba private fun onClick(item: FilterListItem?) { when (item) { - is GtasksFilter -> - Intent(this, GoogleTaskListSettingsActivity::class.java) - .putExtra(GoogleTaskListSettingsActivity.EXTRA_STORE_DATA, item.list) - .apply(this::startActivity) is CaldavFilter -> - lifecycleScope.launch { - caldavDao.getAccountByUuid(item.account)?.let { - Intent(this@NavigationDrawerCustomization, it.listSettingsClass()) - .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR, item.calendar) - .apply { startActivity(this) } - } - } + Intent(this@NavigationDrawerCustomization, item.account.listSettingsClass()) + .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR, item.calendar) + .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT, item.account) + .apply { startActivity(this) } is CustomFilter -> Intent(this, FilterSettingsActivity::class.java) .putExtra(FilterSettingsActivity.TOKEN_FILTER, item) @@ -178,11 +170,7 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba if (sourceFilter::class.java != targetFilter::class.java) { return false } - if (sourceFilter is GtasksFilter && targetFilter is GtasksFilter) { - if (sourceFilter.account != targetFilter.account) { - return false - } - } else if (sourceFilter is CaldavFilter && targetFilter is CaldavFilter) { + if (sourceFilter is CaldavFilter && targetFilter is CaldavFilter) { if (sourceFilter.account != targetFilter.account) { return false } @@ -227,7 +215,6 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba private fun getPredicate(item: FilterListItem): (FilterListItem) -> Boolean = { f -> item::class.java == f::class.java && when (item) { - is GtasksFilter -> item.account == (f as GtasksFilter).account is CaldavFilter -> item.account == (f as CaldavFilter).account else -> true } @@ -235,7 +222,6 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba private suspend fun setOrder(order: Int, filter: Filter) { when (filter) { - is GtasksFilter -> caldavDao.setOrder(filter.list.id, order) is CaldavFilter -> caldavDao.setOrder(filter.calendar.id, order) is TagFilter -> tagDataDao.setOrder(filter.tagData.id!!, order) is CustomFilter -> filterDao.setOrder(filter.id, order) diff --git a/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt b/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt index 56533e0c0..e4ffbde24 100644 --- a/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt +++ b/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt @@ -59,7 +59,7 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() { } override val filter: Filter? - get() = caldavCalendar?.let { CaldavFilter(it) } + get() = caldavCalendar?.let { CaldavFilter(calendar = it, account = caldavAccount) } override val toolbarTitle: String get() = if (isNew) getString(R.string.new_list) else caldavCalendar!!.name ?: "" @@ -134,7 +134,11 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() { caldavDao.insert(caldavCalendar) setResult( Activity.RESULT_OK, - Intent().putExtra(MainActivity.OPEN_FILTER, CaldavFilter(caldavCalendar))) + Intent().putExtra( + MainActivity.OPEN_FILTER, + CaldavFilter(calendar = caldavCalendar, account = caldavAccount) + ) + ) finish() } @@ -148,7 +152,11 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() { setResult( Activity.RESULT_OK, Intent(TaskListFragment.ACTION_RELOAD) - .putExtra(MainActivity.OPEN_FILTER, CaldavFilter(result))) + .putExtra( + MainActivity.OPEN_FILTER, + CaldavFilter(calendar = result, account = caldavAccount) + ) + ) finish() } diff --git a/app/src/main/java/org/tasks/caldav/CaldavCalendarViewModel.kt b/app/src/main/java/org/tasks/caldav/CaldavCalendarViewModel.kt index a2e3bc6e6..c7f30feca 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavCalendarViewModel.kt +++ b/app/src/main/java/org/tasks/caldav/CaldavCalendarViewModel.kt @@ -50,7 +50,10 @@ class CaldavCalendarViewModel @Inject constructor( caldavDao.insert(this) } if (!ignoreFinish) { - finish.value = Intent().putExtra(MainActivity.OPEN_FILTER, CaldavFilter(calendar)) + finish.value = Intent().putExtra( + MainActivity.OPEN_FILTER, + CaldavFilter(calendar = calendar, account = caldavAccount) + ) } calendar } @@ -73,7 +76,10 @@ class CaldavCalendarViewModel @Inject constructor( ) caldavDao.update(result) finish.value = Intent(TaskListFragment.ACTION_RELOAD) - .putExtra(MainActivity.OPEN_FILTER, CaldavFilter(result)) + .putExtra( + MainActivity.OPEN_FILTER, + CaldavFilter(calendar = result, account = account) + ) } suspend fun deleteCalendar(account: CaldavAccount, calendar: CaldavCalendar) = diff --git a/app/src/main/java/org/tasks/compose/FilterSelectionActivity.kt b/app/src/main/java/org/tasks/compose/FilterSelectionActivity.kt index 39e4cacd0..b5121bd5a 100644 --- a/app/src/main/java/org/tasks/compose/FilterSelectionActivity.kt +++ b/app/src/main/java/org/tasks/compose/FilterSelectionActivity.kt @@ -30,6 +30,7 @@ import dagger.hilt.android.AndroidEntryPoint import org.tasks.LocalBroadcastManager import org.tasks.compose.pickers.SearchableFilterPicker import org.tasks.dialogs.FilterPickerViewModel +import org.tasks.filters.CaldavFilter import org.tasks.filters.Filter import org.tasks.filters.NavigationDrawerSubheader import org.tasks.preferences.DefaultFilterProvider @@ -110,11 +111,11 @@ class FilterSelectionActivity : AppCompatActivity() { const val EXTRA_FILTER = "extra_filter" const val EXTRA_LISTS_ONLY = "extra_lists_only" - fun Fragment.registerForListPickerResult(callback: (Filter) -> Unit): ActivityResultLauncher { + fun Fragment.registerForListPickerResult(callback: (CaldavFilter) -> Unit): ActivityResultLauncher { return registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { it.data?.let { intent -> IntentCompat - .getParcelableExtra(intent, EXTRA_FILTER, Filter::class.java) + .getParcelableExtra(intent, EXTRA_FILTER, CaldavFilter::class.java) ?.let(callback) } } diff --git a/app/src/main/java/org/tasks/compose/edit/SubtaskRow.kt b/app/src/main/java/org/tasks/compose/edit/SubtaskRow.kt index 0f2eeb8ad..7e2ae4b59 100644 --- a/app/src/main/java/org/tasks/compose/edit/SubtaskRow.kt +++ b/app/src/main/java/org/tasks/compose/edit/SubtaskRow.kt @@ -40,10 +40,11 @@ import org.tasks.compose.SubtaskChip import org.tasks.compose.TaskEditIcon import org.tasks.compose.TaskEditRow import org.tasks.data.TaskContainer +import org.tasks.data.entity.CaldavAccount +import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.Task import org.tasks.data.isHidden -import org.tasks.filters.Filter -import org.tasks.filters.GtasksFilter +import org.tasks.filters.CaldavFilter import org.tasks.tasklist.SectionedDataSource import org.tasks.tasklist.TasksResults import org.tasks.tasklist.UiItem @@ -51,8 +52,8 @@ import org.tasks.themes.TasksTheme @Composable fun SubtaskRow( - originalFilter: Filter?, - filter: Filter?, + originalFilter: CaldavFilter, + filter: CaldavFilter, hasParent: Boolean, existingSubtasks: TasksResults, newSubtasks: List, @@ -81,9 +82,9 @@ fun SubtaskRow( Column { val isGoogleTaskChild = hasParent && - filter is GtasksFilter && - originalFilter is GtasksFilter && - originalFilter.remoteId == filter.remoteId + filter.isGoogleTasks && + originalFilter.isGoogleTasks && + originalFilter.uuid == filter.uuid if (isGoogleTaskChild) { DisabledText( text = stringResource(id = org.tasks.R.string.subtasks_multilevel_google_task), @@ -99,7 +100,7 @@ fun SubtaskRow( .forEach { task -> ExistingSubtaskRow( task = task, - indent = if (filter !is GtasksFilter) task.indent else 0, + indent = if (filter.isIcalendar) task.indent else 0, onRowClick = { openSubtask(task.task) }, onCompleteClick = { completeExistingSubtask( @@ -234,8 +235,8 @@ fun ExistingSubtaskRow( fun NoSubtasks() { TasksTheme { SubtaskRow( - originalFilter = null, - filter = null, + originalFilter = CaldavFilter(CaldavCalendar(), CaldavAccount()), + filter = CaldavFilter(CaldavCalendar(), CaldavAccount()), hasParent = false, existingSubtasks = TasksResults.Results(SectionedDataSource()), newSubtasks = emptyList(), @@ -255,8 +256,8 @@ fun NoSubtasks() { fun SubtasksPreview() { TasksTheme { SubtaskRow( - originalFilter = null, - filter = null, + originalFilter = CaldavFilter(CaldavCalendar(), CaldavAccount()), + filter = CaldavFilter(CaldavCalendar(), CaldavAccount()), hasParent = false, existingSubtasks = TasksResults.Results( SectionedDataSource( diff --git a/app/src/main/java/org/tasks/data/CaldavAccountExtensions.kt b/app/src/main/java/org/tasks/data/CaldavAccountExtensions.kt index 7eb5885ff..945aed3ee 100644 --- a/app/src/main/java/org/tasks/data/CaldavAccountExtensions.kt +++ b/app/src/main/java/org/tasks/data/CaldavAccountExtensions.kt @@ -3,6 +3,7 @@ package org.tasks.data import android.app.Activity import android.content.Context import org.tasks.R +import org.tasks.activities.GoogleTaskListSettingsActivity import org.tasks.caldav.BaseCaldavAccountSettingsActivity import org.tasks.caldav.CaldavAccountSettingsActivity import org.tasks.caldav.CaldavCalendarSettingsActivity @@ -56,6 +57,7 @@ fun CaldavAccount.listSettingsClass(): Class = when(accountType) { CaldavAccount.TYPE_OPENTASKS -> OpenTasksListSettingsActivity::class.java CaldavAccount.TYPE_ETEBASE -> EtebaseCalendarSettingsActivity::class.java CaldavAccount.TYPE_MICROSOFT -> MicrosoftListSettingsActivity::class.java + CaldavAccount.TYPE_GOOGLE_TASKS -> GoogleTaskListSettingsActivity::class.java else -> CaldavCalendarSettingsActivity::class.java } diff --git a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt index 352b973a0..65fb88fde 100644 --- a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt +++ b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt @@ -11,12 +11,10 @@ import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.R import org.tasks.Strings import org.tasks.activities.FilterSettingsActivity.Companion.sql -import org.tasks.data.GoogleTask import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible import org.tasks.data.entity.Alarm -import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.Filter import org.tasks.data.entity.Tag @@ -87,7 +85,6 @@ class FilterCriteriaProvider @Inject constructor( IDENTIFIER_IMPORTANCE -> priorityFilter IDENTIFIER_STARTDATE -> startDateFilter IDENTIFIER_DUEDATE -> dueDateFilter - IDENTIFIER_GTASKS -> gtasksFilterCriteria() IDENTIFIER_CALDAV -> caldavFilterCriteria() IDENTIFIER_TAG_IS -> tagFilter() IDENTIFIER_TAG_CONTAINS -> tagNameContainsFilter @@ -119,9 +116,6 @@ class FilterCriteriaProvider @Inject constructor( add(dueDateFilter) add(priorityFilter) add(taskTitleContainsFilter) - if (caldavDao.getAccounts(CaldavAccount.TYPE_GOOGLE_TASKS).isNotEmpty()) { - add(gtasksFilterCriteria()) - } add(caldavFilterCriteria()) add(recurringFilter) add(completedFilter) @@ -335,34 +329,6 @@ class FilterCriteriaProvider @Inject constructor( "", r.getString(R.string.CFC_title_contains_name)) - private suspend fun gtasksFilterCriteria(): CustomFilterCriterion { - val lists = caldavDao.getGoogleTaskLists() - val listNames = arrayOfNulls(lists.size) - val listIds = arrayOfNulls(lists.size) - for (i in lists.indices) { - listNames[i] = lists[i].name - listIds[i] = lists[i].uuid - } - val values: MutableMap = HashMap() - values[GoogleTask.KEY] = "?" - return MultipleSelectCriterion( - IDENTIFIER_GTASKS, - context.getString(R.string.CFC_gtasks_list_text), - select(CaldavTask.TASK) - .from(CaldavTask.TABLE) - .join(inner(Task.TABLE, CaldavTask.TASK.eq(Task.ID))) - .where( - and( - activeAndVisible(), - CaldavTask.DELETED.eq(0), - CaldavTask.CALENDAR.eq("?"))) - .toString(), - values, - listNames, - listIds, - context.getString(R.string.CFC_gtasks_list_name)) - } - private suspend fun caldavFilterCriteria(): CustomFilterCriterion { val calendars = caldavDao.getCalendars() val names = arrayOfNulls(calendars.size) @@ -397,7 +363,6 @@ class FilterCriteriaProvider @Inject constructor( private const val IDENTIFIER_IMPORTANCE = "importance" private const val IDENTIFIER_STARTDATE = "startDate" private const val IDENTIFIER_DUEDATE = "dueDate" - private const val IDENTIFIER_GTASKS = "gtaskslist" private const val IDENTIFIER_CALDAV = "caldavlist" private const val IDENTIFIER_TAG_IS = "tag_is" private const val IDENTIFIER_TAG_CONTAINS = "tag_contains" diff --git a/app/src/main/java/org/tasks/filters/FilterExtensions.kt b/app/src/main/java/org/tasks/filters/FilterExtensions.kt index 0e3d14a3d..12268b34d 100644 --- a/app/src/main/java/org/tasks/filters/FilterExtensions.kt +++ b/app/src/main/java/org/tasks/filters/FilterExtensions.kt @@ -9,9 +9,7 @@ fun Filter.getIcon(inventory: Inventory): String? { } return when (this) { is TagFilter -> TasksIcons.LABEL - is GtasksFilter, is CaldavFilter -> TasksIcons.LIST - is CustomFilter -> TasksIcons.FILTER_LIST is PlaceFilter -> TasksIcons.PLACE else -> icon diff --git a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt index 72da583b9..0d096483a 100644 --- a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt +++ b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt @@ -27,7 +27,6 @@ import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavTask import org.tasks.date.DateTimeUtils.newDateTime -import org.tasks.filters.GtasksFilter import org.tasks.googleapis.InvokerFactory import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.PermissionChecker @@ -121,8 +120,8 @@ class GoogleTaskSynchronizer @Inject constructor( } while (!isNullOrEmpty(nextPageToken)) gtasksListService.updateLists(account, gtaskLists) val defaultRemoteList = defaultFilterProvider.defaultList - if (defaultRemoteList is GtasksFilter) { - val list = caldavDao.getCalendarByUuid(defaultRemoteList.remoteId) + if (defaultRemoteList.isGoogleTasks) { + val list = caldavDao.getCalendarByUuid(defaultRemoteList.uuid) if (list == null) { preferences.setString(R.string.p_default_list, null) } @@ -194,7 +193,7 @@ class GoogleTaskSynchronizer @Inject constructor( var newlyCreated = false val remoteId: String? val defaultRemoteList = defaultFilterProvider.defaultList - var listId = if (defaultRemoteList is GtasksFilter) defaultRemoteList.remoteId else DEFAULT_LIST + var listId = if (defaultRemoteList.isGoogleTasks) defaultRemoteList.uuid else DEFAULT_LIST if (isNullOrEmpty(gtasksMetadata.remoteId)) { // Create case gtasksMetadata.calendar?.takeIf { it.isNotBlank() }?.let { listId = it diff --git a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt index d90285510..7c703f6d7 100644 --- a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt +++ b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt @@ -8,7 +8,6 @@ import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.FilterDao import org.tasks.data.dao.LocationDao import org.tasks.data.dao.TagDataDao -import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_ONLY import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.Task @@ -16,7 +15,6 @@ import org.tasks.data.getLocalList import org.tasks.filters.CaldavFilter import org.tasks.filters.CustomFilter import org.tasks.filters.Filter -import org.tasks.filters.GtasksFilter import org.tasks.filters.MyTasksFilter import org.tasks.filters.NotificationsFilter import org.tasks.filters.PlaceFilter @@ -38,7 +36,7 @@ class DefaultFilterProvider @Inject constructor( @Deprecated("use coroutines") get() = runBlocking { getFilterFromPreference(R.string.p_dashclock_filter) } set(filter) = setFilterPreference(filter, R.string.p_dashclock_filter) - var defaultList: Filter + var defaultList: CaldavFilter @Deprecated("use coroutines") get() = runBlocking { getDefaultList() } set(filter) = setFilterPreference(filter, R.string.p_default_list) @@ -50,10 +48,11 @@ class DefaultFilterProvider @Inject constructor( suspend fun getBadgeFilter() = getFilterFromPreference(R.string.p_badge_list) - suspend fun getDefaultList() = + suspend fun getDefaultList(): CaldavFilter = getFilterFromPreference(preferences.getStringValue(R.string.p_default_list), null) - ?.takeIf { it.isWritable } - ?: getAnyList() + ?.let { it as? CaldavFilter } + ?.takeIf { it.isWritable } + ?: getAnyList() fun setLastViewedFilter(filter: Filter) = setFilterPreference(filter, R.string.p_last_viewed_list) @@ -82,9 +81,12 @@ class DefaultFilterProvider @Inject constructor( suspend fun getFilterFromPreference(prefString: String?): Filter = getFilterFromPreference(prefString, MyTasksFilter.create())!! - private suspend fun getAnyList(): Filter { - val filter = caldavDao.getGoogleTaskLists().getOrNull(0)?.let(::GtasksFilter) - ?: caldavDao.getCalendars().filterNot { it.access == ACCESS_READ_ONLY }.getOrElse(0) { caldavDao.getLocalList() }.let(::CaldavFilter) + private suspend fun getAnyList(): CaldavFilter { + val filter = caldavDao + .getCalendars() + .filterNot { it.access == ACCESS_READ_ONLY } + .getOrElse(0) { caldavDao.getLocalList() } + .let { CaldavFilter(calendar = it, account = caldavDao.getAccountByUuid(it.account!!)!!) } defaultList = filter return filter } @@ -105,9 +107,10 @@ class DefaultFilterProvider @Inject constructor( val tag = tagDataDao.getByUuid(split[1]) if (tag == null || isNullOrEmpty(tag.name)) null else TagFilter(tag) } - // TODO: convert filters from old ID to uuid - TYPE_GOOGLE_TASKS -> caldavDao.getCalendarByUuid(split[1])?.let { GtasksFilter(it) } - TYPE_CALDAV -> caldavDao.getCalendarByUuid(split[1])?.let { CaldavFilter(it) } + TYPE_GOOGLE_TASKS, // TODO: convert filters from old ID to uuid? + TYPE_CALDAV -> + caldavDao.getCalendarByUuid(split[1]) + ?.let { CaldavFilter(it, caldavDao.getAccountByUuid(it.account!!)!!) } TYPE_LOCATION -> locationDao.getPlace(split[1])?.let { PlaceFilter(it) } else -> null } @@ -120,7 +123,7 @@ class DefaultFilterProvider @Inject constructor( TYPE_FILTER -> getFilterPreference(filterType, getBuiltInFilterId(filter)) TYPE_CUSTOM_FILTER -> getFilterPreference(filterType, (filter as CustomFilter).id) TYPE_TAG -> getFilterPreference(filterType, (filter as TagFilter).uuid) - TYPE_GOOGLE_TASKS -> getFilterPreference(filterType, (filter as GtasksFilter).remoteId) + TYPE_GOOGLE_TASKS, TYPE_CALDAV -> getFilterPreference(filterType, (filter as CaldavFilter).uuid) TYPE_LOCATION -> getFilterPreference(filterType, (filter as PlaceFilter).uid) else -> null @@ -130,7 +133,6 @@ class DefaultFilterProvider @Inject constructor( private fun getFilterType(filter: Filter) = when (filter) { is TagFilter -> TYPE_TAG - is GtasksFilter -> TYPE_GOOGLE_TASKS is CustomFilter -> TYPE_CUSTOM_FILTER is CaldavFilter -> TYPE_CALDAV is PlaceFilter -> TYPE_LOCATION @@ -162,24 +164,24 @@ class DefaultFilterProvider @Inject constructor( val listId = task.getTransitory(GoogleTask.KEY)!! val googleTaskList = caldavDao.getCalendarByUuid(listId) if (googleTaskList != null) { - originalList = GtasksFilter(googleTaskList) + val account = caldavDao.getAccountByUuid(googleTaskList.account!!)!! + originalList = CaldavFilter(calendar = googleTaskList, account = account) } } else if (task.hasTransitory(CaldavTask.KEY)) { val caldav = caldavDao.getCalendarByUuid(task.getTransitory(CaldavTask.KEY)!!) ?.takeIf { it.access != ACCESS_READ_ONLY } if (caldav != null) { - originalList = CaldavFilter(caldav) + val account = caldavDao.getAccountByUuid(caldav.account!!)!! + originalList = CaldavFilter(calendar = caldav, account = account) } } } else { val caldavTask = caldavDao.getTask(task.id) val calendar = caldavTask?.calendar?.let { caldavDao.getCalendarByUuid(it) } - val account = calendar?.account?.let { caldavDao.getAccountByUuid(it) } - originalList = when (account?.accountType) { - null -> null - CaldavAccount.TYPE_GOOGLE_TASKS -> GtasksFilter(calendar) - else -> CaldavFilter(calendar) - } + originalList = calendar + ?.account + ?.let { caldavDao.getAccountByUuid(it) } + ?.let { CaldavFilter(calendar = calendar, account = it) } } return originalList ?: getDefaultList() } @@ -196,7 +198,7 @@ class DefaultFilterProvider @Inject constructor( private const val TYPE_FILTER = 0 private const val TYPE_CUSTOM_FILTER = 1 private const val TYPE_TAG = 2 - const val TYPE_GOOGLE_TASKS = 3 + @Deprecated("use TYPE_CALDAV") const val TYPE_GOOGLE_TASKS = 3 private const val TYPE_CALDAV = 4 private const val TYPE_LOCATION = 5 private const val FILTER_MY_TASKS = 0 diff --git a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivity.kt b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivity.kt index add1cb842..9292bcb0f 100644 --- a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivity.kt +++ b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivity.kt @@ -39,7 +39,7 @@ class MicrosoftListSettingsActivity : BaseCaldavCalendarSettingsActivity() { Activity.RESULT_OK, Intent(TaskListFragment.ACTION_RELOAD).putExtra( MainActivity.OPEN_FILTER, - CaldavFilter(it) + CaldavFilter(it, viewModel.account) ) ) finish() diff --git a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivityViewModel.kt b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivityViewModel.kt index f688fd929..0542136d2 100644 --- a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivityViewModel.kt +++ b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftListSettingsActivityViewModel.kt @@ -32,7 +32,7 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor( private val _viewState = MutableStateFlow(ViewState()) val viewState = _viewState.asStateFlow() - private val account: CaldavAccount = + val account: CaldavAccount = savedStateHandle[BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT]!! val list: CaldavCalendar? = diff --git a/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt b/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt index d9664dce6..83cb793e2 100644 --- a/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt +++ b/app/src/main/java/org/tasks/tasklist/TaskViewHolder.kt @@ -32,7 +32,6 @@ import org.tasks.dialogs.Linkify import org.tasks.extensions.Context.is24HourFormat import org.tasks.filters.CaldavFilter import org.tasks.filters.Filter -import org.tasks.filters.GtasksFilter import org.tasks.filters.PlaceFilter import org.tasks.filters.TagFilter import org.tasks.kmp.org.tasks.time.getRelativeDateTime @@ -250,7 +249,6 @@ class TaskViewHolder internal constructor( val list = task.caldav val tagsString = task.tagsString val isSubtask = task.hasParent() - val isGoogleTask = task.isGoogleTask val appearance = preferences.getIntegerFromString(R.string.p_chip_appearance, 0) val showText = appearance != 2 val showIcon = appearance != 1 @@ -296,13 +294,10 @@ class TaskViewHolder internal constructor( !isSubtask && !sortByList && preferences.showListChip && - filter !is CaldavFilter && - filter !is GtasksFilter + filter !is CaldavFilter ) { - remember(list, isGoogleTask) { - chipProvider.lists - .getCaldavList(list) - ?.let { if (isGoogleTask) GtasksFilter(it) else CaldavFilter(it) } + remember(list) { + chipProvider.lists.getCaldavList(list) }?.let { FilterChip( filter = it, diff --git a/app/src/main/java/org/tasks/ui/ChipListCache.kt b/app/src/main/java/org/tasks/ui/ChipListCache.kt index 1b5463612..c6972ddd6 100644 --- a/app/src/main/java/org/tasks/ui/ChipListCache.kt +++ b/app/src/main/java/org/tasks/ui/ChipListCache.kt @@ -1,14 +1,20 @@ package org.tasks.ui -import org.tasks.filters.TagFilter -import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import org.tasks.LocalBroadcastManager import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.TagDataDao +import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.TagData +import org.tasks.filters.CaldavFilter +import org.tasks.filters.TagFilter +import timber.log.Timber import javax.inject.Inject import javax.inject.Singleton @@ -16,15 +22,25 @@ import javax.inject.Singleton class ChipListCache @Inject internal constructor( caldavDao: CaldavDao, tagDataDao: TagDataDao, - private val localBroadcastManager: LocalBroadcastManager) { - - private val caldavCalendars: MutableMap = HashMap() + private val localBroadcastManager: LocalBroadcastManager, +) { + private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) + private val lists: MutableMap = HashMap() private val tagDatas: MutableMap = HashMap() - private fun updateCaldavCalendars(updated: List) { - caldavCalendars.clear() - for (update in updated) { - caldavCalendars[update.uuid] = update - } + private fun updateCaldavCalendars( + accounts: List, + calendars: List + ) { + Timber.d("Updating lists") + calendars + .mapNotNull { list -> + val account = accounts.find { it.uuid == list.account } ?: return@mapNotNull null + CaldavFilter(calendar = list, account = account) + } + .let { + lists.clear() + it.associateByTo(lists) { filter -> filter.uuid } + } localBroadcastManager.broadcastRefresh() } @@ -36,12 +52,17 @@ class ChipListCache @Inject internal constructor( localBroadcastManager.broadcastRefresh() } - fun getCaldavList(caldav: String?): CaldavCalendar? = caldavCalendars[caldav] + fun getCaldavList(caldav: String?): CaldavFilter? = lists[caldav] fun getTag(tag: String?): TagFilter? = tagDatas[tag] init { - caldavDao.subscribeToCalendars().onEach { updateCaldavCalendars(it) }.launchIn(GlobalScope) - tagDataDao.subscribeToTags().onEach { updateTags(it) }.launchIn(GlobalScope) + caldavDao + .watchAccounts() + .combine(caldavDao.subscribeToCalendars()) { accounts, calendars -> + updateCaldavCalendars(accounts, calendars) + } + .launchIn(scope) + tagDataDao.subscribeToTags().onEach { updateTags(it) }.launchIn(scope) } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt b/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt index d070a6805..25b50a649 100644 --- a/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt +++ b/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt @@ -59,8 +59,6 @@ import org.tasks.data.setPicture import org.tasks.date.DateTimeUtils.toDateTime import org.tasks.files.FileHelper import org.tasks.filters.CaldavFilter -import org.tasks.filters.Filter -import org.tasks.filters.GtasksFilter import org.tasks.location.GeofenceApi import org.tasks.preferences.PermissionChecker import org.tasks.preferences.Preferences @@ -163,7 +161,7 @@ class TaskEditViewModel @Inject constructor( } var selectedCalendar = MutableStateFlow(originalCalendar) - val originalList: Filter = savedStateHandle[TaskEditFragment.EXTRA_LIST]!! + val originalList: CaldavFilter = savedStateHandle[TaskEditFragment.EXTRA_LIST]!! var selectedList = MutableStateFlow(originalList) private var originalLocation: Location? = savedStateHandle[TaskEditFragment.EXTRA_LOCATION] @@ -346,11 +344,12 @@ class TaskEditViewModel @Inject constructor( taskDao.createNew(subtask) alarmDao.insert(subtask.getDefaultAlarms()) firebase?.addTask("subtasks") - when (val filter = selectedList.value) { - is GtasksFilter -> { + val filter = selectedList.value + when { + filter.isGoogleTasks -> { val googleTask = CaldavTask( task = subtask.id, - calendar = filter.remoteId, + calendar = filter.uuid, remoteId = null, ) subtask.parent = task.id @@ -361,7 +360,7 @@ class TaskEditViewModel @Inject constructor( top = if (isNew) false else preferences.addTasksToTop() ) } - is CaldavFilter -> { + else -> { val caldavTask = CaldavTask( task = subtask.id, calendar = filter.uuid, @@ -375,10 +374,6 @@ class TaskEditViewModel @Inject constructor( addToTop = if (isNew) false else preferences.addTasksToTop() ) } - else -> { - subtask.parent = task.id - taskDao.save(subtask) - } } } diff --git a/app/src/main/java/org/tasks/widget/WidgetChipProvider.kt b/app/src/main/java/org/tasks/widget/WidgetChipProvider.kt index a53f817fc..37a54832a 100644 --- a/app/src/main/java/org/tasks/widget/WidgetChipProvider.kt +++ b/app/src/main/java/org/tasks/widget/WidgetChipProvider.kt @@ -16,7 +16,6 @@ import org.tasks.extensions.Context.is24HourFormat import org.tasks.extensions.setColorFilter import org.tasks.filters.CaldavFilter import org.tasks.filters.Filter -import org.tasks.filters.GtasksFilter import org.tasks.filters.PlaceFilter import org.tasks.filters.TagFilter import org.tasks.filters.getIcon @@ -79,15 +78,18 @@ class WidgetChipProvider @Inject constructor( } fun getListChip(filter: Filter, task: TaskContainer): RemoteViews? { - return task.caldav - ?.takeIf { filter !is CaldavFilter && filter !is GtasksFilter } + return if (filter is CaldavFilter) { + null + } else { + task.caldav ?.let { chipListCache.getCaldavList(it) } ?.let { newChip( - filter = if (task.isGoogleTask) GtasksFilter(it) else CaldavFilter(it), + filter = it, defaultIcon = R.drawable.ic_list_24px ) } + } } fun getPlaceChip(filter: Filter, task: TaskContainer): RemoteViews? { diff --git a/app/src/main/res/menu/menu_gtasks_list_fragment.xml b/app/src/main/res/menu/menu_gtasks_list_fragment.xml deleted file mode 100644 index 56572ec4c..000000000 --- a/app/src/main/res/menu/menu_gtasks_list_fragment.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 95244052a..9a4a8cd6b 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -567,7 +567,6 @@ الإشعارات المستمرة لا يمكن محوها اشعارات لمهام بدون وقت استحقاق ستظهر عند %s قيد المصادقة… - في قوائم مهام كوكل… بدون تاريخ استحقاق مذكرات الموقع الافتراضية وقت الاستحقاق الافتراضي diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index b2027e33e..70f831870 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -108,7 +108,6 @@ Събитието от календара не е намерено %s (завършено) В списъка: \? - В списъка GTasks… Изчистване на завършените Удостоверяване… Има проблем с връзката до сървърите на Google. Опитайте отново по-късно. diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 8d57d8e7e..6753cf7b6 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -151,7 +151,6 @@ Sense recordatoris A la sortida A l’arribada i sortida - A la llista GTasks… No es repeteix Cada dia Qualsevol data d\'inici diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index df2253958..8638e8ffa 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -88,7 +88,6 @@ Otevřít událost v kalendáři %s (dokončeno) V seznamu: ? - V seznamu Google úkolů… Smazat dokončené Ověřuje se… Nastal problém při komunikaci se servery Google. Zkuste to prosím později. diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 36fbccc09..7c672370f 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -79,7 +79,6 @@ Hviletid Vis topbjælke Tilføjede en opgave - På Google Huskelisten… Konto %s ikke fundet. Log venligst ud og log ind igen fra Google Huskeliste-indstillingerne. Vis kommentarer i opgaveredigering Vis hele opgavetitlen diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index bf575f982..a96663426 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -102,7 +102,6 @@ Kalendereintrag nicht gefunden %s (abgeschlossen) In der Liste: ? - In GTasks-Liste … Erledigte Aufgaben entfernen Authentifizierung… Leider ist während der Kommunikation mit den Google-Servern ein Problem aufgetreten. Bitte versuchen Sie es später noch einmal. diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index ff68454a3..d056af467 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -81,7 +81,6 @@ Άνοιγμα event ημερολογίου %s (έχει ολοκληρωθεί) Στην λίστα: ? - Στην λίστα του GTasks… Καθαρισμός ολοκληρωμένων Αυθεντικοποίηση… Συγγνώμη, υπήρξε σφάλμα επικοινωνίας με τους διακομιστές της Google. Παρακαλουμε δοκιμάστε πάλι μετά. diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index eded02309..102bac98f 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -132,7 +132,6 @@ Hazardaj memorigiloj Memorigo-tempo En listo… - En GTasks Listo… En Listo: \? Kalendara evento ne trovita Malfermi Kalendara Evento diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 30f265fcd..6cf6d51cc 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -107,7 +107,6 @@ Evento de calendario no encontrado %s (completado) En la Lista: ? - en la Lista GTasks… Quitar finalizadas Autenticando… Perdón, hubo un problema al comunicarse con los servidores de Google. Por favor inténtalo mas tarde. diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 348c9d404..b6ec76848 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -90,7 +90,6 @@ Kalendri sündmust ei leitud %s (valmis) Nimekirjas: \? - GTasks nimekirjas… Eemalda lõpetatud Autentimine… Google Tasks diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 862474397..b6074ab84 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -108,7 +108,6 @@ Ez da egutegiko gertaera aurkitu %s (burututa) Zerrendan: \? - GTasks zerrendan… Kendu burututakoak Autentifikatzen… Google zerbitzariekin komunikatzeko arazo bat izan dugu. Saiatu geroago. diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 937558627..661407192 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -95,7 +95,6 @@ Kalenteritapahtumaa ei löydy %s (valmistunut) Listalla: ? - Gtask lista… Poista valmiit Todennetaan… Valitettavasti meillä on yhteysongelmia Google palvelimiin. Ole hyvä ja yritä myöhemmin uudestaa. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4145ee51d..5e2545eb9 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -105,7 +105,6 @@ Évènement de calendrier introuvable %s (complété) Dans la liste : \? - Dans la liste GTasks… Effacer les tâches terminées Authentification en cours… Désolé, une erreur de communication avec les serveurs de Google s\'est produite. Veuillez réessayer ultérieurement. diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 4d96850d2..12ccb1d35 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -104,7 +104,6 @@ Evento de calendario non atopado %s (finalizado) Na lista: \? - Na lista GTasks… Limpar as finalizadas Autenticando… Houbo un problema ao comunicarse cos servidores de Google. Inténtao máis tarde. diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index bf99a2598..68ff3921b 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -443,7 +443,6 @@ Autentifikacija … Izbriši obavljene U popisu … - U GTasks popisu … U popisu: \? %s (obavljeno) Kalendarski događaj nije pronađen diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 2a4b44e7e..f261c80b9 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -103,7 +103,6 @@ Naptáresemény nem található %s (befejezve) Listában: ? - Ebben a GTasks listában… Elvégzettek törlése Azonosítás… Sajnáljuk, de hiba történt a Google szervereivel való kommunikálás során. Próbáld újra később. diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index a4ed01282..b67e6e5cc 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -78,7 +78,6 @@ Acara kalender tidak ditemukan %s (selesai) Dalam Daftar: \? - Dalam Daftar GTasks… Mengotentikasi… Maaf, terjadi kesalahan komunikasi dengan server Google. Silakan coba lagi nanti. Google Tasks diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index f16dbb09c..6cdf10877 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -103,7 +103,6 @@ Evento non trovato %s (completato) Nella lista: ? - Nella lista GTasks… Elimina attività completate Autenticazione… Ci scusiamo per il disagio, abbiamo dei problemi a comunicare con i server di Google. Per favore riprovare più tardi. diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 71911f721..1ef2424fd 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -108,7 +108,6 @@ אירוע לא נמצא %s (בוצעה) ברשימה: ? - ברשימה של „משימות גוגל”… נקה משימות שבוצעו מתבצע אימות… בעיה בהתחברות לשרתי גוגל. נא נסה שוב מאוחר יותר. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index bf025f1b5..235ce6964 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -113,7 +113,6 @@ カレンダーイベントが見つかりません %s (完了) リストに含む: \? - GTasks リストに… 完了したタスクをクリア 認証中… すみません、Google のサーバーとの通信で問題が発生しました。しばらくしてからもう一度お試しください。 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index e1870e495..00ad3f128 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -103,7 +103,6 @@ 달력 일정이 발견되지 않음 %s (완료) 목록에: ? - GTasks 목록에… 완료한 할일 지우기 인증 중… 죄송합니다, 구글 서버와 통신하는 데 문제가 있습니다. 잠시 후 다시 시도하세요. diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 601bdd02a..166cb729f 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -113,7 +113,6 @@ Kalendoriaus įvykis nerastas %s (užbaigta) Yra sąraše ? - Yra GTasks sąraše… Išvalyti užbaigtas Autorizuojama… Atsiprašome, turime bėdų susisiekiant su Google serveriais. Prašome pabandyti vėliau. diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 736bdfbc7..276f0ec1c 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -198,7 +198,6 @@ Etikettnavn inneholder… Etikettnavn inneholder: \? Fant ikke kalenderhendelsen - I GTasks-listen… Identitetsbekrefter… Google Tasks Kontoen %s ble ikke funnet. Logg ut og inn igjen fra Google Tasks-innstillingene. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index a39d1a538..a612badb3 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -102,7 +102,6 @@ Kalender-item niet gevonden %s (voltooid) In de lijst: \? - In de GTasks lijst… Voltooide taken wissen Verifiëren… Sorry, er zijn problemen met de communicatie met Google-servers. Probeer het later nog eens. diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 5ffb83ff0..e992fedad 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -102,7 +102,6 @@ Zdarzenie kalendarza nie odnazlezione %s (ukończono) Na liście: ? - Na liście GTasks… Wyczyść zakończone Uwierzytelnianie… Przepraszamy, mieliśmy problem z porozumieniem się z serwerami Google. Prosimy spróbować ponownie. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b2e70ac8d..93ea8c3b1 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -100,7 +100,6 @@ Evento no calendário não encontrado %s (concluída) Na lista: ? - No Google Tarefas… Limpar tarefas concluídas Autenticando… Lamentamos, mas tivemos problemas na comunicação com os servidores do Google. Por favor, tente novamente mais tarde. diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 2bfe52d49..49c97eadb 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -98,7 +98,6 @@ Não foi encontrado o evento no calendário %s (terminada) Na lista: ? - Na lista da GTasks… Eliminar terminadas Autenticação… Ocorreu um erro ao comunicar com os servidores do Google. Tente mais tarde. diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 2a727b2db..0d077cf61 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -376,7 +376,6 @@ Autentificare… Eliminare finalizată În lista… - În lista GTasks… În listă: \? %s (finalizat) Evenimentul din calendar nu a fost găsit diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 3044a2883..2db5ff3b8 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -108,7 +108,6 @@ Событие календаря не найдено %s (выполнено) В списке: \? - В списке GTasks… Удалить завершенные Аутентификация… При обращении к серверам Google возникли проблемы. Пожалуйста, попробуйте позже. diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index e6af5d66f..231e86a10 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -321,7 +321,6 @@ එක් වරක් නාද කරන්න පස් වතාවක් නාද කරන්න ලැයිස්තුවේ… - GTasks ලැයිස්තුවේ… අවසන් වරට වෙනස් කරන ලද දිනය අනුව Astrid අතින් වර්ග කිරීම අදහස දක්වන්න… diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index bdcdc2858..8a9ea8365 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -108,7 +108,6 @@ Udalosť kalendára nenájdená %s (dokončené) V zozname: ? - V zozname GTasks… Vymazať dokončené Overovanie… Prepáč, nastal problém v komunikácii s Google serverom. Prosím, skús to znovu neskôr. diff --git a/app/src/main/res/values-sl-rSI/strings.xml b/app/src/main/res/values-sl-rSI/strings.xml index 72ad8ab4f..cbe4b81e4 100644 --- a/app/src/main/res/values-sl-rSI/strings.xml +++ b/app/src/main/res/values-sl-rSI/strings.xml @@ -78,7 +78,6 @@ Odpri dogodek v koledarju %s (končani) V seznamu: ? - Na GNaloge seznamu… Zbriši dokončano Avtentikacija v teku … Žal smo imeli težave pri povezovanju z Google strežniki. Prosimo, poskusite ponovno kasneje. diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 46328e219..4e7f5d86b 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -98,7 +98,6 @@ Kalenderhändelsen hittades inte %s (slutförd) I listan: ? - I lista på Google Uppgifter… Rensa slutförda Autentiserar… Tyvärr, vi hade problem med att kommunicera med Googles servrar. Vänligen försök igen senare. diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index e5d1266ff..4cb303281 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -105,7 +105,6 @@ அங்கீகரிக்கிறது… தெளிவான நிறைவு பட்டியலில்… - GTasks பட்டியலில்… பட்டியலில் :\? %s (முடிந்தது) நாள்காட்டி நிகழ்வு கிடைக்கவில்லை diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 59eff065c..e09a7b760 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -467,7 +467,6 @@ กําลังรับรองความถูกต้อง… ล้างเสร็จสมบูรณ์ ในรายการ… - ในรายการ GTasks… ในรายการ: \? ไม่พบเหตุการณ์ในปฏิทิน เกิดข้อผิดพลาดในการเพิ่มงานในปฏิทิน! diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 3015efc9d..df4eae685 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -108,7 +108,6 @@ Takvim etkinliği bulunamadı %s (tamamlandı) Liste içinde: ? - Gtasks Listesi içinde… Tamamlanları Temizle Kimlik doğrulanıyor… Üzgünüm, Google sunucuları ile bağlanmakta sıkıntı yaşıyoruz. Lütfen daha sonra yeniden deneyin. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 3ecadc729..6603d8287 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -108,7 +108,6 @@ Подію у календарі не знайдено %s (завершено) У списку: \? - У списку GTasks… Очистити завершені Авторизація… Вибачте, виникли проблеми звернення до серверів Google. Будь ласка, спробуйте пізніше. diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index cdbcf2a6b..db3f39d4f 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -123,7 +123,6 @@ تصدیق ہو رہی… کلئیر مکمل ہو گیا لسٹ میں… - جی ٹاسک لسٹ میں… لسٹ میں:? %s مکمل ہو گیا کیلنڈر ایونٹ نہیں مل سکا diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 8cce3e816..fa5445cee 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -541,7 +541,6 @@ Đang xác thực… Xoá công việc đã hoàn thành Trong danh sách… - Trong danh sách GTasks… Trong danh sách: \? %s (đã hoàn thành) Không tìm thấy sự kiện trong lịch diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index fcbf185f8..8001153fc 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -97,7 +97,6 @@ 找不到日历事件 %s (已完成) 列表内容:? - 在 GTasks 列表中… 清除已完成项 正在认证… 对不起,我们在与 Google 服务器通讯时遇到了问题。请稍后再尝试。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 9f6eb4a85..fd3af38fa 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -77,7 +77,6 @@ 打開行事曆事項 %s (已完成) 列表內容: ? - 在Google任務工作列表中… 清除已完成項 正在認證… 對不起,我們在與Google 服務器通訊時遇到了問題。請稍後再嘗試。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ffe79c66e..2d8392ad0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -131,7 +131,6 @@ File %1$s contained %2$s.\n\n Calendar event not found %s (completed) In List: ? - In GTasks List… In list… Clear Completed Authenticating… diff --git a/data/src/commonMain/kotlin/org/tasks/data/dao/CaldavDao.kt b/data/src/commonMain/kotlin/org/tasks/data/dao/CaldavDao.kt index 61eb698df..0e29b18ee 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/dao/CaldavDao.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/dao/CaldavDao.kt @@ -15,7 +15,6 @@ import org.tasks.data.db.Database import org.tasks.data.db.DbUtils.dbchunk import org.tasks.data.db.SuspendDbUtils.chunkedMap import org.tasks.data.entity.CaldavAccount -import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.data.entity.CaldavAccount.Companion.TYPE_LOCAL import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS import org.tasks.data.entity.CaldavAccount.Companion.TYPE_TASKS @@ -56,7 +55,7 @@ abstract class CaldavDao(private val database: Database) { abstract suspend fun getAccount(type: Int, username: String): CaldavAccount? @Query("SELECT * FROM caldav_accounts WHERE cda_id = :id") - abstract suspend fun getAccount(id: String): CaldavAccount? + abstract suspend fun getAccount(id: Long): CaldavAccount? @Query("SELECT * FROM caldav_accounts WHERE cda_id = :id") abstract fun watchAccount(id: Long): Flow @@ -214,16 +213,7 @@ SELECT EXISTS(SELECT 1 + "AND cd_deleted = 0") abstract suspend fun getCaldavTasksToPush(calendar: String): List - @Query("SELECT * FROM caldav_lists " + - "INNER JOIN caldav_accounts ON caldav_lists.cdl_account = caldav_accounts.cda_uuid " + - "WHERE caldav_accounts.cda_account_type = $TYPE_GOOGLE_TASKS " + - "ORDER BY cdl_name COLLATE NOCASE") - abstract suspend fun getGoogleTaskLists(): List - - @Query("SELECT * FROM caldav_lists " + - "INNER JOIN caldav_accounts ON caldav_lists.cdl_account = caldav_accounts.cda_uuid " + - "WHERE caldav_accounts.cda_account_type != $TYPE_GOOGLE_TASKS " + - "ORDER BY cdl_name COLLATE NOCASE") + @Query("SELECT * FROM caldav_lists ORDER BY cdl_name COLLATE NOCASE") abstract suspend fun getCalendars(): List @Query(""" diff --git a/kmp/src/commonMain/kotlin/org/tasks/data/GoogleTaskFiltersExtensions.kt b/kmp/src/commonMain/kotlin/org/tasks/data/GoogleTaskFiltersExtensions.kt deleted file mode 100644 index 1658602d8..000000000 --- a/kmp/src/commonMain/kotlin/org/tasks/data/GoogleTaskFiltersExtensions.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.tasks.data - -import org.tasks.filters.GtasksFilter - -fun GoogleTaskFilters.toGtasksFilter(): GtasksFilter = GtasksFilter( - list = googleTaskList, - count = count, -) diff --git a/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryRecursive.kt b/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryRecursive.kt index 7ea762657..0047e1584 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryRecursive.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/data/TaskListQueryRecursive.kt @@ -1,7 +1,5 @@ package org.tasks.data -import org.tasks.filters.CaldavFilter -import org.tasks.filters.GtasksFilter import com.todoroo.astrid.api.PermaSql import com.todoroo.astrid.core.SortHelper import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible @@ -14,6 +12,7 @@ import org.tasks.data.sql.Field.Companion.field import org.tasks.data.sql.Join import org.tasks.data.sql.Query import org.tasks.data.sql.QueryTemplate +import org.tasks.filters.CaldavFilter import org.tasks.filters.Filter import org.tasks.preferences.QueryPreferences @@ -48,25 +47,23 @@ internal object TaskListQueryRecursive { ): MutableList { val parentQuery = when (filter) { is CaldavFilter -> newCaldavQuery(filter.uuid) - is GtasksFilter -> newCaldavQuery(filter.list.uuid!!) else -> PermaSql.replacePlaceholdersForQuery(filter.sql!!) } val manualSort = preferences.isManualSort val groupPreference = preferences.groupMode val groupMode = when { - (filter is GtasksFilter || filter is CaldavFilter) && - (manualSort || groupPreference == SortHelper.SORT_LIST) -> SortHelper.GROUP_NONE + filter is CaldavFilter && (manualSort || groupPreference == SortHelper.SORT_LIST) -> + SortHelper.GROUP_NONE else -> groupPreference } val sortMode = when { - manualSort && filter is GtasksFilter -> SortHelper.SORT_GTASKS - manualSort && filter is CaldavFilter -> SortHelper.SORT_CALDAV - else -> preferences.sortMode + !manualSort || filter !is CaldavFilter -> preferences.sortMode + filter.isGoogleTasks -> SortHelper.SORT_GTASKS + else -> SortHelper.SORT_CALDAV } val subtaskPreference = preferences.subtaskMode val subtaskMode = when { - manualSort && filter is GtasksFilter -> SortHelper.SORT_GTASKS - manualSort && filter is CaldavFilter -> SortHelper.SORT_CALDAV + sortMode == SortHelper.SORT_GTASKS || sortMode == SortHelper.SORT_CALDAV -> sortMode subtaskPreference == SortHelper.SORT_MANUAL -> SortHelper.SORT_CALDAV else -> subtaskPreference } diff --git a/kmp/src/commonMain/kotlin/org/tasks/filters/CaldavFilter.kt b/kmp/src/commonMain/kotlin/org/tasks/filters/CaldavFilter.kt index cd1706d1c..fe137ce83 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/filters/CaldavFilter.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/filters/CaldavFilter.kt @@ -3,6 +3,8 @@ package org.tasks.filters import org.tasks.CommonParcelize import org.tasks.data.NO_COUNT import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible +import org.tasks.data.entity.CaldavAccount +import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.Task @@ -13,11 +15,14 @@ import org.tasks.data.sql.QueryTemplate @CommonParcelize data class CaldavFilter( val calendar: CaldavCalendar, + val account: CaldavAccount, val principals: Int = 0, override val count: Int = NO_COUNT, ) : Filter { + override val title: String? get() = calendar.name + override val sql: String get() = QueryTemplate() .join(left(CaldavTask.TABLE, Task.ID.eq(CaldavTask.TASK))) @@ -29,6 +34,7 @@ data class CaldavFilter( ) ) .toString() + override val valuesForNewTasks: String get() = mapToSerializedString(mapOf(CaldavTask.KEY to calendar.uuid!!)) @@ -43,8 +49,6 @@ data class CaldavFilter( val uuid: String get() = calendar.uuid!! - val account: String - get() = calendar.account!! override val isReadOnly: Boolean get() = calendar.access == CaldavCalendar.ACCESS_READ_ONLY @@ -54,4 +58,12 @@ data class CaldavFilter( override fun areItemsTheSame(other: FilterListItem): Boolean { return other is CaldavFilter && calendar.id == other.calendar.id } + + val isGoogleTasks by lazy { + account.accountType == TYPE_GOOGLE_TASKS + } + + val isIcalendar by lazy { + account.accountType != TYPE_GOOGLE_TASKS + } } diff --git a/kmp/src/commonMain/kotlin/org/tasks/filters/FilterProvider.kt b/kmp/src/commonMain/kotlin/org/tasks/filters/FilterProvider.kt index b6cf81ad2..775a3697f 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/filters/FilterProvider.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/filters/FilterProvider.kt @@ -11,7 +11,6 @@ import org.tasks.data.dao.LocationDao import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TaskDao import org.tasks.data.entity.CaldavAccount -import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.data.entity.CaldavAccount.Companion.TYPE_LOCAL import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS import org.tasks.data.setupLocalAccount @@ -233,17 +232,12 @@ class FilterProvider( .plus(caldavDao .getCaldavFilters(account.uuid!!) .map { - when (account.accountType) { - TYPE_GOOGLE_TASKS -> GtasksFilter( - list = it.caldavCalendar, - count = it.count, - ) - else -> CaldavFilter( - calendar = it.caldavCalendar, - principals = it.principals, - count = it.count, - ) - } + CaldavFilter( + calendar = it.caldavCalendar, + account = account, + principals = it.principals, + count = it.count, + ) } .sort()) } diff --git a/kmp/src/commonMain/kotlin/org/tasks/filters/GtasksFilter.kt b/kmp/src/commonMain/kotlin/org/tasks/filters/GtasksFilter.kt deleted file mode 100644 index 657720491..000000000 --- a/kmp/src/commonMain/kotlin/org/tasks/filters/GtasksFilter.kt +++ /dev/null @@ -1,57 +0,0 @@ -package org.tasks.filters - -import org.tasks.CommonParcelize -import org.tasks.data.GoogleTask -import org.tasks.data.NO_COUNT -import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible -import org.tasks.data.entity.CaldavCalendar -import org.tasks.data.entity.CaldavTask -import org.tasks.data.entity.Task -import org.tasks.data.sql.Criterion.Companion.and -import org.tasks.data.sql.Join.Companion.left -import org.tasks.data.sql.QueryTemplate - -@CommonParcelize -data class GtasksFilter( - val list: CaldavCalendar, - override val count: Int = NO_COUNT, -) : Filter { - override val title: String? - get() = list.name - - override val sql: String - get() = QueryTemplate() - .join(left(CaldavTask.TABLE, Task.ID.eq(CaldavTask.TASK))) - .where( - and( - activeAndVisible(), - CaldavTask.DELETED.eq(0), - CaldavTask.CALENDAR.eq(list.uuid) - ) - ) - .toString() - - override val valuesForNewTasks: String - get() = mapToSerializedString(mapOf(GoogleTask.KEY to list.uuid!!)) - - override val order: Int - get() = list.order - - override val icon: String? - get() = list.icon - - override val tint: Int - get() = list.color - - val account: String - get() = list.account!! - - override fun supportsManualSort() = true - - val remoteId: String - get() = list.uuid!! - - override fun areItemsTheSame(other: FilterListItem): Boolean { - return other is GtasksFilter && list.id == other.list.id - } -}