Fix subtasks after importing backup file

gtask_related_email
Alex Baker 6 years ago
parent b5a85e44bb
commit c91ebff147

@ -3,7 +3,6 @@ package com.todoroo.astrid.service;
import static com.google.common.base.Strings.isNullOrEmpty; import static com.google.common.base.Strings.isNullOrEmpty;
import static com.google.common.collect.Iterables.transform; import static com.google.common.collect.Iterables.transform;
import static com.google.common.collect.Lists.newArrayList; 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.caldav.CaldavUtils.applyRelatedTo;
import static org.tasks.db.DbUtils.batch; import static org.tasks.db.DbUtils.batch;
@ -130,10 +129,7 @@ public class Upgrader {
} }
caldavDao.update(updated); caldavDao.update(updated);
caldavDao.updateParents();
for (String calendar : newHashSet(transform(updated, CaldavTask::getCalendar))) {
caldavDao.updateParents(calendar);
}
} }
private void applyCaldavCategories() { private void applyCaldavCategories() {

@ -236,6 +236,10 @@ public class TasksJsonImporter {
} }
importCount++; importCount++;
} }
googleTaskDao.updateParents();
caldavDao.updateParents();
for (Entry<String, Integer> entry : backupContainer.getIntPrefs().entrySet()) { for (Entry<String, Integer> entry : backupContainer.getIntPrefs().entrySet()) {
preferences.setInt(entry.getKey(), entry.getValue()); preferences.setInt(entry.getKey(), entry.getValue());
} }

@ -123,6 +123,17 @@ public abstract class CaldavDao {
+ "GROUP BY tasks._id") + "GROUP BY tasks._id")
public abstract List<Long> getTasksWithTags(); public abstract List<Long> 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 != ''") @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); public abstract void updateParents(String calendar);

@ -30,10 +30,10 @@ public class CaldavTask {
@PrimaryKey(autoGenerate = true) @PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "cd_id") @ColumnInfo(name = "cd_id")
private long id; private transient long id;
@ColumnInfo(name = "cd_task") @ColumnInfo(name = "cd_task")
private long task; private transient long task;
@ColumnInfo(name = "cd_calendar") @ColumnInfo(name = "cd_calendar")
private String calendar; private String calendar;
@ -57,7 +57,7 @@ public class CaldavTask {
private String vtodo; private String vtodo;
@ColumnInfo(name = "cd_parent") @ColumnInfo(name = "cd_parent")
private long parent; private transient long parent;
@ColumnInfo(name = "cd_remote_parent") @ColumnInfo(name = "cd_remote_parent")
private String remoteParent; private String remoteParent;

@ -43,16 +43,16 @@ public class GoogleTask {
private String listId = ""; private String listId = "";
@ColumnInfo(name = "gt_parent") @ColumnInfo(name = "gt_parent")
private long parent; private transient long parent;
@ColumnInfo(name = "gt_remote_parent") @ColumnInfo(name = "gt_remote_parent")
private String remoteParent; private String remoteParent;
@ColumnInfo(name = "gt_moved") @ColumnInfo(name = "gt_moved")
private boolean moved; private transient boolean moved;
@ColumnInfo(name = "gt_order") @ColumnInfo(name = "gt_order")
private long order; private transient long order;
@ColumnInfo(name = "gt_remote_order") @ColumnInfo(name = "gt_remote_order")
private long remoteOrder; private long remoteOrder;

@ -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") "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<GoogleTask> getByRemoteOrder(String listId); abstract List<GoogleTask> 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( @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 != ''") "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); abstract void updateParents(String listId);

Loading…
Cancel
Save