diff --git a/app/src/main/java/org/tasks/data/GoogleTaskDao.kt b/app/src/main/java/org/tasks/data/GoogleTaskDao.kt index ca96aa2bf..15fc876a4 100644 --- a/app/src/main/java/org/tasks/data/GoogleTaskDao.kt +++ b/app/src/main/java/org/tasks/data/GoogleTaskDao.kt @@ -107,7 +107,7 @@ abstract class GoogleTaskDao { abstract suspend fun getRemoteId(task: Long): String? @Query("SELECT gt_task FROM google_tasks WHERE gt_remote_id = :remoteId") - abstract suspend fun getTask(remoteId: String): Long + abstract suspend fun getTask(remoteId: String): Long? @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH) @Query("SELECT google_tasks.*, gt_order AS primary_sort, NULL AS secondary_sort FROM google_tasks JOIN tasks ON tasks._id = gt_task WHERE gt_parent = 0 AND gt_list_id = :listId AND tasks.deleted = 0 UNION SELECT c.*, p.gt_order AS primary_sort, c.gt_order AS secondary_sort FROM google_tasks AS c LEFT JOIN google_tasks AS p ON c.gt_parent = p.gt_task JOIN tasks ON tasks._id = c.gt_task WHERE c.gt_parent > 0 AND c.gt_list_id = :listId AND tasks.deleted = 0 ORDER BY primary_sort ASC, secondary_sort ASC") diff --git a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt index 0ae8f4a2f..dfa4c4416 100644 --- a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt +++ b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt @@ -236,8 +236,7 @@ class GoogleTaskSynchronizer @Inject constructor( // Update the metadata for the newly created task gtasksMetadata.remoteId = created.id gtasksMetadata.listId = listId - gtasksMetadata.remoteOrder = created.position.toLong() - gtasksMetadata.remoteParent = created.parent + setOrderAndParent(gtasksMetadata, created) } else { return } @@ -251,10 +250,9 @@ class GoogleTaskSynchronizer @Inject constructor( listId!!, if (isNullOrEmpty(localParent)) 0 else parent, gtasksMetadata.order) - val result = gtasksInvoker.moveGtask(listId, remoteModel.id, localParent, previous) - gtasksMetadata.remoteOrder = result!!.position.toLong() - gtasksMetadata.remoteParent = result.parent - gtasksMetadata.parent = if (isNullOrEmpty(result.parent)) 0 else googleTaskDao.getTask(result.parent) + gtasksInvoker + .moveGtask(listId, remoteModel.id, localParent, previous) + ?.let { setOrderAndParent(gtasksMetadata, it) } } catch (e: GoogleJsonResponseException) { if (e.statusCode == 400) { Timber.e(e) @@ -335,18 +333,13 @@ class GoogleTaskSynchronizer @Inject constructor( continue } } else { - googleTask.remoteOrder = gtask.position.toLong() - googleTask.remoteParent = gtask.parent - googleTask.parent = gtask.parent - ?.takeIf { it.isNotBlank() } - ?.let { googleTaskDao.getTask(it) } - ?: 0L + setOrderAndParent(googleTask, gtask) googleTask.remoteId = gtask.id } if (task == null) { task = taskCreator.createWithValues("") } - task!!.title = getTruncatedValue(task.title, gtask.title, MAX_TITLE_LENGTH) + task.title = getTruncatedValue(task.title, gtask.title, MAX_TITLE_LENGTH) task.creationDate = DateUtilities.now() task.completionDate = GtasksApiUtilities.gtasksCompletedTimeToUnixTime(gtask.completed?.let(::DateTime)) val dueDate = GtasksApiUtilities.gtasksDueTimeToUnixTime(gtask.due?.let(::DateTime)) @@ -360,6 +353,12 @@ class GoogleTaskSynchronizer @Inject constructor( googleTaskListDao.insertOrReplace(list) } + private suspend fun setOrderAndParent(googleTask: GoogleTask, task: Task) { + task.position?.toLongOrNull()?.let { googleTask.remoteOrder = it } + googleTask.remoteParent = task.parent?.takeIf { it.isNotBlank() } + googleTask.parent = googleTask.remoteParent?.let { googleTaskDao.getTask(it) } ?: 0L + } + private suspend fun write(task: com.todoroo.astrid.data.Task?, googleTask: GoogleTask) { if (!(isNullOrEmpty(task!!.title) && isNullOrEmpty(task.notes))) { task.suppressSync()