mirror of https://github.com/tasks/tasks
Add 'google_tasks' table
parent
f4de1bf0df
commit
3943d620a5
@ -0,0 +1,693 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 50,
|
||||
"identityHash": "e08be332b5c3e35040e5fd89d68fd304",
|
||||
"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)",
|
||||
"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
|
||||
}
|
||||
],
|
||||
"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, `deleted` INTEGER)",
|
||||
"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
|
||||
},
|
||||
{
|
||||
"fieldPath": "deleted",
|
||||
"columnName": "deleted",
|
||||
"affinity": "INTEGER",
|
||||
"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, `action` TEXT, `message` TEXT, `picture` TEXT, `target_id` TEXT, `created_at` INTEGER, `deleted_at` INTEGER)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "_id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "remoteId",
|
||||
"columnName": "remoteId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "action",
|
||||
"columnName": "action",
|
||||
"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
|
||||
},
|
||||
{
|
||||
"fieldPath": "deleted",
|
||||
"columnName": "deleted_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, `deleted_at` INTEGER)",
|
||||
"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": "path",
|
||||
"columnName": "path",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "contentType",
|
||||
"columnName": "content_type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "deleted",
|
||||
"columnName": "deleted_at",
|
||||
"affinity": "INTEGER",
|
||||
"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": "store",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `item` TEXT, `value` TEXT, `value2` TEXT, `value3` TEXT, `value4` TEXT, `deleted` INTEGER)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "_id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "item",
|
||||
"columnName": "item",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "value",
|
||||
"columnName": "value",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "value2",
|
||||
"columnName": "value2",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "value3",
|
||||
"columnName": "value3",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "value4",
|
||||
"columnName": "value4",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "deleted",
|
||||
"columnName": "deleted",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"_id"
|
||||
],
|
||||
"autoGenerate": true
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "so_id",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"type",
|
||||
"item"
|
||||
],
|
||||
"createSql": "CREATE INDEX `so_id` ON `${TABLE_NAME}` (`type`, `item`)"
|
||||
}
|
||||
],
|
||||
"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": "importance",
|
||||
"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": "locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `name` TEXT, `latitude` REAL NOT NULL, `longitude` REAL NOT NULL, `radius` INTEGER NOT NULL)",
|
||||
"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": "latitude",
|
||||
"columnName": "latitude",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "longitude",
|
||||
"columnName": "longitude",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "radius",
|
||||
"columnName": "radius",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"_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}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `remote_id` TEXT, `list_id` TEXT, `parent` INTEGER NOT NULL, `indent` INTEGER NOT NULL, `order` INTEGER NOT NULL, `remote_order` INTEGER NOT NULL, `last_sync` INTEGER NOT NULL, `deleted` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "_id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "task",
|
||||
"columnName": "task",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "remoteId",
|
||||
"columnName": "remote_id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "listId",
|
||||
"columnName": "list_id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "parent",
|
||||
"columnName": "parent",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "indent",
|
||||
"columnName": "indent",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "order",
|
||||
"columnName": "order",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "remoteOrder",
|
||||
"columnName": "remote_order",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastSync",
|
||||
"columnName": "last_sync",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "deleted",
|
||||
"columnName": "deleted",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"_id"
|
||||
],
|
||||
"autoGenerate": true
|
||||
},
|
||||
"indices": [],
|
||||
"foreignKeys": []
|
||||
}
|
||||
],
|
||||
"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, \"e08be332b5c3e35040e5fd89d68fd304\")"
|
||||
]
|
||||
}
|
||||
}
|
@ -1,169 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2012 Todoroo Inc
|
||||
*
|
||||
* See the file "LICENSE" for the full license governing this code.
|
||||
*/
|
||||
package com.todoroo.astrid.dao;
|
||||
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.todoroo.andlib.data.Property;
|
||||
import com.todoroo.andlib.sql.Query;
|
||||
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
|
||||
import com.todoroo.astrid.data.Metadata;
|
||||
import com.todoroo.astrid.data.Task;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.tasks.injection.InjectingTestCase;
|
||||
import org.tasks.injection.TestComponent;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertNotNull;
|
||||
import static junit.framework.Assert.assertNotSame;
|
||||
import static junit.framework.Assert.assertNull;
|
||||
import static junit.framework.Assert.assertTrue;
|
||||
import static junit.framework.Assert.fail;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class MetadataDaoTests extends InjectingTestCase {
|
||||
|
||||
@Inject MetadataDao metadataDao;
|
||||
@Inject TaskDao taskDao;
|
||||
|
||||
private Metadata metadata;
|
||||
|
||||
public static Property<?>[] KEYS = new Property<?>[] { Metadata.ID, Metadata.KEY };
|
||||
|
||||
@Override
|
||||
public void setUp() {
|
||||
super.setUp();
|
||||
metadata = new Metadata();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void inject(TestComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test basic creation, fetch, and save
|
||||
*/
|
||||
@Test
|
||||
public void testCrud() throws Exception {
|
||||
assertTrue(metadataDao.toList(Query.select(Metadata.ID)).isEmpty());
|
||||
|
||||
// create "happy"
|
||||
Metadata metadata = new Metadata();
|
||||
metadata.setTask(1L);
|
||||
metadata.setKey("happy");
|
||||
assertTrue(metadataDao.persist(metadata));
|
||||
assertEquals(1, metadataDao.toList(Query.select(Metadata.ID)).size());
|
||||
long happyId = metadata.getId();
|
||||
assertNotSame(Metadata.NO_ID, happyId);
|
||||
metadata = metadataDao.fetch(happyId);
|
||||
assertEquals("happy", metadata.getKey());
|
||||
|
||||
// create "sad"
|
||||
metadata = new Metadata();
|
||||
metadata.setTask(1L);
|
||||
metadata.setKey("sad");
|
||||
assertTrue(metadataDao.persist(metadata));
|
||||
assertEquals(2, metadataDao.toList(Query.select(Metadata.ID)).size());
|
||||
|
||||
// rename sad to melancholy
|
||||
long sadId = metadata.getId();
|
||||
assertNotSame(Metadata.NO_ID, sadId);
|
||||
metadata.setKey("melancholy");
|
||||
assertTrue(metadataDao.persist(metadata));
|
||||
assertEquals(2, metadataDao.toList(Query.select(Metadata.ID)).size());
|
||||
|
||||
// check state
|
||||
metadata = metadataDao.fetch(happyId);
|
||||
assertEquals("happy", metadata.getKey());
|
||||
metadata = metadataDao.fetch(sadId);
|
||||
assertEquals("melancholy", metadata.getKey());
|
||||
|
||||
// delete sad
|
||||
assertTrue(metadataDao.delete(sadId));
|
||||
List<Metadata> metadataList = metadataDao.toList(Query.select(KEYS));
|
||||
assertEquals(1, metadataList.size());
|
||||
assertEquals("happy", metadataList.get(0).getKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test metadata bound to task
|
||||
*/
|
||||
@Test
|
||||
public void testMetadataConditions() {
|
||||
// create "happy"
|
||||
Metadata metadata = new Metadata();
|
||||
metadata.setKey("with1");
|
||||
metadata.setTask(1L);
|
||||
assertTrue(metadataDao.persist(metadata));
|
||||
|
||||
metadata = new Metadata();
|
||||
metadata.setKey("with2");
|
||||
metadata.setTask(2L);
|
||||
assertTrue(metadataDao.persist(metadata));
|
||||
|
||||
metadata = new Metadata();
|
||||
metadata.setKey("with1");
|
||||
metadata.setTask(1L);
|
||||
assertTrue(metadataDao.persist(metadata));
|
||||
|
||||
List<Metadata> metadataList = metadataDao.toList(Query.select(KEYS).where(MetadataCriteria.byTask(1)));
|
||||
assertEquals(2, metadataList.size());
|
||||
assertEquals("with1", metadataList.get(0).getKey());
|
||||
assertEquals("with1", metadataList.get(1).getKey());
|
||||
|
||||
assertTrue(metadataDao.toList(Query.select(KEYS).where(MetadataCriteria.byTask(3))).isEmpty());
|
||||
|
||||
assertEquals(2, metadataDao.deleteWhere(MetadataCriteria.byTask(1)));
|
||||
assertEquals(1, metadataDao.toList(Query.select(KEYS)).size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDontSaveMetadataWithoutTaskId() {
|
||||
try {
|
||||
metadataDao.persist(metadata);
|
||||
fail("expected exception");
|
||||
} catch(IllegalArgumentException e) {
|
||||
assertTrue(e.getMessage().startsWith("metadata needs to be attached to a task"));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSaveMetadata() {
|
||||
metadata.setTask(1L);
|
||||
metadataDao.persist(metadata);
|
||||
|
||||
assertNotNull(metadataDao.fetch(metadata.getId()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDontDeleteValidMetadata() {
|
||||
final Task task = new Task();
|
||||
taskDao.save(task);
|
||||
metadata.setTask(task.getId());
|
||||
metadataDao.persist(metadata);
|
||||
|
||||
metadataDao.removeDanglingMetadata();
|
||||
|
||||
assertNotNull(metadataDao.fetch(metadata.getId()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteDangling() {
|
||||
metadata.setTask(1L);
|
||||
metadataDao.persist(metadata);
|
||||
|
||||
metadataDao.removeDanglingMetadata();
|
||||
|
||||
assertNull(metadataDao.fetch(1));
|
||||
}
|
||||
}
|
@ -1,139 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2012 Todoroo Inc
|
||||
*
|
||||
* See the file "LICENSE" for the full license governing this code.
|
||||
*/
|
||||
package com.todoroo.astrid.dao;
|
||||
|
||||
import com.todoroo.andlib.data.DatabaseDao;
|
||||
import com.todoroo.andlib.sql.Criterion;
|
||||
import com.todoroo.andlib.sql.Join;
|
||||
import com.todoroo.andlib.sql.Query;
|
||||
import com.todoroo.andlib.utility.DateUtilities;
|
||||
import com.todoroo.astrid.data.Metadata;
|
||||
import com.todoroo.astrid.data.Task;
|
||||
|
||||
import org.tasks.injection.ApplicationScope;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* Data Access layer for {@link Metadata}-related operations.
|
||||
*
|
||||
* @author Tim Su <tim@todoroo.com>
|
||||
*
|
||||
*/
|
||||
@ApplicationScope
|
||||
public class MetadataDao {
|
||||
|
||||
private final DatabaseDao<Metadata> dao;
|
||||
|
||||
@Inject
|
||||
public MetadataDao(Database database) {
|
||||
dao = new DatabaseDao<>(database, Metadata.class);
|
||||
}
|
||||
|
||||
public Metadata getFirst(Query query) {
|
||||
return dao.getFirst(query);
|
||||
}
|
||||
|
||||
public Metadata getFirstActiveByTaskAndKey(long taskId, String key) {
|
||||
return getFirst(Query.select(Metadata.PROPERTIES).where(Criterion.and(
|
||||
MetadataCriteria.byTaskAndwithKey(taskId, key),
|
||||
MetadataCriteria.isActive())));
|
||||
}
|
||||
|
||||
public int update(Criterion where, Metadata template) {
|
||||
return dao.update(where, template);
|
||||
}
|
||||
|
||||
public void createNew(Metadata metadata) {
|
||||
dao.createNew(metadata);
|
||||
}
|
||||
|
||||
public List<Metadata> toList(Criterion criterion) {
|
||||
return toList(Query.select(Metadata.PROPERTIES).where(criterion));
|
||||
}
|
||||
|
||||
public List<Metadata> toList(Query where) {
|
||||
return dao.toList(where);
|
||||
}
|
||||
|
||||
public int deleteWhere(Criterion criterion) {
|
||||
return dao.deleteWhere(criterion);
|
||||
}
|
||||
|
||||
public boolean delete(long id) {
|
||||
return dao.delete(id);
|
||||
}
|
||||
|
||||
public void saveExisting(Metadata metadata) {
|
||||
dao.saveExisting(metadata);
|
||||
}
|
||||
|
||||
public Metadata fetch(long id) {
|
||||
return dao.fetch(id, Metadata.PROPERTIES);
|
||||
}
|
||||
|
||||
// --- SQL clause generators
|
||||
|
||||
/**
|
||||
* Generates SQL clauses
|
||||
*/
|
||||
public static class MetadataCriteria {
|
||||
|
||||
/** Returns all metadata associated with a given task */
|
||||
public static Criterion byTask(long taskId) {
|
||||
return Metadata.TASK.eq(taskId);
|
||||
}
|
||||
|
||||
/** Returns all metadata associated with a given key */
|
||||
public static Criterion withKey(String key) {
|
||||
return Metadata.KEY.eq(key);
|
||||
}
|
||||
|
||||
/** Returns all metadata associated with a given key */
|
||||
public static Criterion byTaskAndwithKey(long taskId, String key) {
|
||||
return Criterion.and(withKey(key), byTask(taskId));
|
||||
}
|
||||
|
||||
public static Criterion isActive() {
|
||||
return Metadata.DELETION_DATE.eq(0);
|
||||
}
|
||||
|
||||
public static Criterion isDeleted() {
|
||||
return Metadata.DELETION_DATE.gt(0);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean persist(Metadata item) {
|
||||
if(!item.containsNonNullValue(Metadata.TASK)) {
|
||||
throw new IllegalArgumentException("metadata needs to be attached to a task: " + item.getMergedValues()); //$NON-NLS-1$
|
||||
}
|
||||
if(!item.containsValue(Metadata.CREATION_DATE)) {
|
||||
item.setCreationDate(DateUtilities.now());
|
||||
}
|
||||
|
||||
return dao.persist(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean up metadata. Typically called on startup
|
||||
*/
|
||||
public void removeDanglingMetadata() {
|
||||
dao.deleteWhere(Metadata.ID.in(Query.select(Metadata.ID).from(Metadata.TABLE).join(Join.left(Task.TABLE,
|
||||
Metadata.TASK.eq(Task.ID))).where(Task.TITLE.isNull())));
|
||||
}
|
||||
|
||||
public List<Metadata> byTask(long taskId) {
|
||||
return toList(MetadataCriteria.byTask(taskId));
|
||||
}
|
||||
|
||||
public List<Metadata> byTaskAndKey(long taskId, String key) {
|
||||
return dao.toList(Query.select(Metadata.PROPERTIES).where(
|
||||
Criterion.and(Metadata.TASK.eq(taskId), Metadata.KEY.eq(key))));
|
||||
}
|
||||
}
|
||||
|
@ -1,179 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2012 Todoroo Inc
|
||||
*
|
||||
* See the file "LICENSE" for the full license governing this code.
|
||||
*/
|
||||
package com.todoroo.astrid.data;
|
||||
|
||||
|
||||
import android.arch.persistence.room.ColumnInfo;
|
||||
import android.arch.persistence.room.Entity;
|
||||
import android.arch.persistence.room.Ignore;
|
||||
import android.arch.persistence.room.Index;
|
||||
import android.arch.persistence.room.PrimaryKey;
|
||||
import android.content.ContentValues;
|
||||
|
||||
import com.todoroo.andlib.data.AbstractModel;
|
||||
import com.todoroo.andlib.data.Property;
|
||||
import com.todoroo.andlib.data.Property.LongProperty;
|
||||
import com.todoroo.andlib.data.Property.StringProperty;
|
||||
import com.todoroo.andlib.data.Table;
|
||||
|
||||
/**
|
||||
* Data Model which represents a piece of metadata associated with a task
|
||||
*
|
||||
* @author Tim Su <tim@todoroo.com>
|
||||
*
|
||||
*/
|
||||
@Entity(tableName = "metadata",
|
||||
indices = {
|
||||
@Index(name = "md_tid", value = "task"),
|
||||
@Index(name = "md_tkid", value = {"task", "key"})
|
||||
})
|
||||
public class Metadata extends AbstractModel {
|
||||
|
||||
// --- table
|
||||
|
||||
/** table for this model */
|
||||
public static final Table TABLE = new Table("metadata", Metadata.class);
|
||||
|
||||
// --- properties
|
||||
|
||||
/** ID */
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
@ColumnInfo(name = "_id")
|
||||
public Long id;
|
||||
public static final LongProperty ID = new LongProperty(
|
||||
TABLE, ID_PROPERTY_NAME);
|
||||
|
||||
/** Associated Task */
|
||||
@ColumnInfo(name = "task")
|
||||
public Long task;
|
||||
public static final LongProperty TASK = new LongProperty(
|
||||
TABLE, "task");
|
||||
|
||||
/** Metadata Key */
|
||||
@ColumnInfo(name = "key")
|
||||
public String key;
|
||||
public static final StringProperty KEY = new StringProperty(
|
||||
TABLE, "key");
|
||||
|
||||
/** Metadata Text Value Column 1 */
|
||||
@ColumnInfo(name = "value")
|
||||
public String value1;
|
||||
public static final StringProperty VALUE1 = new StringProperty(
|
||||
TABLE, "value");
|
||||
|
||||
/** Metadata Text Value Column 2 */
|
||||
@ColumnInfo(name = "value2")
|
||||
public String value2;
|
||||
public static final StringProperty VALUE2 = new StringProperty(
|
||||
TABLE, "value2");
|
||||
|
||||
/** Metadata Text Value Column 3 */
|
||||
@ColumnInfo(name = "value3")
|
||||
public String value3;
|
||||
public static final StringProperty VALUE3 = new StringProperty(
|
||||
TABLE, "value3");
|
||||
|
||||
/** Metadata Text Value Column 4 */
|
||||
@ColumnInfo(name = "value4")
|
||||
public String value4;
|
||||
public static final StringProperty VALUE4 = new StringProperty(
|
||||
TABLE, "value4");
|
||||
|
||||
/** Metadata Text Value Column 5 */
|
||||
@ColumnInfo(name = "value5")
|
||||
public String value5;
|
||||
public static final StringProperty VALUE5 = new StringProperty(
|
||||
TABLE, "value5");
|
||||
|
||||
@ColumnInfo(name = "value6")
|
||||
public String value6;
|
||||
public static final StringProperty VALUE6 = new StringProperty(
|
||||
TABLE, "value6");
|
||||
|
||||
@ColumnInfo(name = "value7")
|
||||
public String value7;
|
||||
public static final StringProperty VALUE7 = new StringProperty(
|
||||
TABLE, "value7");
|
||||
|
||||
/** Unixtime Metadata was created */
|
||||
@ColumnInfo(name = "created")
|
||||
public Long created;
|
||||
public static final LongProperty CREATION_DATE = new LongProperty(
|
||||
TABLE, "created");
|
||||
|
||||
/** Unixtime metadata was deleted/tombstoned */
|
||||
@ColumnInfo(name = "deleted")
|
||||
public Long deleted = 0L;
|
||||
public static final LongProperty DELETION_DATE = new LongProperty(
|
||||
TABLE, "deleted");
|
||||
|
||||
/** List of all properties for this model */
|
||||
public static final Property<?>[] PROPERTIES = generateProperties(Metadata.class);
|
||||
|
||||
// --- defaults
|
||||
|
||||
/** Default values container */
|
||||
private static final ContentValues defaultValues = new ContentValues();
|
||||
|
||||
static {
|
||||
defaultValues.put(DELETION_DATE.name, 0L);
|
||||
}
|
||||
|
||||
public Metadata() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Ignore
|
||||
public Metadata(Metadata metadata) {
|
||||
super(metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ContentValues getDefaultValues() {
|
||||
return defaultValues;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getId() {
|
||||
return getIdHelper(ID);
|
||||
}
|
||||
|
||||
// --- parcelable helpers
|
||||
|
||||
private static final Creator<Metadata> CREATOR = new ModelCreator<>(Metadata.class);
|
||||
|
||||
public Long getDeletionDate() {
|
||||
return getValue(DELETION_DATE);
|
||||
}
|
||||
|
||||
public void setDeletionDate(Long deletionDate) {
|
||||
setValue(DELETION_DATE, deletionDate);
|
||||
}
|
||||
|
||||
public Long getTask() {
|
||||
return getValue(TASK);
|
||||
}
|
||||
|
||||
public void setTask(Long task) {
|
||||
setValue(TASK, task);
|
||||
}
|
||||
|
||||
public Long getCreationDate() {
|
||||
return getValue(CREATION_DATE);
|
||||
}
|
||||
|
||||
public void setCreationDate(Long creationDate) {
|
||||
setValue(CREATION_DATE, creationDate);
|
||||
}
|
||||
|
||||
public String getKey() {
|
||||
return getValue(KEY);
|
||||
}
|
||||
|
||||
public void setKey(String key) {
|
||||
setValue(KEY, key);
|
||||
}
|
||||
}
|
@ -1,82 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2012 Todoroo Inc
|
||||
*
|
||||
* See the file "LICENSE" for the full license governing this code.
|
||||
*/
|
||||
package com.todoroo.astrid.gtasks;
|
||||
|
||||
import com.todoroo.andlib.data.AbstractModel;
|
||||
import com.todoroo.andlib.data.Property.IntegerProperty;
|
||||
import com.todoroo.andlib.data.Property.LongProperty;
|
||||
import com.todoroo.andlib.data.Property.StringProperty;
|
||||
import com.todoroo.andlib.utility.DateUtilities;
|
||||
import com.todoroo.astrid.data.Metadata;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* Metadata entries for a GTasks Task
|
||||
* @author Tim Su <tim@todoroo.com>
|
||||
*
|
||||
*/
|
||||
public class GtasksMetadata {
|
||||
|
||||
/** metadata key */
|
||||
public static final String METADATA_KEY = "gtasks"; //$NON-NLS-1$
|
||||
|
||||
/** task id in google */
|
||||
public static final StringProperty ID = new StringProperty(Metadata.TABLE,
|
||||
Metadata.VALUE1.name);
|
||||
|
||||
public static final StringProperty LIST_ID = new StringProperty(Metadata.TABLE,
|
||||
Metadata.VALUE2.name);
|
||||
|
||||
/** parent task id, or 0 if top level task */
|
||||
public static final LongProperty PARENT_TASK = new LongProperty(Metadata.TABLE,
|
||||
Metadata.VALUE3.name);
|
||||
|
||||
public static final IntegerProperty INDENT = new IntegerProperty(Metadata.TABLE,
|
||||
Metadata.VALUE4.name);
|
||||
|
||||
public static final LongProperty ORDER = new LongProperty(Metadata.TABLE,
|
||||
Metadata.VALUE5.name);
|
||||
|
||||
public static final LongProperty GTASKS_ORDER = new LongProperty(Metadata.TABLE,
|
||||
Metadata.VALUE6.name);
|
||||
|
||||
public static final LongProperty LAST_SYNC = new LongProperty(Metadata.TABLE,
|
||||
Metadata.VALUE7.name);
|
||||
private final GtasksPreferenceService gtasksPreferenceService;
|
||||
|
||||
@Inject
|
||||
public GtasksMetadata(GtasksPreferenceService gtasksPreferenceService) {
|
||||
this.gtasksPreferenceService = gtasksPreferenceService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates default GTasks metadata item
|
||||
* @param taskId if > 0, will set metadata task field
|
||||
*/
|
||||
public Metadata createEmptyMetadata(long taskId) {
|
||||
Metadata metadata = createEmptyMetadataWithoutList(taskId);
|
||||
String defaultList = gtasksPreferenceService.getDefaultList();
|
||||
if(defaultList == null) {
|
||||
defaultList = "@default"; //$NON-NLS-1$
|
||||
}
|
||||
metadata.setValue(LIST_ID, defaultList);
|
||||
return metadata;
|
||||
}
|
||||
|
||||
public static Metadata createEmptyMetadataWithoutList(long taskId) {
|
||||
Metadata metadata = new Metadata();
|
||||
metadata.setKey(GtasksMetadata.METADATA_KEY);
|
||||
metadata.setValue(ID, ""); //$NON-NLS-1$
|
||||
metadata.setValue(PARENT_TASK, AbstractModel.NO_ID);
|
||||
metadata.setValue(INDENT, 0);
|
||||
metadata.setValue(ORDER, DateUtilities.now());
|
||||
if(taskId > AbstractModel.NO_ID) {
|
||||
metadata.setTask(taskId);
|
||||
}
|
||||
return metadata;
|
||||
}
|
||||
}
|
@ -0,0 +1,200 @@
|
||||
package org.tasks.data;
|
||||
|
||||
import android.arch.persistence.room.ColumnInfo;
|
||||
import android.arch.persistence.room.Entity;
|
||||
import android.arch.persistence.room.Ignore;
|
||||
import android.arch.persistence.room.PrimaryKey;
|
||||
|
||||
import com.todoroo.andlib.data.Property;
|
||||
import com.todoroo.andlib.data.Table;
|
||||
import com.todoroo.andlib.utility.DateUtilities;
|
||||
|
||||
import org.tasks.backup.XmlReader;
|
||||
import org.tasks.backup.XmlWriter;
|
||||
|
||||
@Entity(tableName = "google_tasks")
|
||||
public class GoogleTask {
|
||||
|
||||
public static final String KEY = "gtasks"; //$NON-NLS-1$
|
||||
|
||||
@Deprecated
|
||||
public static final Table TABLE = new Table("google_tasks", null);
|
||||
|
||||
@Deprecated
|
||||
public static final Property.IntegerProperty INDENT = new Property.IntegerProperty(GoogleTask.TABLE, "indent");
|
||||
|
||||
@Deprecated
|
||||
public static final Property.LongProperty ORDER = new Property.LongProperty(GoogleTask.TABLE, "`order`");
|
||||
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
@ColumnInfo(name = "_id")
|
||||
private long id;
|
||||
|
||||
@ColumnInfo(name = "task")
|
||||
private long task;
|
||||
|
||||
@ColumnInfo(name = "remote_id")
|
||||
private String remoteId = "";
|
||||
|
||||
@ColumnInfo(name = "list_id")
|
||||
private String listId = "";
|
||||
|
||||
@ColumnInfo(name = "parent")
|
||||
private long parent;
|
||||
|
||||
@ColumnInfo(name = "indent")
|
||||
private int indent;
|
||||
|
||||
@ColumnInfo(name = "order")
|
||||
private long order;
|
||||
|
||||
@ColumnInfo(name = "remote_order")
|
||||
private long remoteOrder;
|
||||
|
||||
@ColumnInfo(name = "last_sync")
|
||||
private long lastSync;
|
||||
|
||||
@ColumnInfo(name = "deleted")
|
||||
private long deleted;
|
||||
|
||||
@Ignore
|
||||
private boolean suppressSync;
|
||||
|
||||
public GoogleTask() {
|
||||
|
||||
}
|
||||
|
||||
@Ignore
|
||||
public GoogleTask(long task, String listId) {
|
||||
this.task = task;
|
||||
this.order = DateUtilities.now();
|
||||
this.listId = listId;
|
||||
}
|
||||
|
||||
@Ignore
|
||||
public GoogleTask(XmlReader xml) {
|
||||
remoteId = xml.readString("remote_id");
|
||||
listId = xml.readString("list_id");
|
||||
parent = xml.readLong("parent");
|
||||
indent = xml.readInteger("indent");
|
||||
order = xml.readLong("order");
|
||||
remoteOrder = xml.readLong("remote_order");
|
||||
lastSync = xml.readLong("last_sync");
|
||||
deleted = xml.readLong("deleted");
|
||||
}
|
||||
|
||||
public void writeToXml(XmlWriter xml) {
|
||||
xml.writeString("remote_id", remoteId);
|
||||
xml.writeString("list_id", listId);
|
||||
xml.writeLong("parent", parent);
|
||||
xml.writeInteger("indent", indent);
|
||||
xml.writeLong("order", order);
|
||||
xml.writeLong("remote_order", remoteOrder);
|
||||
xml.writeLong("last_sync", lastSync);
|
||||
xml.writeLong("deleted", deleted);
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public long getTask() {
|
||||
return task;
|
||||
}
|
||||
|
||||
public void setTask(long task) {
|
||||
this.task = task;
|
||||
}
|
||||
|
||||
public String getRemoteId() {
|
||||
return remoteId;
|
||||
}
|
||||
|
||||
public void setRemoteId(String remoteId) {
|
||||
this.remoteId = remoteId;
|
||||
}
|
||||
|
||||
public String getListId() {
|
||||
return listId;
|
||||
}
|
||||
|
||||
public void setListId(String listId) {
|
||||
this.listId = listId;
|
||||
}
|
||||
|
||||
public long getParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
public void setParent(long parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public int getIndent() {
|
||||
return indent;
|
||||
}
|
||||
|
||||
public void setIndent(int indent) {
|
||||
this.indent = indent;
|
||||
}
|
||||
|
||||
public long getOrder() {
|
||||
return order;
|
||||
}
|
||||
|
||||
public void setOrder(long order) {
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
public long getRemoteOrder() {
|
||||
return remoteOrder;
|
||||
}
|
||||
|
||||
public void setRemoteOrder(long remoteOrder) {
|
||||
this.remoteOrder = remoteOrder;
|
||||
}
|
||||
|
||||
public long getLastSync() {
|
||||
return lastSync;
|
||||
}
|
||||
|
||||
public void setLastSync(long lastSync) {
|
||||
this.lastSync = lastSync;
|
||||
}
|
||||
|
||||
public long getDeleted() {
|
||||
return deleted;
|
||||
}
|
||||
|
||||
public void setDeleted(long deleted) {
|
||||
this.deleted = deleted;
|
||||
}
|
||||
|
||||
public boolean isSuppressSync() {
|
||||
return suppressSync;
|
||||
}
|
||||
|
||||
public void setSuppressSync(boolean suppressSync) {
|
||||
this.suppressSync = suppressSync;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "GoogleTask{" +
|
||||
"id=" + id +
|
||||
", task=" + task +
|
||||
", remoteId='" + remoteId + '\'' +
|
||||
", listId='" + listId + '\'' +
|
||||
", parent=" + parent +
|
||||
", indent=" + indent +
|
||||
", order=" + order +
|
||||
", remoteOrder=" + remoteOrder +
|
||||
", lastSync=" + lastSync +
|
||||
", deleted=" + deleted +
|
||||
'}';
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
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 GoogleTaskDao {
|
||||
@Query("DELETE FROM google_tasks WHERE list_id = :remoteId")
|
||||
void deleteList(String remoteId);
|
||||
|
||||
@Insert
|
||||
void insert(GoogleTask task);
|
||||
|
||||
@Query("SELECT * FROM google_tasks WHERE task = :taskId AND deleted = 0 LIMIT 1")
|
||||
GoogleTask getByTaskId(long taskId);
|
||||
|
||||
@Update
|
||||
void update(GoogleTask googleTask);
|
||||
|
||||
@Query("SELECT * FROM google_tasks WHERE list_id = :listId AND parent = :parent ORDER BY remote_order ASC")
|
||||
List<GoogleTask> byRemoteOrder(String listId, long parent);
|
||||
|
||||
@Query("SELECT * FROM google_tasks WHERE list_id = :listId AND `order` > :startAtOrder - 1 ORDER BY `order` ASC ")
|
||||
List<GoogleTask> getTasksFrom(String listId, long startAtOrder);
|
||||
|
||||
@Query("SELECT * FROM google_tasks WHERE list_id = :listId AND `order` < :startAtOrder ORDER BY `order` DESC")
|
||||
List<GoogleTask> getTasksFromReverse(String listId, long startAtOrder);
|
||||
|
||||
@Query("DELETE FROM google_tasks WHERE task = :taskId")
|
||||
void deleteByTaskId(long taskId);
|
||||
|
||||
@Delete
|
||||
void delete(GoogleTask deleted);
|
||||
|
||||
@Query("SELECT * FROM google_tasks WHERE remote_id = :remoteId LIMIT 1")
|
||||
GoogleTask getByRemoteId(String remoteId);
|
||||
|
||||
@Query("SELECT * FROM google_tasks WHERE task = :taskId AND deleted > 0")
|
||||
List<GoogleTask> getDeletedByTaskId(long taskId);
|
||||
|
||||
@Query("SELECT * FROM google_tasks WHERE task = :taskId")
|
||||
List<GoogleTask> getAllByTaskId(long taskId);
|
||||
|
||||
@Query("DELETE FROM google_tasks")
|
||||
void deleteAll();
|
||||
}
|
Loading…
Reference in New Issue