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.junit.Test
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
@ -26,7 +25,6 @@ import javax.inject.Inject
class GtasksListServiceTest : InjectingTestCase() { class GtasksListServiceTest : InjectingTestCase() {
@Inject lateinit var taskDeleter: TaskDeleter @Inject lateinit var taskDeleter: TaskDeleter
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var googleTaskListDao: GoogleTaskListDao
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDao
private lateinit var gtasksListService: GtasksListService private lateinit var gtasksListService: GtasksListService
@ -34,7 +32,7 @@ class GtasksListServiceTest : InjectingTestCase() {
@Before @Before
override fun setUp() { override fun setUp() {
super.setUp() super.setUp()
gtasksListService = GtasksListService(googleTaskListDao, taskDeleter, localBroadcastManager) gtasksListService = GtasksListService(caldavDao, taskDeleter, localBroadcastManager)
} }
@Test @Test
@ -44,48 +42,47 @@ class GtasksListServiceTest : InjectingTestCase() {
with(RemoteGtaskListMaker.REMOTE_ID, "1"), with(RemoteGtaskListMaker.NAME, "Default"))) with(RemoteGtaskListMaker.REMOTE_ID, "1"), with(RemoteGtaskListMaker.NAME, "Default")))
assertEquals( assertEquals(
CaldavCalendar(id = 1, account = "account", uuid = "1", name = "Default"), CaldavCalendar(id = 1, account = "account", uuid = "1", name = "Default"),
googleTaskListDao.getById(1L) caldavDao.getCalendarById(1L)
) )
} }
@Test @Test
fun testGetListByRemoteId() = runBlocking { fun testGetListByRemoteId() = runBlocking {
val list = CaldavCalendar(uuid = "1") val list = CaldavCalendar(uuid = "1")
list.id = googleTaskListDao.insertOrReplace(list) caldavDao.insert(list)
assertEquals(list, googleTaskListDao.getByRemoteId("1")) assertEquals(list, caldavDao.getCalendarByUuid("1"))
} }
@Test @Test
fun testGetListReturnsNullWhenNotFound() = runBlocking { fun testGetListReturnsNullWhenNotFound() = runBlocking {
assertNull(googleTaskListDao.getByRemoteId("1")) assertNull(caldavDao.getCalendarByUuid("1"))
} }
@Test @Test
fun testDeleteMissingList() = runBlocking { 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")) val taskList = newRemoteList(with(RemoteGtaskListMaker.REMOTE_ID, "2"))
setLists(taskList) setLists(taskList)
assertEquals( assertEquals(
listOf(CaldavCalendar(id = 2, account = "account", uuid = "2", name = "Default")), listOf(CaldavCalendar(id = 2, account = "account", uuid = "2", name = "Default")),
googleTaskListDao.getLists("account") caldavDao.getCalendarsByAccount("account")
) )
} }
@Test @Test
fun testUpdateListName() = runBlocking { fun testUpdateListName() = runBlocking {
googleTaskListDao.insertOrReplace( val calendar = CaldavCalendar(uuid = "1", name = "oldName", account = "account")
CaldavCalendar(id = 1, uuid = "1", name = "oldName", account = "account") caldavDao.insert(calendar)
)
setLists( setLists(
newRemoteList( newRemoteList(
with(RemoteGtaskListMaker.REMOTE_ID, "1"), with(RemoteGtaskListMaker.NAME, "newName"))) with(RemoteGtaskListMaker.REMOTE_ID, "1"), with(RemoteGtaskListMaker.NAME, "newName")))
assertEquals("newName", googleTaskListDao.getById(1)!!.name) assertEquals("newName", caldavDao.getCalendarById(calendar.id)!!.name)
} }
@Test @Test
fun testNewListLastSyncIsZero() = runBlocking { fun testNewListLastSyncIsZero() = runBlocking {
setLists(TaskList().setId("1")) setLists(TaskList().setId("1"))
assertEquals(0L, googleTaskListDao.getByRemoteId("1")!!.lastSync) assertEquals(0L, caldavDao.getCalendarByUuid("1")!!.lastSync)
} }
private suspend fun setLists(vararg list: TaskList) { private suspend fun setLists(vararg list: TaskList) {

@ -11,7 +11,6 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
@ -29,7 +28,6 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class GoogleTaskDaoTests : InjectingTestCase() { class GoogleTaskDaoTests : InjectingTestCase() {
@Inject lateinit var googleTaskListDao: GoogleTaskListDao
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDao
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDao
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDao

@ -6,7 +6,6 @@ import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Test import org.junit.Test
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
@ -15,7 +14,6 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class GoogleTaskListDaoTest : InjectingTestCase() { class GoogleTaskListDaoTest : InjectingTestCase() {
@Inject lateinit var googleTaskListDao: GoogleTaskListDao
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDao
@Test @Test
@ -26,6 +24,6 @@ class GoogleTaskListDaoTest : InjectingTestCase() {
) )
caldavDao.insert(account) 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.google.api.services.tasks.model.TaskList
import com.todoroo.astrid.service.TaskDeleter import com.todoroo.astrid.service.TaskDeleter
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.dao.GoogleTaskListDao
import javax.inject.Inject import javax.inject.Inject
class GtasksListService @Inject constructor( class GtasksListService @Inject constructor(
private val googleTaskListDao: GoogleTaskListDao, private val caldavDao: CaldavDao,
private val taskDeleter: TaskDeleter, private val taskDeleter: TaskDeleter,
private val localBroadcastManager: LocalBroadcastManager, private val localBroadcastManager: LocalBroadcastManager,
) { ) {
@ -25,7 +25,7 @@ class GtasksListService @Inject constructor(
* @param remoteLists remote information about your lists * @param remoteLists remote information about your lists
*/ */
suspend fun updateLists(account: CaldavAccount, remoteLists: List<TaskList>) { 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() val previousLists: MutableSet<Long> = HashSet()
for (list in lists) { for (list in lists) {
previousLists.add(list.id) previousLists.add(list.id)
@ -47,13 +47,13 @@ class GtasksListService @Inject constructor(
) )
} }
local.name = remote.title local.name = remote.title
googleTaskListDao.insertOrReplace(local) caldavDao.insertOrReplace(local)
previousLists.remove(local.id) previousLists.remove(local.id)
} }
// check for lists that aren't on remote server // check for lists that aren't on remote server
for (listId in previousLists) { for (listId in previousLists) {
taskDeleter.delete(googleTaskListDao.getById(listId)!!) taskDeleter.delete(caldavDao.getCalendarById(listId)!!)
} }
localBroadcastManager.broadcastRefreshList() localBroadcastManager.broadcastRefreshList()
} }

@ -21,10 +21,9 @@ import org.tasks.PermissionUtil.verifyPermissions
import org.tasks.R import org.tasks.R
import org.tasks.analytics.Constants import org.tasks.analytics.Constants
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS 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.dialogs.DialogBuilder
import org.tasks.gtasks.GoogleAccountManager import org.tasks.gtasks.GoogleAccountManager
import org.tasks.preferences.ActivityPermissionRequestor import org.tasks.preferences.ActivityPermissionRequestor
@ -42,7 +41,6 @@ class GtasksLoginActivity : AppCompatActivity() {
@Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var googleAccountManager: GoogleAccountManager @Inject lateinit var googleAccountManager: GoogleAccountManager
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDao
@Inject lateinit var googleTaskListDao: GoogleTaskListDao
@Inject lateinit var permissionRequestor: ActivityPermissionRequestor @Inject lateinit var permissionRequestor: ActivityPermissionRequestor
@Inject lateinit var firebase: Firebase @Inject lateinit var firebase: Firebase
@ -92,7 +90,7 @@ class GtasksLoginActivity : AppCompatActivity() {
caldavDao.update( caldavDao.update(
account.copy(error = "") account.copy(error = "")
) )
googleTaskListDao.resetLastSync(accountName) caldavDao.resetLastSync(accountName)
} }
} }
setResult(Activity.RESULT_OK) setResult(Activity.RESULT_OK)

@ -5,7 +5,6 @@ import org.tasks.LocalBroadcastManager
import org.tasks.caldav.VtodoCache import org.tasks.caldav.VtodoCache
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.dao.TaskDao import org.tasks.data.dao.TaskDao
import org.tasks.data.db.DbUtils.dbchunk import org.tasks.data.db.DbUtils.dbchunk
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
@ -24,7 +23,6 @@ class TaskMover @Inject constructor(
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDao,
private val googleTaskListDao: GoogleTaskListDao,
private val preferences: Preferences, private val preferences: Preferences,
private val localBroadcastManager: LocalBroadcastManager, private val localBroadcastManager: LocalBroadcastManager,
private val syncAdapters: SyncAdapters, private val syncAdapters: SyncAdapters,
@ -33,14 +31,13 @@ class TaskMover @Inject constructor(
suspend fun getSingleFilter(tasks: List<Long>): Filter? { suspend fun getSingleFilter(tasks: List<Long>): Filter? {
val caldavCalendars = caldavDao.getCalendars(tasks) val caldavCalendars = caldavDao.getCalendars(tasks)
val googleTaskLists = googleTaskDao.getLists(tasks) if (caldavCalendars.size == 1) {
if (caldavCalendars.isEmpty()) { val list = caldavCalendars.first()
if (googleTaskLists.size == 1) { val account = list.account?.let { caldavDao.getAccountByUuid(it) }
return googleTaskListDao.getByRemoteId(googleTaskLists[0])?.let { GtasksFilter(it) } return when (account?.accountType) {
} null -> null
} else if (googleTaskLists.isEmpty()) { CaldavAccount.TYPE_GOOGLE_TASKS -> GtasksFilter(list)
if (caldavCalendars.size == 1) { else -> CaldavFilter(list)
return caldavDao.getCalendar(caldavCalendars[0])?.let { CaldavFilter(it) }
} }
} }
return null return null

@ -22,7 +22,6 @@ import org.tasks.data.Location
import org.tasks.data.convertPictureUri import org.tasks.data.convertPictureUri
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.FilterDao import org.tasks.data.dao.FilterDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.dao.LocationDao import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.TagDao import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
@ -49,7 +48,6 @@ class Upgrader @Inject constructor(
private val tagDao: TagDao, private val tagDao: TagDao,
private val filterDao: FilterDao, private val filterDao: FilterDao,
private val defaultFilterProvider: DefaultFilterProvider, private val defaultFilterProvider: DefaultFilterProvider,
private val googleTaskListDao: GoogleTaskListDao,
private val userActivityDao: UserActivityDao, private val userActivityDao: UserActivityDao,
private val taskAttachmentDao: TaskAttachmentDao, private val taskAttachmentDao: TaskAttachmentDao,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
@ -270,7 +268,7 @@ class Upgrader @Inject constructor(
if (isNullOrEmpty(defaultGoogleTaskList)) { if (isNullOrEmpty(defaultGoogleTaskList)) {
// TODO: look up default list // TODO: look up default list
} else { } else {
val googleTaskList = googleTaskListDao.getByRemoteId(defaultGoogleTaskList!!) val googleTaskList = caldavDao.getCalendarByUuid(defaultGoogleTaskList!!)
if (googleTaskList != null) { if (googleTaskList != null) {
defaultFilterProvider.defaultList = GtasksFilter(googleTaskList) defaultFilterProvider.defaultList = GtasksFilter(googleTaskList)
} }

@ -19,7 +19,7 @@ import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.compose.settings.Toaster 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.CaldavAccount
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.filters.Filter import org.tasks.filters.Filter
@ -31,7 +31,7 @@ import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class GoogleTaskListSettingsActivity : BaseListSettingsActivity() { class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
@Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var caldavDao: CaldavDao
@Inject lateinit var taskDeleter: TaskDeleter @Inject lateinit var taskDeleter: TaskDeleter
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
@ -114,7 +114,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
else -> { else -> {
if (colorChanged() || iconChanged()) { if (colorChanged() || iconChanged()) {
gtasksList.color = baseViewModel.color gtasksList.color = baseViewModel.color
googleTaskListDao.insertOrReplace( caldavDao.insertOrReplace(
gtasksList.copy( gtasksList.copy(
icon = baseViewModel.icon icon = baseViewModel.icon
) )
@ -168,7 +168,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
color = baseViewModel.color, color = baseViewModel.color,
icon = baseViewModel.icon, icon = baseViewModel.icon,
) )
val id = googleTaskListDao.insertOrReplace(result) val id = caldavDao.insertOrReplace(result)
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,
@ -194,7 +194,7 @@ class GoogleTaskListSettingsActivity : BaseListSettingsActivity() {
color = baseViewModel.color, color = baseViewModel.color,
icon = baseViewModel.icon, icon = baseViewModel.icon,
) )
googleTaskListDao.insertOrReplace(result) caldavDao.insertOrReplace(result)
setResult( setResult(
Activity.RESULT_OK, Activity.RESULT_OK,

@ -29,7 +29,6 @@ import org.tasks.R
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.FilterDao import org.tasks.data.dao.FilterDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.dao.LocationDao import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.listSettingsClass import org.tasks.data.listSettingsClass
@ -50,7 +49,6 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var tagDataDao: TagDataDao
@Inject lateinit var googleTaskListDao: GoogleTaskListDao
@Inject lateinit var filterDao: FilterDao @Inject lateinit var filterDao: FilterDao
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDao
@Inject lateinit var locationDao: LocationDao @Inject lateinit var locationDao: LocationDao

@ -13,10 +13,10 @@ import org.tasks.Strings
import org.tasks.activities.FilterSettingsActivity.Companion.sql import org.tasks.activities.FilterSettingsActivity.Companion.sql
import org.tasks.data.GoogleTask import org.tasks.data.GoogleTask
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Filter import org.tasks.data.entity.Filter
import org.tasks.data.entity.Tag import org.tasks.data.entity.Tag
@ -35,7 +35,6 @@ import javax.inject.Inject
class FilterCriteriaProvider @Inject constructor( class FilterCriteriaProvider @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val tagDataDao: TagDataDao, private val tagDataDao: TagDataDao,
private val googleTaskListDao: GoogleTaskListDao,
private val caldavDao: CaldavDao private val caldavDao: CaldavDao
) { ) {
private val r = context.resources private val r = context.resources
@ -120,7 +119,7 @@ class FilterCriteriaProvider @Inject constructor(
add(dueDateFilter) add(dueDateFilter)
add(priorityFilter) add(priorityFilter)
add(taskTitleContainsFilter) add(taskTitleContainsFilter)
if (googleTaskListDao.getAccounts().isNotEmpty()) { if (caldavDao.getAccounts(CaldavAccount.TYPE_GOOGLE_TASKS).isNotEmpty()) {
add(gtasksFilterCriteria()) add(gtasksFilterCriteria())
} }
add(caldavFilterCriteria()) add(caldavFilterCriteria())

@ -23,7 +23,6 @@ import org.tasks.data.*
import org.tasks.data.dao.AlarmDao import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
@ -47,7 +46,6 @@ import kotlin.math.max
class GoogleTaskSynchronizer @Inject constructor( class GoogleTaskSynchronizer @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val googleTaskListDao: GoogleTaskListDao,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val gtasksListService: GtasksListService, private val gtasksListService: GtasksListService,
private val preferences: Preferences, private val preferences: Preferences,
@ -124,13 +122,13 @@ class GoogleTaskSynchronizer @Inject constructor(
gtasksListService.updateLists(account, gtaskLists) gtasksListService.updateLists(account, gtaskLists)
val defaultRemoteList = defaultFilterProvider.defaultList val defaultRemoteList = defaultFilterProvider.defaultList
if (defaultRemoteList is GtasksFilter) { if (defaultRemoteList is GtasksFilter) {
val list = googleTaskListDao.getByRemoteId(defaultRemoteList.remoteId) val list = caldavDao.getCalendarByUuid(defaultRemoteList.remoteId)
if (list == null) { if (list == null) {
preferences.setString(R.string.p_default_list, null) preferences.setString(R.string.p_default_list, null)
} }
} }
pushLocalChanges(account, gtasksInvoker) pushLocalChanges(account, gtasksInvoker)
for (list in googleTaskListDao.getByRemoteId(gtaskLists.map { it.id })) { for (list in caldavDao.getCalendarsByAccount(account.uuid!!)) {
if (isNullOrEmpty(list.uuid)) { if (isNullOrEmpty(list.uuid)) {
firebase.reportException(RuntimeException("Empty remote id")) firebase.reportException(RuntimeException("Empty remote id"))
continue continue
@ -355,7 +353,7 @@ class GoogleTaskSynchronizer @Inject constructor(
write(task, googleTask) write(task, googleTask)
} }
} }
googleTaskListDao.insertOrReplace( caldavDao.insertOrReplace(
list.copy( list.copy(
lastSync = lastSyncDate lastSync = lastSyncDate
) )

@ -21,7 +21,6 @@ import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.DeletionDao import org.tasks.data.dao.DeletionDao
import org.tasks.data.dao.FilterDao import org.tasks.data.dao.FilterDao
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.dao.LocationDao import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.NotificationDao import org.tasks.data.dao.NotificationDao
import org.tasks.data.dao.TagDao import org.tasks.data.dao.TagDao
@ -94,10 +93,6 @@ class ApplicationModule {
@Singleton @Singleton
fun getFilterDao(db: Database): FilterDao = db.filterDao() fun getFilterDao(db: Database): FilterDao = db.filterDao()
@Provides
@Singleton
fun getGoogleTaskListDao(db: Database): GoogleTaskListDao = db.googleTaskListDao()
@Provides @Provides
@Singleton @Singleton
fun getCaldavDao(db: Database): CaldavDao = db.caldavDao() fun getCaldavDao(db: Database): CaldavDao = db.caldavDao()
@ -154,7 +149,6 @@ class ApplicationModule {
fun providesFilterProvider( fun providesFilterProvider(
filterDao: FilterDao, filterDao: FilterDao,
tagDataDao: TagDataDao, tagDataDao: TagDataDao,
googleTaskListDao: GoogleTaskListDao,
caldavDao: CaldavDao, caldavDao: CaldavDao,
drawerConfiguration: DrawerConfiguration, drawerConfiguration: DrawerConfiguration,
locationDao: LocationDao, locationDao: LocationDao,
@ -163,7 +157,6 @@ class ApplicationModule {
) = FilterProvider( ) = FilterProvider(
filterDao = filterDao, filterDao = filterDao,
tagDataDao = tagDataDao, tagDataDao = tagDataDao,
googleTaskListDao = googleTaskListDao,
caldavDao = caldavDao, caldavDao = caldavDao,
configuration = drawerConfiguration, configuration = drawerConfiguration,
locationDao = locationDao, locationDao = locationDao,

@ -24,7 +24,7 @@ import org.tasks.billing.Inventory
import org.tasks.caldav.CaldavSynchronizer import org.tasks.caldav.CaldavSynchronizer
import org.tasks.data.OpenTaskDao import org.tasks.data.OpenTaskDao
import org.tasks.data.dao.CaldavDao 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_CALDAV
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_ETEBASE import org.tasks.data.entity.CaldavAccount.Companion.TYPE_ETEBASE
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_MICROSOFT import org.tasks.data.entity.CaldavAccount.Companion.TYPE_MICROSOFT
@ -51,7 +51,6 @@ class SyncWork @AssistedInject constructor(
private val googleTaskSynchronizer: Lazy<GoogleTaskSynchronizer>, private val googleTaskSynchronizer: Lazy<GoogleTaskSynchronizer>,
private val openTasksSynchronizer: Lazy<OpenTasksSynchronizer>, private val openTasksSynchronizer: Lazy<OpenTasksSynchronizer>,
private val microsoftSynchronizer: Lazy<MicrosoftSynchronizer>, private val microsoftSynchronizer: Lazy<MicrosoftSynchronizer>,
private val googleTaskListDao: GoogleTaskListDao,
private val openTaskDao: OpenTaskDao, private val openTaskDao: OpenTaskDao,
private val inventory: Inventory private val inventory: Inventory
) : BaseWorker(context, workerParams, firebase) { ) : BaseWorker(context, workerParams, firebase) {
@ -146,7 +145,7 @@ class SyncWork @AssistedInject constructor(
} }
private suspend fun getGoogleAccounts() = private suspend fun getGoogleAccounts() =
googleTaskListDao.getAccounts() caldavDao.getAccounts(CaldavAccount.TYPE_GOOGLE_TASKS)
private suspend fun getCaldavAccounts() = private suspend fun getCaldavAccounts() =
caldavDao.getAccounts(TYPE_CALDAV, TYPE_TASKS, TYPE_ETEBASE, TYPE_MICROSOFT) 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.GoogleTask
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.FilterDao 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.LocationDao
import org.tasks.data.dao.TagDataDao 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.CaldavCalendar.Companion.ACCESS_READ_ONLY
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
@ -32,10 +31,8 @@ class DefaultFilterProvider @Inject constructor(
private val preferences: Preferences, private val preferences: Preferences,
private val filterDao: FilterDao, private val filterDao: FilterDao,
private val tagDataDao: TagDataDao, private val tagDataDao: TagDataDao,
private val googleTaskListDao: GoogleTaskListDao,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val locationDao: LocationDao, private val locationDao: LocationDao,
private val googleTaskDao: GoogleTaskDao
) { ) {
var dashclockFilter: Filter var dashclockFilter: Filter
@Deprecated("use coroutines") get() = runBlocking { getFilterFromPreference(R.string.p_dashclock_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.isNew) {
if (task.hasTransitory(GoogleTask.KEY)) { if (task.hasTransitory(GoogleTask.KEY)) {
val listId = task.getTransitory<String>(GoogleTask.KEY)!! val listId = task.getTransitory<String>(GoogleTask.KEY)!!
val googleTaskList = googleTaskListDao.getByRemoteId(listId) val googleTaskList = caldavDao.getCalendarByUuid(listId)
if (googleTaskList != null) { if (googleTaskList != null) {
originalList = GtasksFilter(googleTaskList) originalList = GtasksFilter(googleTaskList)
} }
@ -175,19 +172,13 @@ class DefaultFilterProvider @Inject constructor(
} }
} }
} else { } else {
val googleTask = googleTaskDao.getByTaskId(task.id)
val caldavTask = caldavDao.getTask(task.id) val caldavTask = caldavDao.getTask(task.id)
val caldavAccount = caldavDao.getAccountForTask(task.id) val calendar = caldavTask?.calendar?.let { caldavDao.getCalendarByUuid(it) }
if (googleTask != null) { val account = calendar?.account?.let { caldavDao.getAccountByUuid(it) }
val googleTaskList = googleTaskListDao.getByRemoteId(googleTask.calendar!!) originalList = when (account?.accountType) {
if (googleTaskList != null) { null -> null
originalList = GtasksFilter(googleTaskList) CaldavAccount.TYPE_GOOGLE_TASKS -> GtasksFilter(calendar)
} else -> CaldavFilter(calendar)
} else if (caldavTask != null) {
val calendarByUuid = caldavDao.getCalendarByUuid(caldavTask.calendar!!)
if (calendarByUuid != null) {
originalList = CaldavFilter(calendarByUuid)
}
} }
} }
return originalList ?: getDefaultList() return originalList ?: getDefaultList()

@ -18,7 +18,6 @@ import kotlinx.coroutines.launch
import org.tasks.R import org.tasks.R
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.compose.edit.SubtaskRow import org.tasks.compose.edit.SubtaskRow
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
import org.tasks.filters.SubtaskFilter import org.tasks.filters.SubtaskFilter
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -32,7 +31,6 @@ import javax.inject.Inject
class SubtaskControlSet : TaskEditControlFragment() { class SubtaskControlSet : TaskEditControlFragment() {
@Inject lateinit var activity: Activity @Inject lateinit var activity: Activity
@Inject lateinit var taskCompleter: TaskCompleter @Inject lateinit var taskCompleter: TaskCompleter
@Inject lateinit var googleTaskDao: GoogleTaskDao
@Inject lateinit var taskCreator: TaskCreator @Inject lateinit var taskCreator: TaskCreator
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDao
@Inject lateinit var checkBoxProvider: CheckBoxProvider @Inject lateinit var checkBoxProvider: CheckBoxProvider

@ -3,6 +3,7 @@ package org.tasks.data.dao
import androidx.room.Dao import androidx.room.Dao
import androidx.room.Delete import androidx.room.Delete
import androidx.room.Insert import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query import androidx.room.Query
import androidx.room.Update import androidx.room.Update
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
@ -267,8 +268,12 @@ SELECT EXISTS(SELECT 1
+ " WHERE cdl_account = cda_uuid") + " WHERE cdl_account = cda_uuid")
abstract suspend fun getAccountForTask(task: Long): CaldavAccount? abstract suspend fun getAccountForTask(task: Long): CaldavAccount?
@Query("SELECT DISTINCT cd_calendar FROM caldav_tasks WHERE cd_deleted = 0 AND cd_task IN (:tasks)") @Query("""
abstract suspend fun getCalendars(tasks: List<Long>): List<String> 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(""" @Query("""
SELECT caldav_lists.*, COUNT(DISTINCT(tasks._id)) AS count, COUNT(DISTINCT(principal_access.id)) AS principals 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 tasks.hideUntil < :now AND
cd_deleted = 0 cd_deleted = 0
LEFT JOIN principal_access ON caldav_lists.cdl_id = principal_access.list 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 WHERE caldav_lists.cdl_account = :uuid
AND caldav_accounts.cda_account_type != $TYPE_GOOGLE_TASKS
GROUP BY caldav_lists.cdl_uuid GROUP BY caldav_lists.cdl_uuid
""") """)
abstract suspend fun getCaldavFilters(uuid: String, now: Long = currentTimeMillis()): List<CaldavFilters> 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") @Query("UPDATE tasks SET `order` = :order WHERE _id = :id")
abstract suspend fun setTaskOrder(id: Long, order: Long?) 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 { companion object {
const val LOCAL = "local" const val LOCAL = "local"

@ -89,9 +89,6 @@ abstract class GoogleTaskDao(private val database: Database) {
@Query("SELECT * FROM caldav_tasks WHERE cd_task = :taskId") @Query("SELECT * FROM caldav_tasks WHERE cd_task = :taskId")
abstract suspend fun getAllByTaskId(taskId: Long): List<CaldavTask> 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") @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 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.DeletionDao
import org.tasks.data.dao.FilterDao import org.tasks.data.dao.FilterDao
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.dao.LocationDao import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.NotificationDao import org.tasks.data.dao.NotificationDao
import org.tasks.data.dao.PrincipalDao import org.tasks.data.dao.PrincipalDao
@ -75,7 +74,6 @@ abstract class Database : RoomDatabase() {
abstract fun tagDao(): TagDao abstract fun tagDao(): TagDao
abstract fun googleTaskDao(): GoogleTaskDao abstract fun googleTaskDao(): GoogleTaskDao
abstract fun filterDao(): FilterDao abstract fun filterDao(): FilterDao
abstract fun googleTaskListDao(): GoogleTaskListDao
abstract fun taskDao(): TaskDao abstract fun taskDao(): TaskDao
abstract fun caldavDao(): CaldavDao abstract fun caldavDao(): CaldavDao
abstract fun deletionDao(): DeletionDao abstract fun deletionDao(): DeletionDao

@ -2,21 +2,19 @@ package org.tasks.filters
import org.jetbrains.compose.resources.getString import org.jetbrains.compose.resources.getString
import org.tasks.compose.drawer.DrawerConfiguration import org.tasks.compose.drawer.DrawerConfiguration
import org.tasks.data.GoogleTaskFilters
import org.tasks.data.LocationFilters import org.tasks.data.LocationFilters
import org.tasks.data.NO_ORDER import org.tasks.data.NO_ORDER
import org.tasks.data.TagFilters import org.tasks.data.TagFilters
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.FilterDao import org.tasks.data.dao.FilterDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.dao.LocationDao import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.dao.TaskDao import org.tasks.data.dao.TaskDao
import org.tasks.data.entity.CaldavAccount 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_LOCAL
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS
import org.tasks.data.setupLocalAccount import org.tasks.data.setupLocalAccount
import org.tasks.data.toGtasksFilter
import org.tasks.data.toLocationFilter import org.tasks.data.toLocationFilter
import org.tasks.data.toTagFilter import org.tasks.data.toTagFilter
import org.tasks.filters.NavigationDrawerSubheader.SubheaderType import org.tasks.filters.NavigationDrawerSubheader.SubheaderType
@ -35,7 +33,6 @@ import tasks.kmp.generated.resources.drawer_tags
class FilterProvider( class FilterProvider(
private val filterDao: FilterDao, private val filterDao: FilterDao,
private val tagDataDao: TagDataDao, private val tagDataDao: TagDataDao,
private val googleTaskListDao: GoogleTaskListDao,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val configuration: DrawerConfiguration, private val configuration: DrawerConfiguration,
private val locationDao: LocationDao, private val locationDao: LocationDao,
@ -193,31 +190,6 @@ class FilterProvider(
.toList() .toList()
.plusAllIf(IS_DEBUG) { getDebugFilters() } .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( private suspend fun caldavFilters(
showCreate: Boolean, showCreate: Boolean,
forceExpand: Boolean, forceExpand: Boolean,
@ -226,15 +198,11 @@ class FilterProvider(
.ifEmpty { listOf(caldavDao.setupLocalAccount()) } .ifEmpty { listOf(caldavDao.setupLocalAccount()) }
.filter { it.accountType != TYPE_LOCAL || configuration.localListsEnabled } .filter { it.accountType != TYPE_LOCAL || configuration.localListsEnabled }
.flatMap { .flatMap {
if (it.isGoogleTasks) { caldavFilter(
googleTaskFilter(it, showCreate, forceExpand) it,
} else { showCreate && it.accountType != TYPE_OPENTASKS,
caldavFilter( forceExpand,
it, )
showCreate && it.accountType != TYPE_OPENTASKS,
forceExpand,
)
}
} }
private suspend fun caldavFilter( private suspend fun caldavFilter(
@ -254,6 +222,7 @@ class FilterProvider(
collapsed, collapsed,
when { when {
account.isTasksOrg -> SubheaderType.TASKS account.isTasksOrg -> SubheaderType.TASKS
account.isGoogleTasks -> SubheaderType.GOOGLE_TASKS
else -> SubheaderType.CALDAV else -> SubheaderType.CALDAV
}, },
account.id.toString(), account.id.toString(),
@ -264,11 +233,17 @@ class FilterProvider(
.plus(caldavDao .plus(caldavDao
.getCaldavFilters(account.uuid!!) .getCaldavFilters(account.uuid!!)
.map { .map {
CaldavFilter( when (account.accountType) {
calendar = it.caldavCalendar, TYPE_GOOGLE_TASKS -> GtasksFilter(
principals = it.principals, list = it.caldavCalendar,
count = it.count, count = it.count,
) )
else -> CaldavFilter(
calendar = it.caldavCalendar,
principals = it.principals,
count = it.count,
)
}
} }
.sort()) .sort())
} }

Loading…
Cancel
Save