Add caldav accounts and tasks to backup

pull/645/head
Alex Baker 6 years ago
parent 104c93053e
commit 5c6d10e4ef

@ -15,6 +15,7 @@ import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking; import org.tasks.analytics.Tracking;
import org.tasks.data.Alarm; import org.tasks.data.Alarm;
import org.tasks.data.AlarmDao; import org.tasks.data.AlarmDao;
import org.tasks.data.CaldavDao;
import org.tasks.data.CaldavTask; import org.tasks.data.CaldavTask;
import org.tasks.data.CaldavAccount; import org.tasks.data.CaldavAccount;
import org.tasks.data.Filter; import org.tasks.data.Filter;
@ -80,6 +81,7 @@ public abstract class Database extends RoomDatabase {
public abstract FilterDao getFilterDao(); public abstract FilterDao getFilterDao();
public abstract GoogleTaskListDao getGoogleTaskListDao(); public abstract GoogleTaskListDao getGoogleTaskListDao();
public abstract TaskDao getTaskDao(); public abstract TaskDao getTaskDao();
public abstract CaldavDao getCaldavDao();
public static final String NAME = "database"; public static final String NAME = "database";

@ -3,6 +3,8 @@ package org.tasks.backup;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import org.tasks.data.Alarm; import org.tasks.data.Alarm;
import org.tasks.data.CaldavAccount;
import org.tasks.data.CaldavTask;
import org.tasks.data.Filter; import org.tasks.data.Filter;
import org.tasks.data.GoogleTask; import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskList; import org.tasks.data.GoogleTaskList;
@ -19,12 +21,15 @@ public class BackupContainer {
List<TagData> tags; List<TagData> tags;
List<Filter> filters; List<Filter> filters;
List<GoogleTaskList> googleTaskLists; List<GoogleTaskList> googleTaskLists;
List<CaldavAccount> caldavAccounts;
BackupContainer(List<TaskBackup> tasks, List<TagData> tags, List<Filter> filters, List<GoogleTaskList> googleTaskLists) { BackupContainer(List<TaskBackup> tasks, List<TagData> tags, List<Filter> filters,
List<GoogleTaskList> googleTaskLists, List<CaldavAccount> caldavAccounts) {
this.tasks = tasks; this.tasks = tasks;
this.tags = tags; this.tags = tags;
this.filters = filters; this.filters = filters;
this.googleTaskLists = googleTaskLists; this.googleTaskLists = googleTaskLists;
this.caldavAccounts = caldavAccounts;
} }
static class TaskBackup { static class TaskBackup {
@ -34,15 +39,17 @@ public class BackupContainer {
List<Tag> tags; List<Tag> tags;
List<GoogleTask> google; List<GoogleTask> google;
List<UserActivity> comments; List<UserActivity> comments;
List<CaldavTask> caldavTasks;
TaskBackup(Task task, List<Alarm> alarms, List<Location> locations, List<Tag> tags, TaskBackup(Task task, List<Alarm> alarms, List<Location> locations, List<Tag> tags,
List<GoogleTask> google, List<UserActivity> comments) { List<GoogleTask> google, List<UserActivity> comments, List<CaldavTask> caldavTasks) {
this.task = task; this.task = task;
this.alarms = alarms; this.alarms = alarms;
this.locations = locations; this.locations = locations;
this.tags = tags; this.tags = tags;
this.google = google; this.google = google;
this.comments = comments; this.comments = comments;
this.caldavTasks = caldavTasks;
} }
} }
} }

@ -18,6 +18,7 @@ import com.todoroo.astrid.data.Task;
import org.tasks.BuildConfig; import org.tasks.BuildConfig;
import org.tasks.R; import org.tasks.R;
import org.tasks.data.AlarmDao; import org.tasks.data.AlarmDao;
import org.tasks.data.CaldavDao;
import org.tasks.data.FilterDao; import org.tasks.data.FilterDao;
import org.tasks.data.GoogleTaskDao; import org.tasks.data.GoogleTaskDao;
import org.tasks.data.GoogleTaskListDao; import org.tasks.data.GoogleTaskListDao;
@ -63,6 +64,7 @@ public class TasksJsonExporter {
private final GoogleTaskDao googleTaskDao; private final GoogleTaskDao googleTaskDao;
private final FilterDao filterDao; private final FilterDao filterDao;
private final GoogleTaskListDao googleTaskListDao; private final GoogleTaskListDao googleTaskListDao;
private final CaldavDao caldavDao;
private final TaskDao taskDao; private final TaskDao taskDao;
private final UserActivityDao userActivityDao; private final UserActivityDao userActivityDao;
private final Preferences preferences; private final Preferences preferences;
@ -92,7 +94,7 @@ public class TasksJsonExporter {
public TasksJsonExporter(TagDataDao tagDataDao, TaskDao taskDao, UserActivityDao userActivityDao, public TasksJsonExporter(TagDataDao tagDataDao, TaskDao taskDao, UserActivityDao userActivityDao,
Preferences preferences, AlarmDao alarmDao, LocationDao locationDao, Preferences preferences, AlarmDao alarmDao, LocationDao locationDao,
TagDao tagDao, GoogleTaskDao googleTaskDao, FilterDao filterDao, TagDao tagDao, GoogleTaskDao googleTaskDao, FilterDao filterDao,
GoogleTaskListDao googleTaskListDao) { GoogleTaskListDao googleTaskListDao, CaldavDao caldavDao) {
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;
this.taskDao = taskDao; this.taskDao = taskDao;
this.userActivityDao = userActivityDao; this.userActivityDao = userActivityDao;
@ -103,6 +105,7 @@ public class TasksJsonExporter {
this.googleTaskDao = googleTaskDao; this.googleTaskDao = googleTaskDao;
this.filterDao = filterDao; this.filterDao = filterDao;
this.googleTaskListDao = googleTaskListDao; this.googleTaskListDao = googleTaskListDao;
this.caldavDao = caldavDao;
} }
public void exportTasks(final Context context, final ExportType exportType, @Nullable final ProgressDialog progressDialog) { public void exportTasks(final Context context, final ExportType exportType, @Nullable final ProgressDialog progressDialog) {
@ -155,7 +158,8 @@ public class TasksJsonExporter {
locationDao.getGeofences(taskId), locationDao.getGeofences(taskId),
tagDao.getTagsForTask(taskId), tagDao.getTagsForTask(taskId),
googleTaskDao.getAllByTaskId(taskId), googleTaskDao.getAllByTaskId(taskId),
userActivityDao.getCommentsForTask(task.getUuid()))); userActivityDao.getCommentsForTask(task.getUuid()),
caldavDao.getTasks(taskId)));
} }
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
@ -165,7 +169,8 @@ public class TasksJsonExporter {
taskBackups, taskBackups,
tagDataDao.getAll(), tagDataDao.getAll(),
filterDao.getAll(), filterDao.getAll(),
googleTaskListDao.getAll())); googleTaskListDao.getAll(),
caldavDao.getAccounts()));
File file = new File(output); File file = new File(output);
file.createNewFile(); file.createNewFile();

@ -17,6 +17,9 @@ import org.tasks.LocalBroadcastManager;
import org.tasks.R; import org.tasks.R;
import org.tasks.data.Alarm; import org.tasks.data.Alarm;
import org.tasks.data.AlarmDao; 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.Filter;
import org.tasks.data.FilterDao; import org.tasks.data.FilterDao;
import org.tasks.data.GoogleTask; import org.tasks.data.GoogleTask;
@ -53,6 +56,7 @@ public class TasksJsonImporter {
private final GoogleTaskDao googleTaskDao; private final GoogleTaskDao googleTaskDao;
private final GoogleTaskListDao googleTaskListDao; private final GoogleTaskListDao googleTaskListDao;
private final FilterDao filterDao; private final FilterDao filterDao;
private final CaldavDao caldavDao;
private final LocationDao locationDao; private final LocationDao locationDao;
private Activity activity; private Activity activity;
@ -73,7 +77,7 @@ public class TasksJsonImporter {
DialogBuilder dialogBuilder, TaskDao taskDao, LocationDao locationDao, DialogBuilder dialogBuilder, TaskDao taskDao, LocationDao locationDao,
LocalBroadcastManager localBroadcastManager, AlarmDao alarmDao, LocalBroadcastManager localBroadcastManager, AlarmDao alarmDao,
TagDao tagDao, GoogleTaskDao googleTaskDao, GoogleTaskListDao googleTaskListDao, TagDao tagDao, GoogleTaskDao googleTaskDao, GoogleTaskListDao googleTaskListDao,
FilterDao filterDao) { FilterDao filterDao, CaldavDao caldavDao) {
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;
this.userActivityDao = userActivityDao; this.userActivityDao = userActivityDao;
this.dialogBuilder = dialogBuilder; this.dialogBuilder = dialogBuilder;
@ -85,6 +89,7 @@ public class TasksJsonImporter {
this.googleTaskDao = googleTaskDao; this.googleTaskDao = googleTaskDao;
this.googleTaskListDao = googleTaskListDao; this.googleTaskListDao = googleTaskListDao;
this.filterDao = filterDao; this.filterDao = filterDao;
this.caldavDao = caldavDao;
} }
public void importTasks(Activity activity, String input, ProgressDialog progressDialog) { public void importTasks(Activity activity, String input, ProgressDialog progressDialog) {
@ -128,6 +133,11 @@ public class TasksJsonImporter {
filterDao.insert(filter); filterDao.insert(filter);
} }
} }
for (CaldavAccount account : backupContainer.caldavAccounts) {
if (caldavDao.getAccountByName(account.getName()) == null) {
caldavDao.insert(account);
}
}
for (BackupContainer.TaskBackup backup : backupContainer.tasks) { for (BackupContainer.TaskBackup backup : backupContainer.tasks) {
taskCount++; taskCount++;
setProgressMessage(activity.getString(R.string.import_progress_read, taskCount)); setProgressMessage(activity.getString(R.string.import_progress_read, taskCount));
@ -160,6 +170,10 @@ public class TasksJsonImporter {
location.setTask(taskId); location.setTask(taskId);
locationDao.insert(location); locationDao.insert(location);
} }
for (CaldavTask caldavTask : backup.caldavTasks) {
caldavTask.setTask(taskId);
caldavDao.insert(caldavTask);
}
importCount++; importCount++;
} }
} finally { } finally {

@ -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<CaldavAccount> 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<CaldavTask> 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<CaldavTask> getTasks(long taskId);
@Query("SELECT * FROM caldav_account")
List<CaldavAccount> getAccounts();
}

@ -10,6 +10,7 @@ import com.todoroo.astrid.provider.Astrid2TaskProvider;
import org.tasks.ErrorReportingSingleThreadExecutor; import org.tasks.ErrorReportingSingleThreadExecutor;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
import org.tasks.data.AlarmDao; import org.tasks.data.AlarmDao;
import org.tasks.data.CaldavDao;
import org.tasks.data.FilterDao; import org.tasks.data.FilterDao;
import org.tasks.data.GoogleTaskDao; import org.tasks.data.GoogleTaskDao;
import org.tasks.data.GoogleTaskListDao; import org.tasks.data.GoogleTaskListDao;
@ -133,6 +134,12 @@ public class ApplicationModule {
return database.getGoogleTaskListDao(); return database.getGoogleTaskListDao();
} }
@Provides
@ApplicationScope
public CaldavDao getCaldavDao(Database database) {
return database.getCaldavDao();
}
@Provides @Provides
@ApplicationScope @ApplicationScope
public TaskDao getTaskDao(Database database) { public TaskDao getTaskDao(Database database) {

Loading…
Cancel
Save