diff --git a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt index 96143368e..81047bf26 100644 --- a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt +++ b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt @@ -96,13 +96,13 @@ class GoogleTaskDaoTests : InjectingTestCase() { @Test fun getTaskFromRemoteId() = runBlocking { insert(newCaldavTask(with(REMOTE_ID, "1234"))) - assertEquals(1L, googleTaskDao.getTask("1234")) + assertEquals(1L, googleTaskDao.getTask("1234", "calendar")) } @Test fun getRemoteIdForTask() = runBlocking { insert(newCaldavTask(with(REMOTE_ID, "1234"))) - assertEquals("1234", googleTaskDao.getRemoteId(1L)) + assertEquals("1234", googleTaskDao.getRemoteId(1L, "calendar")) } @Test @@ -256,7 +256,7 @@ class GoogleTaskDaoTests : InjectingTestCase() { } private suspend fun getOrder(remoteId: String): Long? { - return taskDao.fetch(googleTaskDao.getByRemoteId(remoteId)!!.task)?.order + return taskDao.fetch(googleTaskDao.getByRemoteId(remoteId, "calendar")!!.task)?.order } private suspend fun insertTop(googleTask: CaldavTask) { @@ -278,6 +278,6 @@ class GoogleTaskDaoTests : InjectingTestCase() { } private suspend fun getByRemoteId(remoteId: String): CaldavTask { - return googleTaskDao.getByRemoteId(remoteId)!! + return googleTaskDao.getByRemoteId(remoteId, "calendar")!! } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt index fd0fde0ee..5e2c9227c 100644 --- a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt +++ b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt @@ -247,7 +247,7 @@ class GoogleTaskSynchronizer @Inject constructor( } if (newlyCreated) { val parent = task.parent - val localParent = if (parent > 0) googleTaskDao.getRemoteId(parent) else null + val localParent = if (parent > 0) googleTaskDao.getRemoteId(parent, listId) else null val previous = googleTaskDao.getPrevious( listId, if (isNullOrEmpty(localParent)) 0 else parent, task.order ?: 0) val created: Task? = try { @@ -271,7 +271,7 @@ class GoogleTaskSynchronizer @Inject constructor( if (!task.isDeleted && gtasksMetadata.isMoved) { try { val parent = task.parent - val localParent = if (parent > 0) googleTaskDao.getRemoteId(parent) else null + val localParent = if (parent > 0) googleTaskDao.getRemoteId(parent, listId) else null val previous = googleTaskDao.getPrevious( listId, if (localParent.isNullOrBlank()) 0 else parent, @@ -359,12 +359,12 @@ class GoogleTaskSynchronizer @Inject constructor( Collections.sort(tasks, PARENTS_FIRST) for (gtask in tasks) { val remoteId = gtask.id - var googleTask = googleTaskDao.getByRemoteId(remoteId) + var googleTask = googleTaskDao.getByRemoteId(remoteId, listId!!) var task: org.tasks.data.entity.Task? = null if (googleTask == null) { googleTask = CaldavTask( task = 0, - calendar = "", + calendar = listId, remoteId = null, ) } else if (googleTask.task > 0) { @@ -402,7 +402,6 @@ class GoogleTaskSynchronizer @Inject constructor( val dueDate = GtasksApiUtilities.gtasksDueTimeToUnixTime(gtask.due?.let(::DateTime)) mergeDates(createDueDate(org.tasks.data.entity.Task.URGENCY_SPECIFIC_DAY, dueDate), task) task.notes = getTruncatedValue(task.notes, gtask.notes, MAX_DESCRIPTION_LENGTH) - googleTask.calendar = listId if (task.title?.isNotBlank() == true || task.notes?.isNotBlank() == true) { write(task, googleTask) } @@ -417,7 +416,7 @@ class GoogleTaskSynchronizer @Inject constructor( private suspend fun setOrderAndParent(googleTask: CaldavTask, task: Task, local: org.tasks.data.entity.Task) { task.position?.toLongOrNull()?.let { googleTask.remoteOrder = it } googleTask.remoteParent = task.parent?.takeIf { it.isNotBlank() } - local.parent = googleTask.remoteParent?.let { googleTaskDao.getTask(it) } ?: 0L + local.parent = googleTask.remoteParent?.let { googleTaskDao.getTask(it, googleTask.calendar!!) } ?: 0L } private suspend fun write(task: org.tasks.data.entity.Task, googleTask: CaldavTask) { 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 2291ecf8a..e2fd4484e 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/dao/GoogleTaskDao.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/dao/GoogleTaskDao.kt @@ -68,7 +68,7 @@ abstract class GoogleTaskDao { @Query("UPDATE caldav_tasks SET gt_moved = 1 WHERE cd_task = :task and cd_calendar = :list") internal abstract suspend fun setMoved(task: Long, list: String) - @Query("SELECT caldav_tasks.* FROM caldav_tasks INNER JOIN caldav_lists ON cdl_uuid = cd_calendar INNER JOIN caldav_accounts ON cda_uuid = cdl_account WHERE cd_task = :taskId AND cd_deleted = 0 AND cda_account_type = $TYPE_GOOGLE_TASKS LIMIT 1") + @Query("SELECT caldav_tasks.* FROM caldav_tasks INNER JOIN caldav_lists ON cdl_uuid = cd_calendar INNER JOIN caldav_accounts ON cda_uuid = cdl_account WHERE cd_task = :taskId AND cd_deleted = 0 AND cda_account_type = $TYPE_GOOGLE_TASKS") abstract suspend fun getByTaskId(taskId: Long): CaldavTask? @Update @@ -80,8 +80,8 @@ abstract class GoogleTaskDao { @Delete abstract suspend fun delete(deleted: CaldavTask) - @Query("SELECT * FROM caldav_tasks WHERE cd_remote_id = :remoteId LIMIT 1") - abstract suspend fun getByRemoteId(remoteId: String): CaldavTask? + @Query("SELECT * FROM caldav_tasks WHERE cd_remote_id = :remoteId AND cd_calendar = :calendar") + abstract suspend fun getByRemoteId(remoteId: String, calendar: String): CaldavTask? @Query(""" SELECT caldav_tasks.* @@ -115,11 +115,11 @@ ORDER BY `order` DESC ) abstract suspend fun getPrevious(listId: String, parent: Long, order: Long): String? - @Query("SELECT cd_remote_id FROM caldav_tasks WHERE cd_task = :task") - abstract suspend fun getRemoteId(task: Long): String? + @Query("SELECT cd_remote_id FROM caldav_tasks WHERE cd_task = :task AND cd_calendar = :calendar") + abstract suspend fun getRemoteId(task: Long, calendar: String): String? - @Query("SELECT cd_task FROM caldav_tasks WHERE cd_remote_id = :remoteId") - abstract suspend fun getTask(remoteId: String): Long? + @Query("SELECT cd_task FROM caldav_tasks WHERE cd_remote_id = :remoteId AND cd_calendar = :calendar") + abstract suspend fun getTask(remoteId: String, calendar: String): Long? @Query( """