From 5c6d10e4ef83e39c0c47435f01741794637acf28 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 8 Mar 2018 11:07:36 -0600 Subject: [PATCH] Add caldav accounts and tasks to backup --- .../java/com/todoroo/astrid/dao/Database.java | 2 + .../org/tasks/backup/BackupContainer.java | 11 +++- .../org/tasks/backup/TasksJsonExporter.java | 11 +++- .../org/tasks/backup/TasksJsonImporter.java | 16 ++++- .../main/java/org/tasks/data/CaldavDao.java | 58 +++++++++++++++++++ .../tasks/injection/ApplicationModule.java | 7 +++ 6 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/org/tasks/data/CaldavDao.java diff --git a/app/src/main/java/com/todoroo/astrid/dao/Database.java b/app/src/main/java/com/todoroo/astrid/dao/Database.java index d09b2a529..508fa4f31 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/Database.java +++ b/app/src/main/java/com/todoroo/astrid/dao/Database.java @@ -15,6 +15,7 @@ import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracking; import org.tasks.data.Alarm; import org.tasks.data.AlarmDao; +import org.tasks.data.CaldavDao; import org.tasks.data.CaldavTask; import org.tasks.data.CaldavAccount; import org.tasks.data.Filter; @@ -80,6 +81,7 @@ public abstract class Database extends RoomDatabase { public abstract FilterDao getFilterDao(); public abstract GoogleTaskListDao getGoogleTaskListDao(); public abstract TaskDao getTaskDao(); + public abstract CaldavDao getCaldavDao(); public static final String NAME = "database"; diff --git a/app/src/main/java/org/tasks/backup/BackupContainer.java b/app/src/main/java/org/tasks/backup/BackupContainer.java index 4f735afe2..7c2968ad6 100644 --- a/app/src/main/java/org/tasks/backup/BackupContainer.java +++ b/app/src/main/java/org/tasks/backup/BackupContainer.java @@ -3,6 +3,8 @@ package org.tasks.backup; import com.todoroo.astrid.data.Task; import org.tasks.data.Alarm; +import org.tasks.data.CaldavAccount; +import org.tasks.data.CaldavTask; import org.tasks.data.Filter; import org.tasks.data.GoogleTask; import org.tasks.data.GoogleTaskList; @@ -19,12 +21,15 @@ public class BackupContainer { List tags; List filters; List googleTaskLists; + List caldavAccounts; - BackupContainer(List tasks, List tags, List filters, List googleTaskLists) { + BackupContainer(List tasks, List tags, List filters, + List googleTaskLists, List caldavAccounts) { this.tasks = tasks; this.tags = tags; this.filters = filters; this.googleTaskLists = googleTaskLists; + this.caldavAccounts = caldavAccounts; } static class TaskBackup { @@ -34,15 +39,17 @@ public class BackupContainer { List tags; List google; List comments; + List caldavTasks; TaskBackup(Task task, List alarms, List locations, List tags, - List google, List comments) { + List google, List comments, List caldavTasks) { this.task = task; this.alarms = alarms; this.locations = locations; this.tags = tags; this.google = google; this.comments = comments; + this.caldavTasks = caldavTasks; } } } diff --git a/app/src/main/java/org/tasks/backup/TasksJsonExporter.java b/app/src/main/java/org/tasks/backup/TasksJsonExporter.java index 05e1d05ef..6f346f74d 100755 --- a/app/src/main/java/org/tasks/backup/TasksJsonExporter.java +++ b/app/src/main/java/org/tasks/backup/TasksJsonExporter.java @@ -18,6 +18,7 @@ import com.todoroo.astrid.data.Task; import org.tasks.BuildConfig; import org.tasks.R; import org.tasks.data.AlarmDao; +import org.tasks.data.CaldavDao; import org.tasks.data.FilterDao; import org.tasks.data.GoogleTaskDao; import org.tasks.data.GoogleTaskListDao; @@ -63,6 +64,7 @@ public class TasksJsonExporter { private final GoogleTaskDao googleTaskDao; private final FilterDao filterDao; private final GoogleTaskListDao googleTaskListDao; + private final CaldavDao caldavDao; private final TaskDao taskDao; private final UserActivityDao userActivityDao; private final Preferences preferences; @@ -92,7 +94,7 @@ public class TasksJsonExporter { public TasksJsonExporter(TagDataDao tagDataDao, TaskDao taskDao, UserActivityDao userActivityDao, Preferences preferences, AlarmDao alarmDao, LocationDao locationDao, TagDao tagDao, GoogleTaskDao googleTaskDao, FilterDao filterDao, - GoogleTaskListDao googleTaskListDao) { + GoogleTaskListDao googleTaskListDao, CaldavDao caldavDao) { this.tagDataDao = tagDataDao; this.taskDao = taskDao; this.userActivityDao = userActivityDao; @@ -103,6 +105,7 @@ public class TasksJsonExporter { this.googleTaskDao = googleTaskDao; this.filterDao = filterDao; this.googleTaskListDao = googleTaskListDao; + this.caldavDao = caldavDao; } public void exportTasks(final Context context, final ExportType exportType, @Nullable final ProgressDialog progressDialog) { @@ -155,7 +158,8 @@ public class TasksJsonExporter { locationDao.getGeofences(taskId), tagDao.getTagsForTask(taskId), googleTaskDao.getAllByTaskId(taskId), - userActivityDao.getCommentsForTask(task.getUuid()))); + userActivityDao.getCommentsForTask(task.getUuid()), + caldavDao.getTasks(taskId))); } Map data = new HashMap<>(); @@ -165,7 +169,8 @@ public class TasksJsonExporter { taskBackups, tagDataDao.getAll(), filterDao.getAll(), - googleTaskListDao.getAll())); + googleTaskListDao.getAll(), + caldavDao.getAccounts())); File file = new File(output); file.createNewFile(); diff --git a/app/src/main/java/org/tasks/backup/TasksJsonImporter.java b/app/src/main/java/org/tasks/backup/TasksJsonImporter.java index eb23e4e07..ce98b4842 100644 --- a/app/src/main/java/org/tasks/backup/TasksJsonImporter.java +++ b/app/src/main/java/org/tasks/backup/TasksJsonImporter.java @@ -17,6 +17,9 @@ import org.tasks.LocalBroadcastManager; import org.tasks.R; import org.tasks.data.Alarm; import org.tasks.data.AlarmDao; +import org.tasks.data.CaldavAccount; +import org.tasks.data.CaldavDao; +import org.tasks.data.CaldavTask; import org.tasks.data.Filter; import org.tasks.data.FilterDao; import org.tasks.data.GoogleTask; @@ -53,6 +56,7 @@ public class TasksJsonImporter { private final GoogleTaskDao googleTaskDao; private final GoogleTaskListDao googleTaskListDao; private final FilterDao filterDao; + private final CaldavDao caldavDao; private final LocationDao locationDao; private Activity activity; @@ -73,7 +77,7 @@ public class TasksJsonImporter { DialogBuilder dialogBuilder, TaskDao taskDao, LocationDao locationDao, LocalBroadcastManager localBroadcastManager, AlarmDao alarmDao, TagDao tagDao, GoogleTaskDao googleTaskDao, GoogleTaskListDao googleTaskListDao, - FilterDao filterDao) { + FilterDao filterDao, CaldavDao caldavDao) { this.tagDataDao = tagDataDao; this.userActivityDao = userActivityDao; this.dialogBuilder = dialogBuilder; @@ -85,6 +89,7 @@ public class TasksJsonImporter { this.googleTaskDao = googleTaskDao; this.googleTaskListDao = googleTaskListDao; this.filterDao = filterDao; + this.caldavDao = caldavDao; } public void importTasks(Activity activity, String input, ProgressDialog progressDialog) { @@ -128,6 +133,11 @@ public class TasksJsonImporter { filterDao.insert(filter); } } + for (CaldavAccount account : backupContainer.caldavAccounts) { + if (caldavDao.getAccountByName(account.getName()) == null) { + caldavDao.insert(account); + } + } for (BackupContainer.TaskBackup backup : backupContainer.tasks) { taskCount++; setProgressMessage(activity.getString(R.string.import_progress_read, taskCount)); @@ -160,6 +170,10 @@ public class TasksJsonImporter { location.setTask(taskId); locationDao.insert(location); } + for (CaldavTask caldavTask : backup.caldavTasks) { + caldavTask.setTask(taskId); + caldavDao.insert(caldavTask); + } importCount++; } } finally { diff --git a/app/src/main/java/org/tasks/data/CaldavDao.java b/app/src/main/java/org/tasks/data/CaldavDao.java new file mode 100644 index 000000000..700333a2b --- /dev/null +++ b/app/src/main/java/org/tasks/data/CaldavDao.java @@ -0,0 +1,58 @@ +package org.tasks.data; + +import android.arch.persistence.room.Dao; +import android.arch.persistence.room.Delete; +import android.arch.persistence.room.Insert; +import android.arch.persistence.room.Query; +import android.arch.persistence.room.Update; + +import java.util.List; + +@Dao +public interface CaldavDao { + + @Query("SELECT * FROM caldav_account WHERE name = :name COLLATE NOCASE LIMIT 1") + CaldavAccount getAccountByName(String name); + + @Query("SELECT * FROM caldav_account WHERE uuid = :uuid LIMIT 1") + CaldavAccount getByUuid(String uuid); + + @Query("SELECT * FROM caldav_account WHERE deleted = 0 ORDER BY UPPER(name) ASC") + List getAllOrderedByName(); + + @Insert + void insert(CaldavAccount caldavAccount); + + @Update + void update(CaldavAccount caldavAccount); + + @Query("UPDATE caldav_account SET deleted = (strftime('%s','now')*1000) WHERE uuid = :uuid") + void markAccountDeleted(String uuid); + + @Insert + void insert(CaldavTask caldavTask); + + @Update + void update(CaldavTask caldavTask); + + @Delete + void delete(CaldavTask caldavTask); + + @Query("SELECT * FROM caldav_tasks WHERE task = :taskId AND deleted > 0 AND account = :account") + List getDeleted(long taskId, String account); + + @Query("SELECT * FROM caldav_tasks WHERE task = :taskId AND deleted = 0 LIMIT 1") + CaldavTask getTask(long taskId); + + @Query("SELECT * FROM caldav_tasks WHERE remote_id = :remoteId LIMIT 1") + CaldavTask getTask(String remoteId); + + @Query("DELETE FROM caldav_tasks WHERE task = :taskId") + void deleteById(long taskId); + + @Query("SELECT * FROM caldav_tasks WHERE task = :taskId") + List getTasks(long taskId); + + @Query("SELECT * FROM caldav_account") + List getAccounts(); +} diff --git a/app/src/main/java/org/tasks/injection/ApplicationModule.java b/app/src/main/java/org/tasks/injection/ApplicationModule.java index c9fcbd136..3113c13fc 100644 --- a/app/src/main/java/org/tasks/injection/ApplicationModule.java +++ b/app/src/main/java/org/tasks/injection/ApplicationModule.java @@ -10,6 +10,7 @@ import com.todoroo.astrid.provider.Astrid2TaskProvider; import org.tasks.ErrorReportingSingleThreadExecutor; import org.tasks.analytics.Tracker; import org.tasks.data.AlarmDao; +import org.tasks.data.CaldavDao; import org.tasks.data.FilterDao; import org.tasks.data.GoogleTaskDao; import org.tasks.data.GoogleTaskListDao; @@ -133,6 +134,12 @@ public class ApplicationModule { return database.getGoogleTaskListDao(); } + @Provides + @ApplicationScope + public CaldavDao getCaldavDao(Database database) { + return database.getCaldavDao(); + } + @Provides @ApplicationScope public TaskDao getTaskDao(Database database) {