From e5d6723e2355dca79eba3e5d952cad8750f24f35 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 2 Jan 2025 18:35:46 -0600 Subject: [PATCH] Remove GoogleTaskListDao --- .../astrid/gtasks/GtasksListServiceTest.kt | 25 ++++---- .../java/org/tasks/data/GoogleTaskDaoTests.kt | 2 - .../org/tasks/data/GoogleTaskListDaoTest.kt | 4 +- .../astrid/gtasks/GtasksListService.kt | 10 +-- .../astrid/gtasks/auth/GtasksLoginActivity.kt | 6 +- .../com/todoroo/astrid/service/TaskMover.kt | 17 +++--- .../com/todoroo/astrid/service/Upgrader.kt | 4 +- .../GoogleTaskListSettingsActivity.kt | 10 +-- .../NavigationDrawerCustomization.kt | 2 - .../tasks/filters/FilterCriteriaProvider.kt | 5 +- .../tasks/gtasks/GoogleTaskSynchronizer.kt | 8 +-- .../org/tasks/injection/ApplicationModule.kt | 7 --- app/src/main/java/org/tasks/jobs/SyncWork.kt | 5 +- .../preferences/DefaultFilterProvider.kt | 25 +++----- .../java/org/tasks/ui/SubtaskControlSet.kt | 2 - .../kotlin/org/tasks/data/dao/CaldavDao.kt | 17 ++++-- .../org/tasks/data/dao/GoogleTaskDao.kt | 3 - .../org/tasks/data/dao/GoogleTaskListDao.kt | 43 ------------- .../kotlin/org/tasks/data/db/Database.kt | 2 - .../org/tasks/filters/FilterProvider.kt | 61 ++++++------------- 20 files changed, 78 insertions(+), 180 deletions(-) delete mode 100644 data/src/commonMain/kotlin/org/tasks/data/dao/GoogleTaskListDao.kt diff --git a/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksListServiceTest.kt b/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksListServiceTest.kt index 4397310bc..768024f06 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksListServiceTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksListServiceTest.kt @@ -12,7 +12,6 @@ import org.junit.Before import org.junit.Test import org.tasks.LocalBroadcastManager import org.tasks.data.dao.CaldavDao -import org.tasks.data.dao.GoogleTaskListDao import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavCalendar import org.tasks.injection.InjectingTestCase @@ -26,7 +25,6 @@ import javax.inject.Inject class GtasksListServiceTest : InjectingTestCase() { @Inject lateinit var taskDeleter: TaskDeleter @Inject lateinit var localBroadcastManager: LocalBroadcastManager - @Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var caldavDao: CaldavDao private lateinit var gtasksListService: GtasksListService @@ -34,7 +32,7 @@ class GtasksListServiceTest : InjectingTestCase() { @Before override fun setUp() { super.setUp() - gtasksListService = GtasksListService(googleTaskListDao, taskDeleter, localBroadcastManager) + gtasksListService = GtasksListService(caldavDao, taskDeleter, localBroadcastManager) } @Test @@ -44,48 +42,47 @@ class GtasksListServiceTest : InjectingTestCase() { with(RemoteGtaskListMaker.REMOTE_ID, "1"), with(RemoteGtaskListMaker.NAME, "Default"))) assertEquals( CaldavCalendar(id = 1, account = "account", uuid = "1", name = "Default"), - googleTaskListDao.getById(1L) + caldavDao.getCalendarById(1L) ) } @Test fun testGetListByRemoteId() = runBlocking { val list = CaldavCalendar(uuid = "1") - list.id = googleTaskListDao.insertOrReplace(list) - assertEquals(list, googleTaskListDao.getByRemoteId("1")) + caldavDao.insert(list) + assertEquals(list, caldavDao.getCalendarByUuid("1")) } @Test fun testGetListReturnsNullWhenNotFound() = runBlocking { - assertNull(googleTaskListDao.getByRemoteId("1")) + assertNull(caldavDao.getCalendarByUuid("1")) } @Test fun testDeleteMissingList() = runBlocking { - googleTaskListDao.insertOrReplace(CaldavCalendar(id = 1, account = "account", uuid = "1")) + caldavDao.insert(CaldavCalendar(account = "account", uuid = "1")) val taskList = newRemoteList(with(RemoteGtaskListMaker.REMOTE_ID, "2")) setLists(taskList) assertEquals( listOf(CaldavCalendar(id = 2, account = "account", uuid = "2", name = "Default")), - googleTaskListDao.getLists("account") + caldavDao.getCalendarsByAccount("account") ) } @Test fun testUpdateListName() = runBlocking { - googleTaskListDao.insertOrReplace( - CaldavCalendar(id = 1, uuid = "1", name = "oldName", account = "account") - ) + val calendar = CaldavCalendar(uuid = "1", name = "oldName", account = "account") + caldavDao.insert(calendar) setLists( newRemoteList( with(RemoteGtaskListMaker.REMOTE_ID, "1"), with(RemoteGtaskListMaker.NAME, "newName"))) - assertEquals("newName", googleTaskListDao.getById(1)!!.name) + assertEquals("newName", caldavDao.getCalendarById(calendar.id)!!.name) } @Test fun testNewListLastSyncIsZero() = runBlocking { setLists(TaskList().setId("1")) - assertEquals(0L, googleTaskListDao.getByRemoteId("1")!!.lastSync) + assertEquals(0L, caldavDao.getCalendarByUuid("1")!!.lastSync) } private suspend fun setLists(vararg list: TaskList) { diff --git a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt index a96b051f2..851afb6ae 100644 --- a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt +++ b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt @@ -11,7 +11,6 @@ import org.junit.Before import org.junit.Test import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.GoogleTaskDao -import org.tasks.data.dao.GoogleTaskListDao import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.data.entity.CaldavCalendar @@ -29,7 +28,6 @@ import javax.inject.Inject @UninstallModules(ProductionModule::class) @HiltAndroidTest class GoogleTaskDaoTests : InjectingTestCase() { - @Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var taskDao: TaskDao @Inject lateinit var caldavDao: CaldavDao diff --git a/app/src/androidTest/java/org/tasks/data/GoogleTaskListDaoTest.kt b/app/src/androidTest/java/org/tasks/data/GoogleTaskListDaoTest.kt index 090e6bd13..26a053284 100644 --- a/app/src/androidTest/java/org/tasks/data/GoogleTaskListDaoTest.kt +++ b/app/src/androidTest/java/org/tasks/data/GoogleTaskListDaoTest.kt @@ -6,7 +6,6 @@ import kotlinx.coroutines.runBlocking import org.junit.Assert.assertTrue import org.junit.Test import org.tasks.data.dao.CaldavDao -import org.tasks.data.dao.GoogleTaskListDao import org.tasks.data.entity.CaldavAccount import org.tasks.injection.InjectingTestCase import org.tasks.injection.ProductionModule @@ -15,7 +14,6 @@ import javax.inject.Inject @UninstallModules(ProductionModule::class) @HiltAndroidTest class GoogleTaskListDaoTest : InjectingTestCase() { - @Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var caldavDao: CaldavDao @Test @@ -26,6 +24,6 @@ class GoogleTaskListDaoTest : InjectingTestCase() { ) caldavDao.insert(account) - assertTrue(googleTaskListDao.getGoogleTaskFilters(account.username!!).isEmpty()) + assertTrue(caldavDao.getCaldavFilters(account.username!!).isEmpty()) } } \ No newline at end of file diff --git a/app/src/main/java/com/todoroo/astrid/gtasks/GtasksListService.kt b/app/src/main/java/com/todoroo/astrid/gtasks/GtasksListService.kt index 43221456e..d69d87ac2 100644 --- a/app/src/main/java/com/todoroo/astrid/gtasks/GtasksListService.kt +++ b/app/src/main/java/com/todoroo/astrid/gtasks/GtasksListService.kt @@ -8,13 +8,13 @@ package com.todoroo.astrid.gtasks import com.google.api.services.tasks.model.TaskList import com.todoroo.astrid.service.TaskDeleter import org.tasks.LocalBroadcastManager +import org.tasks.data.dao.CaldavDao import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavCalendar -import org.tasks.data.dao.GoogleTaskListDao import javax.inject.Inject class GtasksListService @Inject constructor( - private val googleTaskListDao: GoogleTaskListDao, + private val caldavDao: CaldavDao, private val taskDeleter: TaskDeleter, private val localBroadcastManager: LocalBroadcastManager, ) { @@ -25,7 +25,7 @@ class GtasksListService @Inject constructor( * @param remoteLists remote information about your lists */ suspend fun updateLists(account: CaldavAccount, remoteLists: List) { - val lists = googleTaskListDao.getLists(account.uuid!!) + val lists = caldavDao.getCalendarsByAccount(account.uuid!!) val previousLists: MutableSet = HashSet() for (list in lists) { previousLists.add(list.id) @@ -47,13 +47,13 @@ class GtasksListService @Inject constructor( ) } local.name = remote.title - googleTaskListDao.insertOrReplace(local) + caldavDao.insertOrReplace(local) previousLists.remove(local.id) } // check for lists that aren't on remote server for (listId in previousLists) { - taskDeleter.delete(googleTaskListDao.getById(listId)!!) + taskDeleter.delete(caldavDao.getCalendarById(listId)!!) } localBroadcastManager.broadcastRefreshList() } diff --git a/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.kt b/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.kt index 25a97a0fb..52fa2cd22 100644 --- a/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.kt +++ b/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.kt @@ -21,10 +21,9 @@ import org.tasks.PermissionUtil.verifyPermissions import org.tasks.R import org.tasks.analytics.Constants import org.tasks.analytics.Firebase +import org.tasks.data.dao.CaldavDao import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS -import org.tasks.data.dao.CaldavDao -import org.tasks.data.dao.GoogleTaskListDao import org.tasks.dialogs.DialogBuilder import org.tasks.gtasks.GoogleAccountManager import org.tasks.preferences.ActivityPermissionRequestor @@ -42,7 +41,6 @@ class GtasksLoginActivity : AppCompatActivity() { @Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var googleAccountManager: GoogleAccountManager @Inject lateinit var caldavDao: CaldavDao - @Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var permissionRequestor: ActivityPermissionRequestor @Inject lateinit var firebase: Firebase @@ -92,7 +90,7 @@ class GtasksLoginActivity : AppCompatActivity() { caldavDao.update( account.copy(error = "") ) - googleTaskListDao.resetLastSync(accountName) + caldavDao.resetLastSync(accountName) } } setResult(Activity.RESULT_OK) 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 24c8e175d..ce3bdc52c 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt @@ -5,7 +5,6 @@ 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.GoogleTaskListDao import org.tasks.data.dao.TaskDao import org.tasks.data.db.DbUtils.dbchunk import org.tasks.data.entity.CaldavAccount @@ -24,7 +23,6 @@ class TaskMover @Inject constructor( private val taskDao: TaskDao, private val caldavDao: CaldavDao, private val googleTaskDao: GoogleTaskDao, - private val googleTaskListDao: GoogleTaskListDao, private val preferences: Preferences, private val localBroadcastManager: LocalBroadcastManager, private val syncAdapters: SyncAdapters, @@ -33,14 +31,13 @@ class TaskMover @Inject constructor( suspend fun getSingleFilter(tasks: List): Filter? { val caldavCalendars = caldavDao.getCalendars(tasks) - val googleTaskLists = googleTaskDao.getLists(tasks) - if (caldavCalendars.isEmpty()) { - if (googleTaskLists.size == 1) { - return googleTaskListDao.getByRemoteId(googleTaskLists[0])?.let { GtasksFilter(it) } - } - } else if (googleTaskLists.isEmpty()) { - if (caldavCalendars.size == 1) { - return caldavDao.getCalendar(caldavCalendars[0])?.let { CaldavFilter(it) } + 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) } } return null 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 0e1023b4a..ddcd4b7f7 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt @@ -22,7 +22,6 @@ import org.tasks.data.Location import org.tasks.data.convertPictureUri import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.FilterDao -import org.tasks.data.dao.GoogleTaskListDao import org.tasks.data.dao.LocationDao import org.tasks.data.dao.TagDao import org.tasks.data.dao.TagDataDao @@ -49,7 +48,6 @@ class Upgrader @Inject constructor( private val tagDao: TagDao, private val filterDao: FilterDao, private val defaultFilterProvider: DefaultFilterProvider, - private val googleTaskListDao: GoogleTaskListDao, private val userActivityDao: UserActivityDao, private val taskAttachmentDao: TaskAttachmentDao, private val caldavDao: CaldavDao, @@ -270,7 +268,7 @@ class Upgrader @Inject constructor( if (isNullOrEmpty(defaultGoogleTaskList)) { // TODO: look up default list } else { - val googleTaskList = googleTaskListDao.getByRemoteId(defaultGoogleTaskList!!) + val googleTaskList = caldavDao.getCalendarByUuid(defaultGoogleTaskList!!) if (googleTaskList != null) { defaultFilterProvider.defaultList = GtasksFilter(googleTaskList) } diff --git a/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt b/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt index d3f527aae..6944f1e92 100644 --- a/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.kt @@ -19,7 +19,7 @@ import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.compose.settings.Toaster -import org.tasks.data.dao.GoogleTaskListDao +import org.tasks.data.dao.CaldavDao import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavCalendar import org.tasks.filters.Filter @@ -31,7 +31,7 @@ import javax.inject.Inject @AndroidEntryPoint class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { - @Inject lateinit var googleTaskListDao: GoogleTaskListDao + @Inject lateinit var caldavDao: CaldavDao @Inject lateinit var taskDeleter: TaskDeleter @Inject lateinit var localBroadcastManager: LocalBroadcastManager @@ -114,7 +114,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { else -> { if (colorChanged() || iconChanged()) { gtasksList.color = baseViewModel.color - googleTaskListDao.insertOrReplace( + caldavDao.insertOrReplace( gtasksList.copy( icon = baseViewModel.icon ) @@ -168,7 +168,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { color = baseViewModel.color, icon = baseViewModel.icon, ) - val id = googleTaskListDao.insertOrReplace(result) + val id = caldavDao.insertOrReplace(result) setResult( Activity.RESULT_OK, @@ -194,7 +194,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { color = baseViewModel.color, icon = baseViewModel.icon, ) - googleTaskListDao.insertOrReplace(result) + caldavDao.insertOrReplace(result) setResult( Activity.RESULT_OK, diff --git a/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt b/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt index fc166687b..c47bc24f0 100644 --- a/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt +++ b/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt @@ -29,7 +29,6 @@ import org.tasks.R import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.FilterDao -import org.tasks.data.dao.GoogleTaskListDao import org.tasks.data.dao.LocationDao import org.tasks.data.dao.TagDataDao import org.tasks.data.listSettingsClass @@ -50,7 +49,6 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba @Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var preferences: Preferences @Inject lateinit var tagDataDao: TagDataDao - @Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var filterDao: FilterDao @Inject lateinit var caldavDao: CaldavDao @Inject lateinit var locationDao: LocationDao diff --git a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt index 764a6ff5b..352b973a0 100644 --- a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt +++ b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt @@ -13,10 +13,10 @@ 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.GoogleTaskListDao 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 @@ -35,7 +35,6 @@ import javax.inject.Inject class FilterCriteriaProvider @Inject constructor( @param:ApplicationContext private val context: Context, private val tagDataDao: TagDataDao, - private val googleTaskListDao: GoogleTaskListDao, private val caldavDao: CaldavDao ) { private val r = context.resources @@ -120,7 +119,7 @@ class FilterCriteriaProvider @Inject constructor( add(dueDateFilter) add(priorityFilter) add(taskTitleContainsFilter) - if (googleTaskListDao.getAccounts().isNotEmpty()) { + if (caldavDao.getAccounts(CaldavAccount.TYPE_GOOGLE_TASKS).isNotEmpty()) { add(gtasksFilterCriteria()) } add(caldavFilterCriteria()) diff --git a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt index 1be752997..72da583b9 100644 --- a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt +++ b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt @@ -23,7 +23,6 @@ import org.tasks.data.* import org.tasks.data.dao.AlarmDao import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.GoogleTaskDao -import org.tasks.data.dao.GoogleTaskListDao import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavTask @@ -47,7 +46,6 @@ import kotlin.math.max class GoogleTaskSynchronizer @Inject constructor( @param:ApplicationContext private val context: Context, - private val googleTaskListDao: GoogleTaskListDao, private val caldavDao: CaldavDao, private val gtasksListService: GtasksListService, private val preferences: Preferences, @@ -124,13 +122,13 @@ class GoogleTaskSynchronizer @Inject constructor( gtasksListService.updateLists(account, gtaskLists) val defaultRemoteList = defaultFilterProvider.defaultList if (defaultRemoteList is GtasksFilter) { - val list = googleTaskListDao.getByRemoteId(defaultRemoteList.remoteId) + val list = caldavDao.getCalendarByUuid(defaultRemoteList.remoteId) if (list == null) { preferences.setString(R.string.p_default_list, null) } } pushLocalChanges(account, gtasksInvoker) - for (list in googleTaskListDao.getByRemoteId(gtaskLists.map { it.id })) { + for (list in caldavDao.getCalendarsByAccount(account.uuid!!)) { if (isNullOrEmpty(list.uuid)) { firebase.reportException(RuntimeException("Empty remote id")) continue @@ -355,7 +353,7 @@ class GoogleTaskSynchronizer @Inject constructor( write(task, googleTask) } } - googleTaskListDao.insertOrReplace( + caldavDao.insertOrReplace( list.copy( lastSync = lastSyncDate ) diff --git a/app/src/main/java/org/tasks/injection/ApplicationModule.kt b/app/src/main/java/org/tasks/injection/ApplicationModule.kt index 823c054ac..bd6ace2cf 100644 --- a/app/src/main/java/org/tasks/injection/ApplicationModule.kt +++ b/app/src/main/java/org/tasks/injection/ApplicationModule.kt @@ -21,7 +21,6 @@ import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.DeletionDao import org.tasks.data.dao.FilterDao import org.tasks.data.dao.GoogleTaskDao -import org.tasks.data.dao.GoogleTaskListDao import org.tasks.data.dao.LocationDao import org.tasks.data.dao.NotificationDao import org.tasks.data.dao.TagDao @@ -94,10 +93,6 @@ class ApplicationModule { @Singleton fun getFilterDao(db: Database): FilterDao = db.filterDao() - @Provides - @Singleton - fun getGoogleTaskListDao(db: Database): GoogleTaskListDao = db.googleTaskListDao() - @Provides @Singleton fun getCaldavDao(db: Database): CaldavDao = db.caldavDao() @@ -154,7 +149,6 @@ class ApplicationModule { fun providesFilterProvider( filterDao: FilterDao, tagDataDao: TagDataDao, - googleTaskListDao: GoogleTaskListDao, caldavDao: CaldavDao, drawerConfiguration: DrawerConfiguration, locationDao: LocationDao, @@ -163,7 +157,6 @@ class ApplicationModule { ) = FilterProvider( filterDao = filterDao, tagDataDao = tagDataDao, - googleTaskListDao = googleTaskListDao, caldavDao = caldavDao, configuration = drawerConfiguration, locationDao = locationDao, diff --git a/app/src/main/java/org/tasks/jobs/SyncWork.kt b/app/src/main/java/org/tasks/jobs/SyncWork.kt index 44cae9180..d319c7479 100644 --- a/app/src/main/java/org/tasks/jobs/SyncWork.kt +++ b/app/src/main/java/org/tasks/jobs/SyncWork.kt @@ -24,7 +24,7 @@ import org.tasks.billing.Inventory import org.tasks.caldav.CaldavSynchronizer import org.tasks.data.OpenTaskDao import org.tasks.data.dao.CaldavDao -import org.tasks.data.dao.GoogleTaskListDao +import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount.Companion.TYPE_CALDAV import org.tasks.data.entity.CaldavAccount.Companion.TYPE_ETEBASE import org.tasks.data.entity.CaldavAccount.Companion.TYPE_MICROSOFT @@ -51,7 +51,6 @@ class SyncWork @AssistedInject constructor( private val googleTaskSynchronizer: Lazy, private val openTasksSynchronizer: Lazy, private val microsoftSynchronizer: Lazy, - private val googleTaskListDao: GoogleTaskListDao, private val openTaskDao: OpenTaskDao, private val inventory: Inventory ) : BaseWorker(context, workerParams, firebase) { @@ -146,7 +145,7 @@ class SyncWork @AssistedInject constructor( } private suspend fun getGoogleAccounts() = - googleTaskListDao.getAccounts() + caldavDao.getAccounts(CaldavAccount.TYPE_GOOGLE_TASKS) private suspend fun getCaldavAccounts() = caldavDao.getAccounts(TYPE_CALDAV, TYPE_TASKS, TYPE_ETEBASE, TYPE_MICROSOFT) diff --git a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt index 7cd344389..d90285510 100644 --- a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt +++ b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt @@ -6,10 +6,9 @@ import org.tasks.Strings.isNullOrEmpty import org.tasks.data.GoogleTask import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.FilterDao -import org.tasks.data.dao.GoogleTaskDao -import org.tasks.data.dao.GoogleTaskListDao 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 @@ -32,10 +31,8 @@ class DefaultFilterProvider @Inject constructor( private val preferences: Preferences, private val filterDao: FilterDao, private val tagDataDao: TagDataDao, - private val googleTaskListDao: GoogleTaskListDao, private val caldavDao: CaldavDao, private val locationDao: LocationDao, - private val googleTaskDao: GoogleTaskDao ) { var dashclockFilter: Filter @Deprecated("use coroutines") get() = runBlocking { getFilterFromPreference(R.string.p_dashclock_filter) } @@ -163,7 +160,7 @@ class DefaultFilterProvider @Inject constructor( if (task.isNew) { if (task.hasTransitory(GoogleTask.KEY)) { val listId = task.getTransitory(GoogleTask.KEY)!! - val googleTaskList = googleTaskListDao.getByRemoteId(listId) + val googleTaskList = caldavDao.getCalendarByUuid(listId) if (googleTaskList != null) { originalList = GtasksFilter(googleTaskList) } @@ -175,19 +172,13 @@ class DefaultFilterProvider @Inject constructor( } } } else { - val googleTask = googleTaskDao.getByTaskId(task.id) val caldavTask = caldavDao.getTask(task.id) - val caldavAccount = caldavDao.getAccountForTask(task.id) - if (googleTask != null) { - val googleTaskList = googleTaskListDao.getByRemoteId(googleTask.calendar!!) - if (googleTaskList != null) { - originalList = GtasksFilter(googleTaskList) - } - } else if (caldavTask != null) { - val calendarByUuid = caldavDao.getCalendarByUuid(caldavTask.calendar!!) - if (calendarByUuid != null) { - originalList = CaldavFilter(calendarByUuid) - } + 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) } } return originalList ?: getDefaultList() diff --git a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt index 5db957605..ff0eaa13c 100644 --- a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt +++ b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt @@ -18,7 +18,6 @@ import kotlinx.coroutines.launch import org.tasks.R import org.tasks.analytics.Firebase import org.tasks.compose.edit.SubtaskRow -import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.entity.Task import org.tasks.filters.SubtaskFilter import org.tasks.preferences.Preferences @@ -32,7 +31,6 @@ import javax.inject.Inject class SubtaskControlSet : TaskEditControlFragment() { @Inject lateinit var activity: Activity @Inject lateinit var taskCompleter: TaskCompleter - @Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var taskCreator: TaskCreator @Inject lateinit var taskDao: TaskDao @Inject lateinit var checkBoxProvider: CheckBoxProvider 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 e3d8330b1..61eb698df 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/dao/CaldavDao.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/dao/CaldavDao.kt @@ -3,6 +3,7 @@ package org.tasks.data.dao import androidx.room.Dao import androidx.room.Delete import androidx.room.Insert +import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Update import kotlinx.coroutines.flow.Flow @@ -267,8 +268,12 @@ SELECT EXISTS(SELECT 1 + " WHERE cdl_account = cda_uuid") abstract suspend fun getAccountForTask(task: Long): CaldavAccount? - @Query("SELECT DISTINCT cd_calendar FROM caldav_tasks WHERE cd_deleted = 0 AND cd_task IN (:tasks)") - abstract suspend fun getCalendars(tasks: List): List + @Query(""" + SELECT DISTINCT * FROM caldav_lists + INNER JOIN caldav_tasks ON cdl_uuid = cd_calendar + WHERE cd_deleted = 0 AND cd_task IN (:tasks) + """) + abstract suspend fun getCalendars(tasks: List): List @Query(""" SELECT caldav_lists.*, COUNT(DISTINCT(tasks._id)) AS count, COUNT(DISTINCT(principal_access.id)) AS principals @@ -280,9 +285,7 @@ FROM caldav_lists tasks.hideUntil < :now AND cd_deleted = 0 LEFT JOIN principal_access ON caldav_lists.cdl_id = principal_access.list - LEFT JOIN caldav_accounts ON caldav_accounts.cda_uuid = caldav_lists.cdl_account WHERE caldav_lists.cdl_account = :uuid -AND caldav_accounts.cda_account_type != $TYPE_GOOGLE_TASKS GROUP BY caldav_lists.cdl_uuid """) abstract suspend fun getCaldavFilters(uuid: String, now: Long = currentTimeMillis()): List @@ -384,6 +387,12 @@ ORDER BY primary_sort @Query("UPDATE tasks SET `order` = :order WHERE _id = :id") abstract suspend fun setTaskOrder(id: Long, order: Long?) + @Query("UPDATE caldav_lists SET cdl_last_sync = 0 WHERE cdl_account = :account") + abstract suspend fun resetLastSync(account: String) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + abstract suspend fun insertOrReplace(googleTaskList: CaldavCalendar): Long + companion object { const val LOCAL = "local" diff --git a/data/src/commonMain/kotlin/org/tasks/data/dao/GoogleTaskDao.kt b/data/src/commonMain/kotlin/org/tasks/data/dao/GoogleTaskDao.kt index 27a95de01..8621e674b 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/dao/GoogleTaskDao.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/dao/GoogleTaskDao.kt @@ -89,9 +89,6 @@ abstract class GoogleTaskDao(private val database: Database) { @Query("SELECT * FROM caldav_tasks WHERE cd_task = :taskId") abstract suspend fun getAllByTaskId(taskId: Long): List - @Query("SELECT DISTINCT cd_calendar FROM caldav_tasks WHERE cd_deleted = 0 AND cd_task IN (:tasks)") - abstract suspend fun getLists(tasks: List): List - @Query("SELECT IFNULL(MAX(`order`), -1) + 1 FROM tasks INNER JOIN caldav_tasks ON cd_task = tasks._id WHERE cd_calendar = :listId AND parent = :parent") abstract suspend fun getBottom(listId: String, parent: Long): Long diff --git a/data/src/commonMain/kotlin/org/tasks/data/dao/GoogleTaskListDao.kt b/data/src/commonMain/kotlin/org/tasks/data/dao/GoogleTaskListDao.kt deleted file mode 100644 index 077a32f0e..000000000 --- a/data/src/commonMain/kotlin/org/tasks/data/dao/GoogleTaskListDao.kt +++ /dev/null @@ -1,43 +0,0 @@ -package org.tasks.data.dao - -import androidx.room.Dao -import androidx.room.Insert -import androidx.room.OnConflictStrategy -import androidx.room.Query -import org.tasks.data.GoogleTaskFilters -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.time.DateTimeUtils2.currentTimeMillis - -@Dao -interface GoogleTaskListDao { - @Query("SELECT * FROM caldav_accounts WHERE cda_account_type = $TYPE_GOOGLE_TASKS") - suspend fun getAccounts(): List - - @Query("SELECT * FROM caldav_lists WHERE cdl_id = :id") - suspend fun getById(id: Long): CaldavCalendar? - - @Query("SELECT * FROM caldav_lists WHERE cdl_account = :account ORDER BY cdl_name ASC") - suspend fun getLists(account: String): List - - @Query("SELECT * FROM caldav_lists WHERE cdl_uuid = :remoteId LIMIT 1") - suspend fun getByRemoteId(remoteId: String): CaldavCalendar? - - @Query("SELECT * FROM caldav_lists WHERE cdl_uuid IN (:remoteIds)") - suspend fun getByRemoteId(remoteIds: List): List - - @Query("UPDATE caldav_lists SET cdl_last_sync = 0 WHERE cdl_account = :account") - suspend fun resetLastSync(account: String) - - @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insertOrReplace(googleTaskList: CaldavCalendar): Long - - @Query("SELECT caldav_lists.*, COUNT(tasks._id) AS count" - + " FROM caldav_lists " - + " LEFT JOIN caldav_tasks ON caldav_tasks.cd_calendar = caldav_lists.cdl_uuid" - + " LEFT JOIN tasks ON caldav_tasks.cd_task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil < :now AND cd_deleted = 0" - + " WHERE caldav_lists.cdl_account = :account" - + " GROUP BY caldav_lists.cdl_uuid") - suspend fun getGoogleTaskFilters(account: String, now: Long = currentTimeMillis()): List -} \ No newline at end of file diff --git a/data/src/commonMain/kotlin/org/tasks/data/db/Database.kt b/data/src/commonMain/kotlin/org/tasks/data/db/Database.kt index a9f783790..581f1d130 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/db/Database.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/db/Database.kt @@ -9,7 +9,6 @@ import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.DeletionDao import org.tasks.data.dao.FilterDao import org.tasks.data.dao.GoogleTaskDao -import org.tasks.data.dao.GoogleTaskListDao import org.tasks.data.dao.LocationDao import org.tasks.data.dao.NotificationDao import org.tasks.data.dao.PrincipalDao @@ -75,7 +74,6 @@ abstract class Database : RoomDatabase() { abstract fun tagDao(): TagDao abstract fun googleTaskDao(): GoogleTaskDao abstract fun filterDao(): FilterDao - abstract fun googleTaskListDao(): GoogleTaskListDao abstract fun taskDao(): TaskDao abstract fun caldavDao(): CaldavDao abstract fun deletionDao(): DeletionDao diff --git a/kmp/src/commonMain/kotlin/org/tasks/filters/FilterProvider.kt b/kmp/src/commonMain/kotlin/org/tasks/filters/FilterProvider.kt index bf7d68bd2..b6cf81ad2 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/filters/FilterProvider.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/filters/FilterProvider.kt @@ -2,21 +2,19 @@ package org.tasks.filters import org.jetbrains.compose.resources.getString import org.tasks.compose.drawer.DrawerConfiguration -import org.tasks.data.GoogleTaskFilters import org.tasks.data.LocationFilters import org.tasks.data.NO_ORDER import org.tasks.data.TagFilters import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.FilterDao -import org.tasks.data.dao.GoogleTaskListDao 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 -import org.tasks.data.toGtasksFilter import org.tasks.data.toLocationFilter import org.tasks.data.toTagFilter import org.tasks.filters.NavigationDrawerSubheader.SubheaderType @@ -35,7 +33,6 @@ import tasks.kmp.generated.resources.drawer_tags class FilterProvider( private val filterDao: FilterDao, private val tagDataDao: TagDataDao, - private val googleTaskListDao: GoogleTaskListDao, private val caldavDao: CaldavDao, private val configuration: DrawerConfiguration, private val locationDao: LocationDao, @@ -193,31 +190,6 @@ class FilterProvider( .toList() .plusAllIf(IS_DEBUG) { getDebugFilters() } - private suspend fun googleTaskFilter( - account: CaldavAccount, - showCreate: Boolean, - forceExpand: Boolean, - ): List { - val collapsed = !forceExpand && account.isCollapsed - return listOf( - NavigationDrawerSubheader( - account.username, - account.error?.isNotBlank() ?: false, - collapsed, - SubheaderType.GOOGLE_TASKS, - account.id.toString(), - if (showCreate) REQUEST_NEW_LIST else 0, - ) - ) - .apply { if (collapsed) return this } - .plus( - googleTaskListDao - .getGoogleTaskFilters(account.username!!) - .map(GoogleTaskFilters::toGtasksFilter) - .sort() - ) - } - private suspend fun caldavFilters( showCreate: Boolean, forceExpand: Boolean, @@ -226,15 +198,11 @@ class FilterProvider( .ifEmpty { listOf(caldavDao.setupLocalAccount()) } .filter { it.accountType != TYPE_LOCAL || configuration.localListsEnabled } .flatMap { - if (it.isGoogleTasks) { - googleTaskFilter(it, showCreate, forceExpand) - } else { - caldavFilter( - it, - showCreate && it.accountType != TYPE_OPENTASKS, - forceExpand, - ) - } + caldavFilter( + it, + showCreate && it.accountType != TYPE_OPENTASKS, + forceExpand, + ) } private suspend fun caldavFilter( @@ -254,6 +222,7 @@ class FilterProvider( collapsed, when { account.isTasksOrg -> SubheaderType.TASKS + account.isGoogleTasks -> SubheaderType.GOOGLE_TASKS else -> SubheaderType.CALDAV }, account.id.toString(), @@ -264,11 +233,17 @@ class FilterProvider( .plus(caldavDao .getCaldavFilters(account.uuid!!) .map { - CaldavFilter( - calendar = it.caldavCalendar, - principals = it.principals, - count = it.count, - ) + when (account.accountType) { + TYPE_GOOGLE_TASKS -> GtasksFilter( + list = it.caldavCalendar, + count = it.count, + ) + else -> CaldavFilter( + calendar = it.caldavCalendar, + principals = it.principals, + count = it.count, + ) + } } .sort()) }