From 3c5df292eee4a724d41134c7d11fb1bc22207fd5 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 3 Jul 2019 13:00:16 -0500 Subject: [PATCH] Rename database columns --- app/build.gradle.kts | 4 +- .../com.todoroo.astrid.dao.Database/64.json | 990 ++++++++++++++++++ .../com/todoroo/astrid/api/CaldavFilter.java | 6 +- .../java/com/todoroo/astrid/dao/Database.java | 2 +- .../java/com/todoroo/astrid/dao/TaskDao.java | 8 +- .../com/todoroo/astrid/service/Upgrader.java | 16 + .../java/org/tasks/data/CaldavAccount.java | 16 +- .../java/org/tasks/data/CaldavCalendar.java | 16 +- .../main/java/org/tasks/data/CaldavDao.java | 38 +- .../main/java/org/tasks/data/CaldavTask.java | 18 +- .../main/java/org/tasks/data/DeletionDao.java | 8 +- .../org/tasks/data/GoogleTaskAccount.java | 8 +- .../java/org/tasks/data/GoogleTaskList.java | 34 +- .../org/tasks/data/GoogleTaskListDao.java | 12 +- .../main/java/org/tasks/db/Migrations.java | 47 +- .../java/org/tasks/ui/TaskListViewModel.java | 8 +- 16 files changed, 1131 insertions(+), 100 deletions(-) create mode 100644 app/schemas/com.todoroo.astrid.dao.Database/64.json diff --git a/app/build.gradle.kts b/app/build.gradle.kts index bd1966f2d..c71f631d6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -25,8 +25,8 @@ android { defaultConfig { testApplicationId = "org.tasks.test" applicationId = "org.tasks" - versionCode = 591 - versionName = "6.7.1" + versionCode = 592 + versionName = "6.8.0" targetSdkVersion(Versions.compileSdk) minSdkVersion(Versions.minSdk) multiDexEnabled = true diff --git a/app/schemas/com.todoroo.astrid.dao.Database/64.json b/app/schemas/com.todoroo.astrid.dao.Database/64.json new file mode 100644 index 000000000..23b1ea666 --- /dev/null +++ b/app/schemas/com.todoroo.astrid.dao.Database/64.json @@ -0,0 +1,990 @@ +{ + "formatVersion": 1, + "database": { + "version": 64, + "identityHash": "d24b2db6e74861d39a229c3ad6ce2a70", + "entities": [ + { + "tableName": "notification", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `timestamp` INTEGER NOT NULL, `type` INTEGER NOT NULL, `location` INTEGER)", + "fields": [ + { + "fieldPath": "uid", + "columnName": "uid", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "taskId", + "columnName": "task", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "location", + "columnName": "location", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "uid" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_notification_task", + "unique": true, + "columnNames": [ + "task" + ], + "createSql": "CREATE UNIQUE INDEX `index_notification_task` ON `${TABLE_NAME}` (`task`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "tagdata", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `name` TEXT, `color` INTEGER, `tagOrdering` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "color", + "columnName": "color", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "tagOrdering", + "columnName": "tagOrdering", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "userActivity", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `message` TEXT, `picture` TEXT, `target_id` TEXT, `created_at` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "message", + "columnName": "message", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "picture", + "columnName": "picture", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "targetId", + "columnName": "target_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "created", + "columnName": "created_at", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "task_attachments", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `task_id` TEXT, `name` TEXT, `path` TEXT, `content_type` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "taskId", + "columnName": "task_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "uri", + "columnName": "path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "contentType", + "columnName": "content_type", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "task_list_metadata", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `tag_uuid` TEXT, `filter` TEXT, `task_ids` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "tagUuid", + "columnName": "tag_uuid", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "filter", + "columnName": "filter", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "taskIds", + "columnName": "task_ids", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "tasks", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `title` TEXT, `importance` INTEGER, `dueDate` INTEGER, `hideUntil` INTEGER, `created` INTEGER, `modified` INTEGER, `completed` INTEGER, `deleted` INTEGER, `notes` TEXT, `estimatedSeconds` INTEGER, `elapsedSeconds` INTEGER, `timerStart` INTEGER, `notificationFlags` INTEGER, `notifications` INTEGER, `lastNotified` INTEGER, `snoozeTime` INTEGER, `recurrence` TEXT, `repeatUntil` INTEGER, `calendarUri` TEXT, `remoteId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "priority", + "columnName": "importance", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dueDate", + "columnName": "dueDate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "hideUntil", + "columnName": "hideUntil", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "created", + "columnName": "created", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "modified", + "columnName": "modified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "completed", + "columnName": "completed", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "notes", + "columnName": "notes", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "estimatedSeconds", + "columnName": "estimatedSeconds", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "elapsedSeconds", + "columnName": "elapsedSeconds", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "timerStart", + "columnName": "timerStart", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "notificationFlags", + "columnName": "notificationFlags", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "notifications", + "columnName": "notifications", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastNotified", + "columnName": "lastNotified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "snoozeTime", + "columnName": "snoozeTime", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "recurrence", + "columnName": "recurrence", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "repeatUntil", + "columnName": "repeatUntil", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "calendarUri", + "columnName": "calendarUri", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "t_rid", + "unique": true, + "columnNames": [ + "remoteId" + ], + "createSql": "CREATE UNIQUE INDEX `t_rid` ON `${TABLE_NAME}` (`remoteId`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "alarms", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `time` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "task", + "columnName": "task", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "time", + "columnName": "time", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "places", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`place_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `uid` TEXT, `name` TEXT, `address` TEXT, `phone` TEXT, `url` TEXT, `latitude` REAL NOT NULL, `longitude` REAL NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "place_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "uid", + "columnName": "uid", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "address", + "columnName": "address", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "phone", + "columnName": "phone", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "latitude", + "columnName": "latitude", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "longitude", + "columnName": "longitude", + "affinity": "REAL", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "place_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "geofences", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`geofence_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `place` TEXT, `radius` INTEGER NOT NULL, `arrival` INTEGER NOT NULL, `departure` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "geofence_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "task", + "columnName": "task", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "place", + "columnName": "place", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radius", + "columnName": "radius", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "arrival", + "columnName": "arrival", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "departure", + "columnName": "departure", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "geofence_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "tags", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `name` TEXT, `tag_uid` TEXT, `task_uid` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "task", + "columnName": "task", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "tagUid", + "columnName": "tag_uid", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "taskUid", + "columnName": "task_uid", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "google_tasks", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`gt_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `gt_task` INTEGER NOT NULL, `gt_remote_id` TEXT, `gt_list_id` TEXT, `gt_parent` INTEGER NOT NULL, `gt_remote_parent` TEXT, `gt_moved` INTEGER NOT NULL, `gt_order` INTEGER NOT NULL, `gt_remote_order` INTEGER NOT NULL, `gt_last_sync` INTEGER NOT NULL, `gt_deleted` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "gt_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "task", + "columnName": "gt_task", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "remoteId", + "columnName": "gt_remote_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "listId", + "columnName": "gt_list_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "parent", + "columnName": "gt_parent", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "remoteParent", + "columnName": "gt_remote_parent", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "moved", + "columnName": "gt_moved", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "order", + "columnName": "gt_order", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "remoteOrder", + "columnName": "gt_remote_order", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "lastSync", + "columnName": "gt_last_sync", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "deleted", + "columnName": "gt_deleted", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "gt_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "filters", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `title` TEXT, `sql` TEXT, `values` TEXT, `criterion` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "sql", + "columnName": "sql", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "values", + "columnName": "values", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "criterion", + "columnName": "criterion", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "google_task_lists", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`gtl_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `gtl_account` TEXT, `gtl_remote_id` TEXT, `gtl_title` TEXT, `gtl_remote_order` INTEGER NOT NULL, `gtl_last_sync` INTEGER NOT NULL, `gtl_color` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "gtl_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "account", + "columnName": "gtl_account", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "gtl_remote_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "title", + "columnName": "gtl_title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "remoteOrder", + "columnName": "gtl_remote_order", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "lastSync", + "columnName": "gtl_last_sync", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "color", + "columnName": "gtl_color", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "gtl_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "caldav_lists", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`cdl_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `cdl_account` TEXT, `cdl_uuid` TEXT, `cdl_name` TEXT, `cdl_color` INTEGER NOT NULL, `cdl_ctag` TEXT, `cdl_url` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "cdl_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "account", + "columnName": "cdl_account", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "uuid", + "columnName": "cdl_uuid", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "cdl_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "color", + "columnName": "cdl_color", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "ctag", + "columnName": "cdl_ctag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "url", + "columnName": "cdl_url", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "cdl_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "caldav_tasks", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`cd_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `cd_task` INTEGER NOT NULL, `cd_calendar` TEXT, `cd_object` TEXT, `cd_remote_id` TEXT, `cd_etag` TEXT, `cd_last_sync` INTEGER NOT NULL, `cd_deleted` INTEGER NOT NULL, `cd_vtodo` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "cd_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "task", + "columnName": "cd_task", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "calendar", + "columnName": "cd_calendar", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "object", + "columnName": "cd_object", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "cd_remote_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "etag", + "columnName": "cd_etag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lastSync", + "columnName": "cd_last_sync", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "deleted", + "columnName": "cd_deleted", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "vtodo", + "columnName": "cd_vtodo", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "cd_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "caldav_accounts", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`cda_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `cda_uuid` TEXT, `cda_name` TEXT, `cda_url` TEXT, `cda_username` TEXT, `cda_password` TEXT, `cda_error` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "cda_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "uuid", + "columnName": "cda_uuid", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "cda_name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "url", + "columnName": "cda_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "username", + "columnName": "cda_username", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "password", + "columnName": "cda_password", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "error", + "columnName": "cda_error", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "cda_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "google_task_accounts", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`gta_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `gta_account` TEXT, `gta_error` TEXT, `gta_etag` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "gta_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "account", + "columnName": "gta_account", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "error", + "columnName": "gta_error", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "etag", + "columnName": "gta_etag", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "gta_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'd24b2db6e74861d39a229c3ad6ce2a70')" + ] + } +} \ No newline at end of file diff --git a/app/src/main/java/com/todoroo/astrid/api/CaldavFilter.java b/app/src/main/java/com/todoroo/astrid/api/CaldavFilter.java index 8fd04c3b1..bb2a97548 100644 --- a/app/src/main/java/com/todoroo/astrid/api/CaldavFilter.java +++ b/app/src/main/java/com/todoroo/astrid/api/CaldavFilter.java @@ -50,12 +50,12 @@ public class CaldavFilter extends Filter { private static QueryTemplate queryTemplate(CaldavCalendar caldavCalendar) { return new QueryTemplate() - .join(Join.left(CaldavTask.TABLE, Task.ID.eq(Field.field("caldav_tasks.task")))) + .join(Join.left(CaldavTask.TABLE, Task.ID.eq(Field.field("caldav_tasks.cd_task")))) .where( Criterion.and( TaskDao.TaskCriteria.activeAndVisible(), - Field.field("caldav_tasks.deleted").eq(0), - Field.field("caldav_tasks.calendar").eq(caldavCalendar.getUuid()))); + Field.field("caldav_tasks.cd_deleted").eq(0), + Field.field("caldav_tasks.cd_calendar").eq(caldavCalendar.getUuid()))); } private static Map getValuesForNewTask(CaldavCalendar caldavCalendar) { 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 dfd511880..50df0e364 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/Database.java +++ b/app/src/main/java/com/todoroo/astrid/dao/Database.java @@ -58,7 +58,7 @@ import org.tasks.notifications.NotificationDao; CaldavAccount.class, GoogleTaskAccount.class }, - version = 63) + version = 64) public abstract class Database extends RoomDatabase { public static final String NAME = "database"; diff --git a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java index 4ae1364f4..2b45865fa 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.java @@ -98,16 +98,16 @@ public abstract class TaskDao { @Query( "SELECT tasks.* FROM tasks " + "LEFT JOIN google_tasks ON tasks._id = google_tasks.gt_task " - + "WHERE gt_list_id IN (SELECT remote_id FROM google_task_lists WHERE account = :account)" + + "WHERE gt_list_id IN (SELECT gtl_remote_id FROM google_task_lists WHERE gtl_account = :account)" + "AND (tasks.modified > google_tasks.gt_last_sync OR google_tasks.gt_remote_id = '') " + "ORDER BY CASE WHEN gt_parent = 0 THEN 0 ELSE 1 END, gt_order ASC") public abstract List getGoogleTasksToPush(String account); @Query( "SELECT tasks.* FROM tasks " - + "LEFT JOIN caldav_tasks ON tasks._id = caldav_tasks.task " - + "WHERE caldav_tasks.calendar = :calendar " - + "AND tasks.modified > caldav_tasks.last_sync") + + "LEFT JOIN caldav_tasks ON tasks._id = caldav_tasks.cd_task " + + "WHERE caldav_tasks.cd_calendar = :calendar " + + "AND tasks.modified > caldav_tasks.cd_last_sync") public abstract List getCaldavTasksToPush(String calendar); @Query( 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 81664e2bf..6b83d1f3a 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.java +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.java @@ -41,6 +41,7 @@ public class Upgrader { private static final int V6_0_beta_2 = 523; private static final int V6_4 = 546; private static final int V6_7 = 585; + private static final int V6_8 = 592; private final Preferences preferences; private final Tracker tracker; private final TagDataDao tagDataDao; @@ -85,6 +86,7 @@ public class Upgrader { run(from, V6_0_beta_2, this::migrateGoogleTaskAccount); run(from, V6_4, this::migrateUris); run(from, V6_7, this::migrateGoogleTaskFilters); + run(from, V6_8, this::migrateCaldavFilters); tracker.reportEvent(Tracking.Events.UPGRADE, Integer.toString(from)); } preferences.setCurrentVersion(to); @@ -131,6 +133,14 @@ public class Upgrader { } } + private void migrateCaldavFilters() { + for (Filter filter : filterDao.getAll()) { + filter.setSql(migrateCaldavFilters(filter.getSql())); + filter.setCriterion(migrateCaldavFilters(filter.getCriterion())); + filterDao.update(filter); + } + } + private void migrateFilters() { for (Filter filter : filterDao.getFilters()) { filter.setSql(migrateMetadata(filter.getSql())); @@ -207,6 +217,12 @@ public class Upgrader { .replace("google_tasks.task", "google_tasks.gt_task"); } + private String migrateCaldavFilters(String input) { + return input + .replace("SELECT task FROM caldav_tasks", "SELECT cd_task as task FROM caldav_tasks") + .replace("(calendar", "(cd_calendar"); + } + private String migrateMetadata(String input) { return input .replaceAll( diff --git a/app/src/main/java/org/tasks/data/CaldavAccount.java b/app/src/main/java/org/tasks/data/CaldavAccount.java index 536d5209f..7353ffdd9 100644 --- a/app/src/main/java/org/tasks/data/CaldavAccount.java +++ b/app/src/main/java/org/tasks/data/CaldavAccount.java @@ -10,7 +10,7 @@ import androidx.room.Ignore; import androidx.room.PrimaryKey; import org.tasks.security.Encryption; -@Entity(tableName = "caldav_account") +@Entity(tableName = "caldav_accounts") public class CaldavAccount implements Parcelable { public static Parcelable.Creator CREATOR = @@ -28,25 +28,25 @@ public class CaldavAccount implements Parcelable { }; @PrimaryKey(autoGenerate = true) - @ColumnInfo(name = "_id") + @ColumnInfo(name = "cda_id") private long id; - @ColumnInfo(name = "uuid") + @ColumnInfo(name = "cda_uuid") private String uuid = NO_UUID; - @ColumnInfo(name = "name") + @ColumnInfo(name = "cda_name") private String name = ""; - @ColumnInfo(name = "url") + @ColumnInfo(name = "cda_url") private String url = ""; - @ColumnInfo(name = "username") + @ColumnInfo(name = "cda_username") private String username = ""; - @ColumnInfo(name = "password") + @ColumnInfo(name = "cda_password") private transient String password = ""; - @ColumnInfo(name = "error") + @ColumnInfo(name = "cda_error") private transient String error = ""; public CaldavAccount() {} diff --git a/app/src/main/java/org/tasks/data/CaldavCalendar.java b/app/src/main/java/org/tasks/data/CaldavCalendar.java index 45b096996..46dda2aab 100644 --- a/app/src/main/java/org/tasks/data/CaldavCalendar.java +++ b/app/src/main/java/org/tasks/data/CaldavCalendar.java @@ -9,7 +9,7 @@ import androidx.room.Entity; import androidx.room.Ignore; import androidx.room.PrimaryKey; -@Entity(tableName = "caldav_calendar") +@Entity(tableName = "caldav_lists") public final class CaldavCalendar implements Parcelable { public static Parcelable.Creator CREATOR = @@ -26,25 +26,25 @@ public final class CaldavCalendar implements Parcelable { }; @PrimaryKey(autoGenerate = true) - @ColumnInfo(name = "_id") + @ColumnInfo(name = "cdl_id") private long id; - @ColumnInfo(name = "account") + @ColumnInfo(name = "cdl_account") private String account = NO_UUID; - @ColumnInfo(name = "uuid") + @ColumnInfo(name = "cdl_uuid") private String uuid = NO_UUID; - @ColumnInfo(name = "name") + @ColumnInfo(name = "cdl_name") private String name = ""; - @ColumnInfo(name = "color") + @ColumnInfo(name = "cdl_color") private int color = -1; - @ColumnInfo(name = "ctag") + @ColumnInfo(name = "cdl_ctag") private String ctag; - @ColumnInfo(name = "url") + @ColumnInfo(name = "cdl_url") private String url = ""; public CaldavCalendar() {} diff --git a/app/src/main/java/org/tasks/data/CaldavDao.java b/app/src/main/java/org/tasks/data/CaldavDao.java index 9dc9b7a60..223261658 100644 --- a/app/src/main/java/org/tasks/data/CaldavDao.java +++ b/app/src/main/java/org/tasks/data/CaldavDao.java @@ -12,19 +12,19 @@ import java.util.List; @Dao public interface CaldavDao { - @Query("SELECT * FROM caldav_calendar") + @Query("SELECT * FROM caldav_lists") LiveData> subscribeToCalendars(); - @Query("SELECT * FROM caldav_calendar WHERE uuid = :uuid LIMIT 1") + @Query("SELECT * FROM caldav_lists WHERE cdl_uuid = :uuid LIMIT 1") CaldavCalendar getCalendarByUuid(String uuid); - @Query("SELECT * FROM caldav_account WHERE uuid = :uuid LIMIT 1") + @Query("SELECT * FROM caldav_accounts WHERE cda_uuid = :uuid LIMIT 1") CaldavAccount getAccountByUuid(String uuid); - @Query("SELECT COUNT(*) FROM caldav_account") + @Query("SELECT COUNT(*) FROM caldav_accounts") Single accountCount(); - @Query("SELECT * FROM caldav_account ORDER BY UPPER(name) ASC") + @Query("SELECT * FROM caldav_accounts ORDER BY UPPER(cda_name) ASC") List getAccounts(); @Insert @@ -51,46 +51,46 @@ public interface CaldavDao { @Delete void delete(CaldavTask caldavTask); - @Query("SELECT * FROM caldav_tasks WHERE deleted > 0 AND calendar = :calendar") + @Query("SELECT * FROM caldav_tasks WHERE cd_deleted > 0 AND cd_calendar = :calendar") List getDeleted(String calendar); - @Query("SELECT * FROM caldav_tasks WHERE task = :taskId AND deleted = 0 LIMIT 1") + @Query("SELECT * FROM caldav_tasks WHERE cd_task = :taskId AND cd_deleted = 0 LIMIT 1") CaldavTask getTask(long taskId); - @Query("SELECT * FROM caldav_tasks WHERE calendar = :calendar AND object = :object LIMIT 1") + @Query("SELECT * FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_object = :object LIMIT 1") CaldavTask getTask(String calendar, String object); - @Query("SELECT * FROM caldav_tasks WHERE task = :taskId") + @Query("SELECT * FROM caldav_tasks WHERE cd_task = :taskId") List getTasks(long taskId); - @Query("SELECT * FROM caldav_calendar ORDER BY name COLLATE NOCASE") + @Query("SELECT * FROM caldav_lists ORDER BY cdl_name COLLATE NOCASE") List getCalendars(); - @Query("SELECT * FROM caldav_calendar WHERE account = :account ORDER BY name COLLATE NOCASE") + @Query("SELECT * FROM caldav_lists WHERE cdl_account = :account ORDER BY cdl_name COLLATE NOCASE") List getCalendarsByAccount(String account); - @Query("SELECT * FROM caldav_calendar WHERE uuid = :uuid LIMIT 1") + @Query("SELECT * FROM caldav_lists WHERE cdl_uuid = :uuid LIMIT 1") CaldavCalendar getCalendar(String uuid); @Query( - "SELECT * FROM caldav_calendar WHERE account = :account AND name = :name COLLATE NOCASE LIMIT 1") + "SELECT * FROM caldav_lists WHERE cdl_account = :account AND cdl_name = :name COLLATE NOCASE LIMIT 1") CaldavCalendar getCalendar(String account, String name); - @Query("SELECT object FROM caldav_tasks WHERE calendar = :calendar") + @Query("SELECT cd_object FROM caldav_tasks WHERE cd_calendar = :calendar") List getObjects(String calendar); - @Query("SELECT task FROM caldav_tasks WHERE calendar = :calendar AND object IN (:objects)") + @Query("SELECT cd_task FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_object IN (:objects)") List getTasks(String calendar, List objects); - @Query("SELECT * FROM caldav_calendar WHERE account = :account AND url NOT IN (:urls)") + @Query("SELECT * FROM caldav_lists WHERE cdl_account = :account AND cdl_url NOT IN (:urls)") List findDeletedCalendars(String account, List urls); - @Query("SELECT * FROM caldav_calendar WHERE account = :account AND url = :url LIMIT 1") + @Query("SELECT * FROM caldav_lists WHERE cdl_account = :account AND cdl_url = :url LIMIT 1") CaldavCalendar getCalendarByUrl(String account, String url); - @Query("SELECT * FROM caldav_account WHERE name = :name COLLATE NOCASE LIMIT 1") + @Query("SELECT * FROM caldav_accounts WHERE cda_name = :name COLLATE NOCASE LIMIT 1") CaldavAccount getAccountByName(String name); - @Query("SELECT DISTINCT calendar FROM caldav_tasks WHERE deleted = 0 AND task IN (:tasks)") + @Query("SELECT DISTINCT cd_calendar FROM caldav_tasks WHERE cd_deleted = 0 AND cd_task IN (:tasks)") List getCalendars(List tasks); } diff --git a/app/src/main/java/org/tasks/data/CaldavTask.java b/app/src/main/java/org/tasks/data/CaldavTask.java index e7ed38891..386cebcd2 100644 --- a/app/src/main/java/org/tasks/data/CaldavTask.java +++ b/app/src/main/java/org/tasks/data/CaldavTask.java @@ -14,31 +14,31 @@ public class CaldavTask { @Deprecated public static final Table TABLE = new Table("caldav_tasks"); @PrimaryKey(autoGenerate = true) - @ColumnInfo(name = "_id") + @ColumnInfo(name = "cd_id") private long id; - @ColumnInfo(name = "task") + @ColumnInfo(name = "cd_task") private long task; - @ColumnInfo(name = "calendar") + @ColumnInfo(name = "cd_calendar") private String calendar; - @ColumnInfo(name = "object") + @ColumnInfo(name = "cd_object") private String object; - @ColumnInfo(name = "remote_id") + @ColumnInfo(name = "cd_remote_id") private String remoteId; - @ColumnInfo(name = "etag") + @ColumnInfo(name = "cd_etag") private String etag; - @ColumnInfo(name = "last_sync") + @ColumnInfo(name = "cd_last_sync") private long lastSync; - @ColumnInfo(name = "deleted") + @ColumnInfo(name = "cd_deleted") private long deleted; - @ColumnInfo(name = "vtodo") + @ColumnInfo(name = "cd_vtodo") private String vtodo; public CaldavTask() {} diff --git a/app/src/main/java/org/tasks/data/DeletionDao.java b/app/src/main/java/org/tasks/data/DeletionDao.java index eb37f0a67..77001c444 100644 --- a/app/src/main/java/org/tasks/data/DeletionDao.java +++ b/app/src/main/java/org/tasks/data/DeletionDao.java @@ -16,7 +16,7 @@ public abstract class DeletionDao { @Query("SELECT _id FROM tasks WHERE deleted > 0") public abstract List getDeleted(); - @Query("DELETE FROM caldav_tasks WHERE task IN(:ids)") + @Query("DELETE FROM caldav_tasks WHERE cd_task IN(:ids)") abstract void deleteCaldavTasks(List ids); @Query("DELETE FROM google_tasks WHERE gt_task IN(:ids)") @@ -73,7 +73,7 @@ public abstract class DeletionDao { @Delete abstract void deleteGoogleTaskAccount(GoogleTaskAccount googleTaskAccount); - @Query("SELECT * FROM google_task_lists WHERE account = :account ORDER BY title ASC") + @Query("SELECT * FROM google_task_lists WHERE gtl_account = :account ORDER BY gtl_title ASC") abstract List getLists(String account); @Transaction @@ -86,7 +86,7 @@ public abstract class DeletionDao { return deleted; } - @Query("SELECT task FROM caldav_tasks WHERE calendar = :calendar AND deleted = 0") + @Query("SELECT cd_task FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_deleted = 0") abstract List getActiveCaldavTasks(String calendar); @Delete @@ -100,7 +100,7 @@ public abstract class DeletionDao { return tasks; } - @Query("SELECT * FROM caldav_calendar WHERE account = :account") + @Query("SELECT * FROM caldav_lists WHERE cdl_account = :account") abstract List getCalendars(String account); @Delete diff --git a/app/src/main/java/org/tasks/data/GoogleTaskAccount.java b/app/src/main/java/org/tasks/data/GoogleTaskAccount.java index 2670019a0..7c7d9944e 100644 --- a/app/src/main/java/org/tasks/data/GoogleTaskAccount.java +++ b/app/src/main/java/org/tasks/data/GoogleTaskAccount.java @@ -23,16 +23,16 @@ public class GoogleTaskAccount implements Parcelable { }; @PrimaryKey(autoGenerate = true) - @ColumnInfo(name = "_id") + @ColumnInfo(name = "gta_id") private transient long id; - @ColumnInfo(name = "account") + @ColumnInfo(name = "gta_account") private String account; - @ColumnInfo(name = "error") + @ColumnInfo(name = "gta_error") private transient String error = ""; - @ColumnInfo(name = "etag") + @ColumnInfo(name = "gta_etag") private String etag; public GoogleTaskAccount() {} diff --git a/app/src/main/java/org/tasks/data/GoogleTaskList.java b/app/src/main/java/org/tasks/data/GoogleTaskList.java index fcb4d59b4..6744d737c 100644 --- a/app/src/main/java/org/tasks/data/GoogleTaskList.java +++ b/app/src/main/java/org/tasks/data/GoogleTaskList.java @@ -24,29 +24,25 @@ public class GoogleTaskList implements Parcelable { }; @PrimaryKey(autoGenerate = true) - @ColumnInfo(name = "_id") + @ColumnInfo(name = "gtl_id") private transient long id; - @ColumnInfo(name = "account") + @ColumnInfo(name = "gtl_account") private String account; - @ColumnInfo(name = "remote_id") + @ColumnInfo(name = "gtl_remote_id") private String remoteId; - @ColumnInfo(name = "title") + @ColumnInfo(name = "gtl_title") private String title; - @ColumnInfo(name = "remote_order") + @ColumnInfo(name = "gtl_remote_order") private int remoteOrder; - @ColumnInfo(name = "last_sync") + @ColumnInfo(name = "gtl_last_sync") private long lastSync; - @ColumnInfo(name = "deleted") - @Deprecated - private long deleted = 0; - - @ColumnInfo(name = "color") + @ColumnInfo(name = "gtl_color") private Integer color; public GoogleTaskList() {} @@ -59,7 +55,6 @@ public class GoogleTaskList implements Parcelable { title = parcel.readString(); remoteOrder = parcel.readInt(); lastSync = parcel.readLong(); - deleted = parcel.readLong(); color = parcel.readInt(); } @@ -111,14 +106,6 @@ public class GoogleTaskList implements Parcelable { this.lastSync = lastSync; } - public long getDeleted() { - return deleted; - } - - public void setDeleted(long deleted) { - this.deleted = deleted; - } - public Integer getColor() { return color == null ? -1 : color; } @@ -147,9 +134,6 @@ public class GoogleTaskList implements Parcelable { if (lastSync != that.lastSync) { return false; } - if (deleted != that.deleted) { - return false; - } if (account != null ? !account.equals(that.account) : that.account != null) { return false; } @@ -170,7 +154,6 @@ public class GoogleTaskList implements Parcelable { result = 31 * result + (title != null ? title.hashCode() : 0); result = 31 * result + remoteOrder; result = 31 * result + (int) (lastSync ^ (lastSync >>> 32)); - result = 31 * result + (int) (deleted ^ (deleted >>> 32)); result = 31 * result + (color != null ? color.hashCode() : 0); return result; } @@ -193,8 +176,6 @@ public class GoogleTaskList implements Parcelable { + remoteOrder + ", lastSync=" + lastSync - + ", deleted=" - + deleted + ", color=" + color + '}'; @@ -213,7 +194,6 @@ public class GoogleTaskList implements Parcelable { parcel.writeString(title); parcel.writeInt(remoteOrder); parcel.writeLong(lastSync); - parcel.writeLong(deleted); parcel.writeInt(getColor()); } } diff --git a/app/src/main/java/org/tasks/data/GoogleTaskListDao.java b/app/src/main/java/org/tasks/data/GoogleTaskListDao.java index 1df5dc982..fd60122f1 100644 --- a/app/src/main/java/org/tasks/data/GoogleTaskListDao.java +++ b/app/src/main/java/org/tasks/data/GoogleTaskListDao.java @@ -18,29 +18,29 @@ public abstract class GoogleTaskListDao { @Query("SELECT * FROM google_task_accounts") public abstract List getAccounts(); - @Query("SELECT * FROM google_task_accounts WHERE account = :account COLLATE NOCASE LIMIT 1") + @Query("SELECT * FROM google_task_accounts WHERE gta_account = :account COLLATE NOCASE LIMIT 1") public abstract GoogleTaskAccount getAccount(String account); - @Query("SELECT * FROM google_task_lists WHERE _id = :id") + @Query("SELECT * FROM google_task_lists WHERE gtl_id = :id") public abstract GoogleTaskList getById(long id); - @Query("SELECT * FROM google_task_lists WHERE account = :account ORDER BY title ASC") + @Query("SELECT * FROM google_task_lists WHERE gtl_account = :account ORDER BY gtl_title ASC") public abstract List getLists(String account); - @Query("SELECT * FROM google_task_lists WHERE remote_id = :remoteId LIMIT 1") + @Query("SELECT * FROM google_task_lists WHERE gtl_remote_id = :remoteId LIMIT 1") public abstract GoogleTaskList getByRemoteId(String remoteId); @Query("SELECT * FROM google_task_lists") public abstract LiveData> subscribeToLists(); @Query( - "SELECT * FROM google_task_lists WHERE remote_id = :remoteId AND IFNULL(account, '') = '' LIMIT 1") + "SELECT * FROM google_task_lists WHERE gtl_remote_id = :remoteId AND IFNULL(gtl_account, '') = '' LIMIT 1") public abstract GoogleTaskList findExistingList(String remoteId); @Query("SELECT * FROM google_task_lists") public abstract List getAllLists(); - @Query("UPDATE google_task_lists SET last_sync = 0 WHERE account = :account") + @Query("UPDATE google_task_lists SET gtl_last_sync = 0 WHERE gtl_account = :account") public abstract void resetLastSync(String account); @Insert(onConflict = OnConflictStrategy.REPLACE) diff --git a/app/src/main/java/org/tasks/db/Migrations.java b/app/src/main/java/org/tasks/db/Migrations.java index d3e98b46b..0e5053ae6 100644 --- a/app/src/main/java/org/tasks/db/Migrations.java +++ b/app/src/main/java/org/tasks/db/Migrations.java @@ -257,6 +257,50 @@ public class Migrations { } }; + private static final Migration MIGRATION_63_64 = + new Migration(63, 64) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE `caldav_tasks` RENAME TO `caldav-temp`"); + database.execSQL( + "CREATE TABLE IF NOT EXISTS `caldav_tasks` (`cd_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `cd_task` INTEGER NOT NULL, `cd_calendar` TEXT, `cd_object` TEXT, `cd_remote_id` TEXT, `cd_etag` TEXT, `cd_last_sync` INTEGER NOT NULL, `cd_deleted` INTEGER NOT NULL, `cd_vtodo` TEXT)"); + database.execSQL( + "INSERT INTO `caldav_tasks` (`cd_id`, `cd_task`, `cd_calendar`, `cd_object`, `cd_remote_id`, `cd_etag`, `cd_last_sync`, `cd_deleted`, `cd_vtodo`)" + + "SELECT `_id`, `task`, `calendar`, `object`, `remote_id`, `etag`, `last_sync`, `deleted`, `vtodo` FROM `caldav-temp`"); + database.execSQL("DROP TABLE `caldav-temp`"); + + database.execSQL( + "CREATE TABLE IF NOT EXISTS `caldav_accounts` (`cda_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `cda_uuid` TEXT, `cda_name` TEXT, `cda_url` TEXT, `cda_username` TEXT, `cda_password` TEXT, `cda_error` TEXT)"); + database.execSQL( + "INSERT INTO `caldav_accounts` (`cda_id`, `cda_uuid`, `cda_name`, `cda_url`, `cda_username`, `cda_password`, `cda_error`) " + + "SELECT `_id`, `uuid`, `name`, `url`, `username`, `password`, `error` FROM `caldav_account`"); + database.execSQL("DROP TABLE `caldav_account`"); + + database.execSQL( + "CREATE TABLE IF NOT EXISTS `caldav_lists` (`cdl_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `cdl_account` TEXT, `cdl_uuid` TEXT, `cdl_name` TEXT, `cdl_color` INTEGER NOT NULL, `cdl_ctag` TEXT, `cdl_url` TEXT)"); + database.execSQL( + "INSERT INTO `caldav_lists` (`cdl_id`, `cdl_account`, `cdl_uuid`, `cdl_name`, `cdl_color`, `cdl_ctag`, `cdl_url`) " + + "SELECT `_id`, `account`, `uuid`, `name`, `color`, `ctag`, `url` FROM caldav_calendar"); + database.execSQL("DROP TABLE `caldav_calendar`"); + + database.execSQL("ALTER TABLE `google_task_accounts` RENAME TO `gta-temp`"); + database.execSQL( + "CREATE TABLE IF NOT EXISTS `google_task_accounts` (`gta_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `gta_account` TEXT, `gta_error` TEXT, `gta_etag` TEXT)"); + database.execSQL( + "INSERT INTO `google_task_accounts` (`gta_id`, `gta_account`, `gta_error`, `gta_etag`) " + + "SELECT `_id`, `account`, `error`, `etag` FROM `gta-temp`"); + database.execSQL("DROP TABLE `gta-temp`"); + + database.execSQL("ALTER TABLE `google_task_lists` RENAME TO `gtl-temp`"); + database.execSQL( + "CREATE TABLE IF NOT EXISTS `google_task_lists` (`gtl_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `gtl_account` TEXT, `gtl_remote_id` TEXT, `gtl_title` TEXT, `gtl_remote_order` INTEGER NOT NULL, `gtl_last_sync` INTEGER NOT NULL, `gtl_color` INTEGER)"); + database.execSQL( + "INSERT INTO `google_task_lists` (`gtl_id`, `gtl_account`, `gtl_remote_id`, `gtl_title`, `gtl_remote_order`, `gtl_last_sync`, `gtl_color`) " + + "SELECT `_id`, `account`, `remote_id`, `title`, `remote_order`, `last_sync`, `color` FROM `gtl-temp`"); + database.execSQL("DROP TABLE `gtl-temp`"); + } + }; + public static final Migration[] MIGRATIONS = new Migration[] { MIGRATION_35_36, @@ -277,7 +321,8 @@ public class Migrations { MIGRATION_59_60, MIGRATION_60_61, MIGRATION_61_62, - MIGRATION_62_63 + MIGRATION_62_63, + MIGRATION_63_64 }; private static Migration NOOP(int from, int to) { diff --git a/app/src/main/java/org/tasks/ui/TaskListViewModel.java b/app/src/main/java/org/tasks/ui/TaskListViewModel.java index 458b083f8..e7c767384 100644 --- a/app/src/main/java/org/tasks/ui/TaskListViewModel.java +++ b/app/src/main/java/org/tasks/ui/TaskListViewModel.java @@ -57,7 +57,7 @@ public class TaskListViewModel extends ViewModel implements Observer