Remove GoogleTaskListDao

pull/3221/head
Alex Baker 11 months ago
parent 67b6a6ef64
commit e5d6723e23

@ -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) {

@ -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

@ -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())
}
}

@ -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<TaskList>) {
val lists = googleTaskListDao.getLists(account.uuid!!)
val lists = caldavDao.getCalendarsByAccount(account.uuid!!)
val previousLists: MutableSet<Long> = 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()
}

@ -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)

@ -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<Long>): 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

@ -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)
}

@ -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,

@ -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

@ -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())

@ -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
)

@ -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,

@ -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<GoogleTaskSynchronizer>,
private val openTasksSynchronizer: Lazy<OpenTasksSynchronizer>,
private val microsoftSynchronizer: Lazy<MicrosoftSynchronizer>,
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)

@ -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<String>(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()

@ -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

@ -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<Long>): List<String>
@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<Long>): List<CaldavCalendar>
@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<CaldavFilters>
@ -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"

@ -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<CaldavTask>
@Query("SELECT DISTINCT cd_calendar FROM caldav_tasks WHERE cd_deleted = 0 AND cd_task IN (:tasks)")
abstract suspend fun getLists(tasks: List<Long>): List<String>
@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

@ -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<CaldavAccount>
@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<CaldavCalendar>
@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<String>): List<CaldavCalendar>
@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<GoogleTaskFilters>
}

@ -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

@ -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<FilterListItem> {
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())
}

Loading…
Cancel
Save