Fix google task queries

Ensure sync metadata matches list
pull/4097/head
Alex Baker 4 days ago
parent 50c5cd5049
commit 6f3767399d

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

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

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

Loading…
Cancel
Save