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.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";

@ -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<TagData> tags;
List<Filter> filters;
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.tags = tags;
this.filters = filters;
this.googleTaskLists = googleTaskLists;
this.caldavAccounts = caldavAccounts;
}
static class TaskBackup {
@ -34,15 +39,17 @@ public class BackupContainer {
List<Tag> tags;
List<GoogleTask> google;
List<UserActivity> comments;
List<CaldavTask> caldavTasks;
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.alarms = alarms;
this.locations = locations;
this.tags = tags;
this.google = google;
this.comments = comments;
this.caldavTasks = caldavTasks;
}
}
}

@ -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<String, Object> 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();

@ -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 {

@ -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.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) {

Loading…
Cancel
Save