From c91ebff14702e673ca5965ac9e98cd768ffb67f8 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 14 Nov 2019 15:48:49 -0600 Subject: [PATCH] Fix subtasks after importing backup file --- .../java/com/todoroo/astrid/service/Upgrader.java | 6 +----- .../main/java/org/tasks/backup/TasksJsonImporter.java | 4 ++++ app/src/main/java/org/tasks/data/CaldavDao.java | 11 +++++++++++ app/src/main/java/org/tasks/data/CaldavTask.java | 6 +++--- app/src/main/java/org/tasks/data/GoogleTask.java | 6 +++--- app/src/main/java/org/tasks/data/GoogleTaskDao.java | 11 +++++++++++ 6 files changed, 33 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/service/Upgrader.java b/app/src/main/java/com/todoroo/astrid/service/Upgrader.java index bf93cbe40..9f51fe627 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.java +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.java @@ -3,7 +3,6 @@ package com.todoroo.astrid.service; import static com.google.common.base.Strings.isNullOrEmpty; import static com.google.common.collect.Iterables.transform; import static com.google.common.collect.Lists.newArrayList; -import static com.google.common.collect.Sets.newHashSet; import static org.tasks.caldav.CaldavUtils.applyRelatedTo; import static org.tasks.db.DbUtils.batch; @@ -130,10 +129,7 @@ public class Upgrader { } caldavDao.update(updated); - - for (String calendar : newHashSet(transform(updated, CaldavTask::getCalendar))) { - caldavDao.updateParents(calendar); - } + caldavDao.updateParents(); } private void applyCaldavCategories() { diff --git a/app/src/main/java/org/tasks/backup/TasksJsonImporter.java b/app/src/main/java/org/tasks/backup/TasksJsonImporter.java index 580dddb9d..d417b03fa 100644 --- a/app/src/main/java/org/tasks/backup/TasksJsonImporter.java +++ b/app/src/main/java/org/tasks/backup/TasksJsonImporter.java @@ -236,6 +236,10 @@ public class TasksJsonImporter { } importCount++; } + + googleTaskDao.updateParents(); + caldavDao.updateParents(); + for (Entry entry : backupContainer.getIntPrefs().entrySet()) { preferences.setInt(entry.getKey(), entry.getValue()); } diff --git a/app/src/main/java/org/tasks/data/CaldavDao.java b/app/src/main/java/org/tasks/data/CaldavDao.java index 18b1009a9..cb46447bf 100644 --- a/app/src/main/java/org/tasks/data/CaldavDao.java +++ b/app/src/main/java/org/tasks/data/CaldavDao.java @@ -123,6 +123,17 @@ public abstract class CaldavDao { + "GROUP BY tasks._id") public abstract List getTasksWithTags(); + @Query( + "UPDATE caldav_tasks" + + " SET cd_parent = IFNULL((" + + " SELECT cd_task FROM caldav_tasks AS p " + + " WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent" + + " AND p.cd_calendar = caldav_tasks.cd_calendar" + + " AND p.cd_deleted = 0)," + + " 0)" + + " WHERE cd_remote_parent IS NOT NULL AND cd_remote_parent != ''") + public abstract void updateParents(); + @Query("UPDATE caldav_tasks SET cd_parent = IFNULL((SELECT cd_task FROM caldav_tasks AS p WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent), 0) WHERE cd_calendar = :calendar AND cd_remote_parent IS NOT NULL and cd_remote_parent != ''") public abstract void updateParents(String calendar); diff --git a/app/src/main/java/org/tasks/data/CaldavTask.java b/app/src/main/java/org/tasks/data/CaldavTask.java index 54b2ff8f8..e5c518c3d 100644 --- a/app/src/main/java/org/tasks/data/CaldavTask.java +++ b/app/src/main/java/org/tasks/data/CaldavTask.java @@ -30,10 +30,10 @@ public class CaldavTask { @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "cd_id") - private long id; + private transient long id; @ColumnInfo(name = "cd_task") - private long task; + private transient long task; @ColumnInfo(name = "cd_calendar") private String calendar; @@ -57,7 +57,7 @@ public class CaldavTask { private String vtodo; @ColumnInfo(name = "cd_parent") - private long parent; + private transient long parent; @ColumnInfo(name = "cd_remote_parent") private String remoteParent; diff --git a/app/src/main/java/org/tasks/data/GoogleTask.java b/app/src/main/java/org/tasks/data/GoogleTask.java index 70b4db417..734c1c719 100644 --- a/app/src/main/java/org/tasks/data/GoogleTask.java +++ b/app/src/main/java/org/tasks/data/GoogleTask.java @@ -43,16 +43,16 @@ public class GoogleTask { private String listId = ""; @ColumnInfo(name = "gt_parent") - private long parent; + private transient long parent; @ColumnInfo(name = "gt_remote_parent") private String remoteParent; @ColumnInfo(name = "gt_moved") - private boolean moved; + private transient boolean moved; @ColumnInfo(name = "gt_order") - private long order; + private transient long order; @ColumnInfo(name = "gt_remote_order") private long remoteOrder; diff --git a/app/src/main/java/org/tasks/data/GoogleTaskDao.java b/app/src/main/java/org/tasks/data/GoogleTaskDao.java index 1f59581c4..53cf8be3f 100644 --- a/app/src/main/java/org/tasks/data/GoogleTaskDao.java +++ b/app/src/main/java/org/tasks/data/GoogleTaskDao.java @@ -128,6 +128,17 @@ public abstract class GoogleTaskDao { "SELECT google_tasks.*, gt_remote_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_remote_order AS primary_sort, c.gt_remote_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") abstract List getByRemoteOrder(String listId); + @Query( + "UPDATE google_tasks" + + " SET gt_parent = IFNULL((" + + " SELECT gt_task FROM google_tasks AS p" + + " WHERE p.gt_remote_id = google_tasks.gt_remote_parent" + + " AND p.gt_list_id = google_tasks.gt_list_id " + + " AND p.gt_deleted = 0)," + + " gt_parent)" + + " WHERE gt_moved = 0 AND gt_remote_parent IS NOT NULL AND gt_remote_parent != ''") + public abstract void updateParents(); + @Query( "UPDATE google_tasks SET gt_parent = IFNULL((SELECT gt_task FROM google_tasks AS p WHERE p.gt_remote_id = google_tasks.gt_remote_parent), gt_parent) WHERE gt_list_id = :listId AND gt_moved = 0 AND gt_remote_parent IS NOT NULL AND gt_remote_parent != ''") abstract void updateParents(String listId);