Fix null pointer in google task sync

pull/1143/head
Alex Baker 4 years ago
parent 5da49d9ee1
commit 0cf3e4c413

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

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

Loading…
Cancel
Save