From b193f7b75f9d54bdeae2ced2b76533d52331b374 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 5 May 2020 15:27:40 -0500 Subject: [PATCH] Convert some Room DAOs to Kotlin --- .../java/org/tasks/data/LocationDaoTest.kt | 6 +- .../main/java/org/tasks/data/AlarmDao.java | 35 ---- app/src/main/java/org/tasks/data/AlarmDao.kt | 31 +++ .../main/java/org/tasks/data/CaldavDao.java | 182 ------------------ app/src/main/java/org/tasks/data/CaldavDao.kt | 167 ++++++++++++++++ .../main/java/org/tasks/data/DeletionDao.java | 116 ----------- .../main/java/org/tasks/data/DeletionDao.kt | 113 +++++++++++ .../main/java/org/tasks/data/FilterDao.java | 32 --- app/src/main/java/org/tasks/data/FilterDao.kt | 30 +++ .../org/tasks/data/GoogleTaskListDao.java | 73 ------- .../java/org/tasks/data/GoogleTaskListDao.kt | 65 +++++++ .../main/java/org/tasks/data/LocationDao.java | 126 ------------ .../main/java/org/tasks/data/LocationDao.kt | 111 +++++++++++ .../org/tasks/data/TaskAttachmentDao.java | 41 ---- .../java/org/tasks/data/TaskAttachmentDao.kt | 33 ++++ .../org/tasks/data/TaskListMetadataDao.java | 23 --- .../org/tasks/data/TaskListMetadataDao.kt | 22 +++ .../java/org/tasks/data/UserActivityDao.java | 44 ----- .../java/org/tasks/data/UserActivityDao.kt | 37 ++++ .../tasks/notifications/NotificationDao.java | 29 --- .../tasks/notifications/NotificationDao.kt | 27 +++ .../preferences/fragments/Synchronization.kt | 4 +- 22 files changed, 641 insertions(+), 706 deletions(-) delete mode 100644 app/src/main/java/org/tasks/data/AlarmDao.java create mode 100644 app/src/main/java/org/tasks/data/AlarmDao.kt delete mode 100644 app/src/main/java/org/tasks/data/CaldavDao.java create mode 100644 app/src/main/java/org/tasks/data/CaldavDao.kt delete mode 100644 app/src/main/java/org/tasks/data/DeletionDao.java create mode 100644 app/src/main/java/org/tasks/data/DeletionDao.kt delete mode 100644 app/src/main/java/org/tasks/data/FilterDao.java create mode 100644 app/src/main/java/org/tasks/data/FilterDao.kt delete mode 100644 app/src/main/java/org/tasks/data/GoogleTaskListDao.java create mode 100644 app/src/main/java/org/tasks/data/GoogleTaskListDao.kt delete mode 100644 app/src/main/java/org/tasks/data/LocationDao.java create mode 100644 app/src/main/java/org/tasks/data/LocationDao.kt delete mode 100644 app/src/main/java/org/tasks/data/TaskAttachmentDao.java create mode 100644 app/src/main/java/org/tasks/data/TaskAttachmentDao.kt delete mode 100644 app/src/main/java/org/tasks/data/TaskListMetadataDao.java create mode 100644 app/src/main/java/org/tasks/data/TaskListMetadataDao.kt delete mode 100644 app/src/main/java/org/tasks/data/UserActivityDao.java create mode 100644 app/src/main/java/org/tasks/data/UserActivityDao.kt delete mode 100644 app/src/main/java/org/tasks/notifications/NotificationDao.java create mode 100644 app/src/main/java/org/tasks/notifications/NotificationDao.kt diff --git a/app/src/androidTest/java/org/tasks/data/LocationDaoTest.kt b/app/src/androidTest/java/org/tasks/data/LocationDaoTest.kt index ee41a8098..db6130ed5 100644 --- a/app/src/androidTest/java/org/tasks/data/LocationDaoTest.kt +++ b/app/src/androidTest/java/org/tasks/data/LocationDaoTest.kt @@ -49,7 +49,7 @@ class LocationDaoTest : InjectingTestCase() { @Test fun getPlaceWithMorePrecision() { locationDao.insert(newPlace(with(LATITUDE, 36.246944), with(LONGITUDE, -116.816944))) - locationDao.places.forEach { println(it) } + locationDao.getPlaces().forEach { println(it) } val place = locationDao.findPlace(36.2469.toLikeString(), (-116.8169).toLikeString()) assertEquals(36.246944, place?.latitude) assertEquals(-116.816944, place?.longitude) @@ -74,7 +74,7 @@ class LocationDaoTest : InjectingTestCase() { val geofence = locationDao.getGeofencesByPlace(place.uid) - assertTrue(geofence.arrival) + assertTrue(geofence!!.arrival) assertFalse(geofence.departure) } @@ -87,7 +87,7 @@ class LocationDaoTest : InjectingTestCase() { val geofence = locationDao.getGeofencesByPlace(place.uid) - assertFalse(geofence.arrival) + assertFalse(geofence!!.arrival) assertTrue(geofence.departure) } diff --git a/app/src/main/java/org/tasks/data/AlarmDao.java b/app/src/main/java/org/tasks/data/AlarmDao.java deleted file mode 100644 index 0f855dc17..000000000 --- a/app/src/main/java/org/tasks/data/AlarmDao.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.tasks.data; - -import androidx.room.Dao; -import androidx.room.Delete; -import androidx.room.Insert; -import androidx.room.Query; -import java.util.List; - -@Dao -public interface AlarmDao { - - @Query( - "SELECT alarms.* FROM alarms INNER JOIN tasks ON tasks._id = alarms.task " - + "WHERE tasks.completed = 0 AND tasks.deleted = 0 AND tasks.lastNotified < alarms.time " - + "ORDER BY time ASC") - List getActiveAlarms(); - - @Query( - "SELECT alarms.* FROM alarms INNER JOIN tasks ON tasks._id = alarms.task " - + "WHERE tasks._id = :taskId AND tasks.completed = 0 AND tasks.deleted = 0 AND tasks.lastNotified < alarms.time " - + "ORDER BY time ASC") - List getActiveAlarms(long taskId); - - @Query("SELECT * FROM alarms WHERE task = :taskId ORDER BY time ASC") - List getAlarms(long taskId); - - @Delete - void delete(Alarm alarm); - - @Insert - long insert(Alarm alarm); - - @Insert - void insert(Iterable alarms); -} diff --git a/app/src/main/java/org/tasks/data/AlarmDao.kt b/app/src/main/java/org/tasks/data/AlarmDao.kt new file mode 100644 index 000000000..5110fb30a --- /dev/null +++ b/app/src/main/java/org/tasks/data/AlarmDao.kt @@ -0,0 +1,31 @@ +package org.tasks.data + +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.Query + +@Dao +interface AlarmDao { + @Query("SELECT alarms.* FROM alarms INNER JOIN tasks ON tasks._id = alarms.task " + + "WHERE tasks.completed = 0 AND tasks.deleted = 0 AND tasks.lastNotified < alarms.time " + + "ORDER BY time ASC") + fun getActiveAlarms(): List + + @Query("SELECT alarms.* FROM alarms INNER JOIN tasks ON tasks._id = alarms.task " + + "WHERE tasks._id = :taskId AND tasks.completed = 0 AND tasks.deleted = 0 AND tasks.lastNotified < alarms.time " + + "ORDER BY time ASC") + fun getActiveAlarms(taskId: Long): List + + @Query("SELECT * FROM alarms WHERE task = :taskId ORDER BY time ASC") + fun getAlarms(taskId: Long): List + + @Delete + fun delete(alarm: Alarm) + + @Insert + fun insert(alarm: Alarm): Long + + @Insert + fun insert(alarms: Iterable) +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/data/CaldavDao.java b/app/src/main/java/org/tasks/data/CaldavDao.java deleted file mode 100644 index 7be78a27d..000000000 --- a/app/src/main/java/org/tasks/data/CaldavDao.java +++ /dev/null @@ -1,182 +0,0 @@ -package org.tasks.data; - -import static org.tasks.db.DbUtils.collect; - -import androidx.lifecycle.LiveData; -import androidx.room.Dao; -import androidx.room.Delete; -import androidx.room.Insert; -import androidx.room.Query; -import androidx.room.Update; -import io.reactivex.Single; -import java.util.List; -import org.tasks.filters.CaldavFilters; - -@Dao -public abstract class CaldavDao { - - @Query("SELECT * FROM caldav_lists") - public abstract LiveData> subscribeToCalendars(); - - @Query("SELECT * FROM caldav_lists WHERE cdl_uuid = :uuid LIMIT 1") - public abstract CaldavCalendar getCalendarByUuid(String uuid); - - @Query("SELECT * FROM caldav_accounts WHERE cda_uuid = :uuid LIMIT 1") - public abstract CaldavAccount getAccountByUuid(String uuid); - - @Query("SELECT COUNT(*) FROM caldav_accounts") - public abstract Single accountCount(); - - @Query("SELECT * FROM caldav_accounts ORDER BY UPPER(cda_name) ASC") - public abstract List getAccounts(); - - @Query("UPDATE caldav_accounts SET cda_collapsed = :collapsed WHERE cda_id = :id") - public abstract void setCollapsed(long id, boolean collapsed); - - @Insert - public abstract long insert(CaldavAccount caldavAccount); - - @Update - public abstract void update(CaldavAccount caldavAccount); - - public void insert(CaldavCalendar caldavCalendar) { - caldavCalendar.setId(insertInternal(caldavCalendar)); - } - - @Insert - abstract long insertInternal(CaldavCalendar caldavCalendar); - - @Update - public abstract void update(CaldavCalendar caldavCalendar); - - @Insert - public abstract long insert(CaldavTask caldavTask); - - @Insert - public abstract void insert(Iterable tasks); - - @Update - public abstract void update(CaldavTask caldavTask); - - public void update(SubsetCaldav caldavTask) { - update(caldavTask.getId(), caldavTask.getRemoteParent()); - } - - @Query( - "UPDATE caldav_tasks SET cd_remote_parent = :remoteParent WHERE cd_id = :id") - abstract void update(long id,String remoteParent); - - @Update - public abstract void update(Iterable tasks); - - @Delete - public abstract void delete(CaldavTask caldavTask); - - @Query("SELECT * FROM caldav_tasks WHERE cd_deleted > 0 AND cd_calendar = :calendar") - public abstract List getDeleted(String calendar); - - @Query("UPDATE caldav_tasks SET cd_deleted = :now WHERE cd_task IN (:tasks)") - public abstract void markDeleted(long now, List tasks); - - @Query("SELECT * FROM caldav_tasks WHERE cd_task = :taskId AND cd_deleted = 0 LIMIT 1") - public abstract CaldavTask getTask(long taskId); - - @Query("SELECT cd_remote_id FROM caldav_tasks WHERE cd_task = :taskId AND cd_deleted = 0") - public abstract String getRemoteIdForTask(long taskId); - - @Query("SELECT * FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_object = :object LIMIT 1") - public abstract CaldavTask getTask(String calendar, String object); - - @Query("SELECT * FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_remote_id = :remoteId") - public abstract CaldavTask getTaskByRemoteId(String calendar, String remoteId); - - @Query("SELECT * FROM caldav_tasks WHERE cd_task = :taskId") - public abstract List getTasks(long taskId); - - @Query("SELECT * FROM caldav_tasks WHERE cd_task in (:taskIds) AND cd_deleted = 0") - public abstract List getTasks(List taskIds); - - @Query( - "SELECT task.*, caldav_task.* FROM tasks AS task " - + "INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task " - + "WHERE cd_deleted = 0 AND cd_vtodo IS NOT NULL AND cd_vtodo != ''") - public abstract List getTasks(); - - @Query( - "SELECT task.*, caldav_task.* FROM tasks AS task " - + "INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task " - + "WHERE cd_calendar = :calendar " - + "AND modified > cd_last_sync " - + "AND cd_deleted = 0") - public abstract List getCaldavTasksToPush(String calendar); - - @Query("SELECT * FROM caldav_lists ORDER BY cdl_name COLLATE NOCASE") - public abstract List getCalendars(); - - @Query("SELECT * FROM caldav_lists WHERE cdl_uuid = :uuid LIMIT 1") - public abstract CaldavCalendar getCalendar(String uuid); - - @Query("SELECT cd_object FROM caldav_tasks WHERE cd_calendar = :calendar") - public abstract List getObjects(String calendar); - - public List getTasks(String calendar, List objects) { - return collect(objects, b -> getTasksInternal(calendar, b)); - } - - @Query("SELECT cd_task FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_object IN (:objects)") - abstract List getTasksInternal(String calendar, List objects); - - @Query("SELECT * FROM caldav_lists WHERE cdl_account = :account AND cdl_url NOT IN (:urls)") - public abstract List findDeletedCalendars(String account, List urls); - - @Query("SELECT * FROM caldav_lists WHERE cdl_account = :account AND cdl_url = :url LIMIT 1") - public abstract CaldavCalendar getCalendarByUrl(String account, String url); - - @Query( - "SELECT caldav_accounts.* from caldav_accounts" - + " INNER JOIN caldav_tasks ON cd_task = :task" - + " INNER JOIN caldav_lists ON cd_calendar = cdl_uuid" - + " WHERE cdl_account = cda_uuid") - public abstract CaldavAccount getAccountForTask(long task); - - @Query("SELECT DISTINCT cd_calendar FROM caldav_tasks WHERE cd_deleted = 0 AND cd_task IN (:tasks)") - public abstract List getCalendars(List tasks); - - @Query( - "SELECT caldav_lists.*, COUNT(tasks._id) AS count" - + " FROM caldav_lists" - + " LEFT JOIN caldav_tasks ON caldav_tasks.cd_calendar = caldav_lists.cdl_uuid" - + " LEFT JOIN tasks ON caldav_tasks.cd_task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil < :now AND cd_deleted = 0" - + " WHERE caldav_lists.cdl_account = :uuid" - + " GROUP BY caldav_lists.cdl_uuid") - public abstract List getCaldavFilters(String uuid, long now); - - @Query( - "SELECT tasks._id FROM tasks " - + "INNER JOIN tags ON tags.task = tasks._id " - + "INNER JOIN caldav_tasks ON cd_task = tasks._id " - + "GROUP BY tasks._id") - public abstract List getTasksWithTags(); - - @Query( - "UPDATE tasks SET parent = IFNULL((" - + " SELECT p.cd_task FROM caldav_tasks AS p" - + " INNER JOIN caldav_tasks ON caldav_tasks.cd_task = tasks._id" - + " WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent" - + " AND p.cd_calendar = caldav_tasks.cd_calendar" - + " AND p.cd_deleted = 0), 0)" - + "WHERE _id IN (SELECT _id FROM tasks INNER JOIN caldav_tasks ON _id = cd_task WHERE cd_deleted = 0)") - public abstract void updateParents(); - - @Query( - "UPDATE tasks SET parent = IFNULL((" - + " SELECT p.cd_task FROM caldav_tasks AS p" - + " INNER JOIN caldav_tasks " - + " ON caldav_tasks.cd_task = tasks._id" - + " AND caldav_tasks.cd_calendar = :calendar" - + " WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent" - + " AND p.cd_calendar = caldav_tasks.cd_calendar" - + " AND caldav_tasks.cd_deleted = 0), 0)" - + "WHERE _id IN (SELECT _id FROM tasks INNER JOIN caldav_tasks ON _id = cd_task WHERE cd_deleted = 0 AND cd_calendar = :calendar)") - public abstract void updateParents(String calendar); -} diff --git a/app/src/main/java/org/tasks/data/CaldavDao.kt b/app/src/main/java/org/tasks/data/CaldavDao.kt new file mode 100644 index 000000000..28794a090 --- /dev/null +++ b/app/src/main/java/org/tasks/data/CaldavDao.kt @@ -0,0 +1,167 @@ +package org.tasks.data + +import androidx.lifecycle.LiveData +import androidx.room.* +import io.reactivex.Single +import org.tasks.db.DbUtils +import org.tasks.filters.CaldavFilters + +@Dao +abstract class CaldavDao { + @Query("SELECT * FROM caldav_lists") + abstract fun subscribeToCalendars(): LiveData> + + @Query("SELECT * FROM caldav_lists WHERE cdl_uuid = :uuid LIMIT 1") + abstract fun getCalendarByUuid(uuid: String): CaldavCalendar? + + @Query("SELECT * FROM caldav_accounts WHERE cda_uuid = :uuid LIMIT 1") + abstract fun getAccountByUuid(uuid: String): CaldavAccount? + + @Query("SELECT COUNT(*) FROM caldav_accounts") + abstract fun accountCount(): Single + + @Query("SELECT * FROM caldav_accounts ORDER BY UPPER(cda_name) ASC") + abstract fun getAccounts(): List + + @Query("UPDATE caldav_accounts SET cda_collapsed = :collapsed WHERE cda_id = :id") + abstract fun setCollapsed(id: Long, collapsed: Boolean) + + @Insert + abstract fun insert(caldavAccount: CaldavAccount): Long + + @Update + abstract fun update(caldavAccount: CaldavAccount) + + fun insert(caldavCalendar: CaldavCalendar) { + caldavCalendar.id = insertInternal(caldavCalendar) + } + + @Insert + abstract fun insertInternal(caldavCalendar: CaldavCalendar): Long + + @Update + abstract fun update(caldavCalendar: CaldavCalendar) + + @Insert + abstract fun insert(caldavTask: CaldavTask): Long + + @Insert + abstract fun insert(tasks: Iterable) + + @Update + abstract fun update(caldavTask: CaldavTask) + + fun update(caldavTask: SubsetCaldav) { + update(caldavTask.id, caldavTask.remoteParent) + } + + @Query("UPDATE caldav_tasks SET cd_remote_parent = :remoteParent WHERE cd_id = :id") + abstract fun update(id: Long, remoteParent: String) + + @Update + abstract fun update(tasks: Iterable) + + @Delete + abstract fun delete(caldavTask: CaldavTask) + + @Query("SELECT * FROM caldav_tasks WHERE cd_deleted > 0 AND cd_calendar = :calendar") + abstract fun getDeleted(calendar: String): List + + @Query("UPDATE caldav_tasks SET cd_deleted = :now WHERE cd_task IN (:tasks)") + abstract fun markDeleted(now: Long, tasks: List) + + @Query("SELECT * FROM caldav_tasks WHERE cd_task = :taskId AND cd_deleted = 0 LIMIT 1") + abstract fun getTask(taskId: Long): CaldavTask? + + @Query("SELECT cd_remote_id FROM caldav_tasks WHERE cd_task = :taskId AND cd_deleted = 0") + abstract fun getRemoteIdForTask(taskId: Long): String? + + @Query("SELECT * FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_object = :obj LIMIT 1") + abstract fun getTask(calendar: String, obj: String): CaldavTask? + + @Query("SELECT * FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_remote_id = :remoteId") + abstract fun getTaskByRemoteId(calendar: String, remoteId: String): CaldavTask? + + @Query("SELECT * FROM caldav_tasks WHERE cd_task = :taskId") + abstract fun getTasks(taskId: Long): List + + @Query("SELECT * FROM caldav_tasks WHERE cd_task in (:taskIds) AND cd_deleted = 0") + abstract fun getTasks(taskIds: List): List + + @Query("SELECT task.*, caldav_task.* FROM tasks AS task " + + "INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task " + + "WHERE cd_deleted = 0 AND cd_vtodo IS NOT NULL AND cd_vtodo != ''") + abstract fun getTasks(): List + + @Query("SELECT task.*, caldav_task.* FROM tasks AS task " + + "INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task " + + "WHERE cd_calendar = :calendar " + + "AND modified > cd_last_sync " + + "AND cd_deleted = 0") + abstract fun getCaldavTasksToPush(calendar: String): List + + @Query("SELECT * FROM caldav_lists ORDER BY cdl_name COLLATE NOCASE") + abstract fun getCalendars(): List + + @Query("SELECT * FROM caldav_lists WHERE cdl_uuid = :uuid LIMIT 1") + abstract fun getCalendar(uuid: String): CaldavCalendar? + + @Query("SELECT cd_object FROM caldav_tasks WHERE cd_calendar = :calendar") + abstract fun getObjects(calendar: String): List + + fun getTasks(calendar: String, objects: List): List { + return DbUtils.collect(objects) { getTasksInternal(calendar, it!!) } + } + + @Query("SELECT cd_task FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_object IN (:objects)") + abstract fun getTasksInternal(calendar: String, objects: List): List + + @Query("SELECT * FROM caldav_lists WHERE cdl_account = :account AND cdl_url NOT IN (:urls)") + abstract fun findDeletedCalendars(account: String, urls: List): List + + @Query("SELECT * FROM caldav_lists WHERE cdl_account = :account AND cdl_url = :url LIMIT 1") + abstract fun getCalendarByUrl(account: String, url: String): CaldavCalendar? + + @Query("SELECT caldav_accounts.* from caldav_accounts" + + " INNER JOIN caldav_tasks ON cd_task = :task" + + " INNER JOIN caldav_lists ON cd_calendar = cdl_uuid" + + " WHERE cdl_account = cda_uuid") + abstract fun getAccountForTask(task: Long): CaldavAccount? + + @Query("SELECT DISTINCT cd_calendar FROM caldav_tasks WHERE cd_deleted = 0 AND cd_task IN (:tasks)") + abstract fun getCalendars(tasks: List): List + + @Query("SELECT caldav_lists.*, COUNT(tasks._id) AS count" + + " FROM caldav_lists" + + " LEFT JOIN caldav_tasks ON caldav_tasks.cd_calendar = caldav_lists.cdl_uuid" + + " LEFT JOIN tasks ON caldav_tasks.cd_task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil < :now AND cd_deleted = 0" + + " WHERE caldav_lists.cdl_account = :uuid" + + " GROUP BY caldav_lists.cdl_uuid") + abstract fun getCaldavFilters(uuid: String, now: Long): List + + @Query("SELECT tasks._id FROM tasks " + + "INNER JOIN tags ON tags.task = tasks._id " + + "INNER JOIN caldav_tasks ON cd_task = tasks._id " + + "GROUP BY tasks._id") + abstract fun getTasksWithTags(): List + + @Query("UPDATE tasks SET parent = IFNULL((" + + " SELECT p.cd_task FROM caldav_tasks AS p" + + " INNER JOIN caldav_tasks ON caldav_tasks.cd_task = tasks._id" + + " WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent" + + " AND p.cd_calendar = caldav_tasks.cd_calendar" + + " AND p.cd_deleted = 0), 0)" + + "WHERE _id IN (SELECT _id FROM tasks INNER JOIN caldav_tasks ON _id = cd_task WHERE cd_deleted = 0)") + abstract fun updateParents() + + @Query("UPDATE tasks SET parent = IFNULL((" + + " SELECT p.cd_task FROM caldav_tasks AS p" + + " INNER JOIN caldav_tasks " + + " ON caldav_tasks.cd_task = tasks._id" + + " AND caldav_tasks.cd_calendar = :calendar" + + " WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent" + + " AND p.cd_calendar = caldav_tasks.cd_calendar" + + " AND caldav_tasks.cd_deleted = 0), 0)" + + "WHERE _id IN (SELECT _id FROM tasks INNER JOIN caldav_tasks ON _id = cd_task WHERE cd_deleted = 0 AND cd_calendar = :calendar)") + abstract fun updateParents(calendar: String) +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/data/DeletionDao.java b/app/src/main/java/org/tasks/data/DeletionDao.java deleted file mode 100644 index 2dda5ae74..000000000 --- a/app/src/main/java/org/tasks/data/DeletionDao.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.tasks.data; - -import static org.tasks.db.DbUtils.batch; - -import androidx.room.Dao; -import androidx.room.Delete; -import androidx.room.Query; -import androidx.room.Transaction; -import java.util.ArrayList; -import java.util.List; - -@Dao -public abstract class DeletionDao { - - @Query("SELECT _id FROM tasks WHERE deleted > 0") - public abstract List getDeleted(); - - @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)") - abstract void deleteGoogleTasks(List ids); - - @Query("DELETE FROM tags WHERE task IN(:ids)") - abstract void deleteTags(List ids); - - @Query("DELETE FROM geofences WHERE task IN(:ids)") - abstract void deleteGeofences(List ids); - - @Query("DELETE FROM alarms WHERE task IN(:ids)") - abstract void deleteAlarms(List ids); - - @Query("DELETE FROM tasks WHERE _id IN(:ids)") - abstract void deleteTasks(List ids); - - @Transaction - public void delete(List ids) { - batch(ids, b -> { - deleteAlarms(b); - deleteGeofences(b); - deleteTags(b); - deleteGoogleTasks(b); - deleteCaldavTasks(b); - deleteTasks(b); - }); - } - - @Query("UPDATE tasks " - + "SET modified = (strftime('%s','now')*1000), deleted = (strftime('%s','now')*1000)" - + "WHERE _id IN(:ids)") - abstract void markDeletedInternal(List ids); - - public void markDeleted(Iterable ids) { - batch(ids, this::markDeletedInternal); - } - - @Query("SELECT gt_task FROM google_tasks WHERE gt_deleted = 0 AND gt_list_id = :listId") - abstract List getActiveGoogleTasks(String listId); - - @Delete - abstract void deleteGoogleTaskList(GoogleTaskList googleTaskList); - - @Transaction - public List delete(GoogleTaskList googleTaskList) { - List tasks = getActiveGoogleTasks(googleTaskList.getRemoteId()); - delete(tasks); - deleteGoogleTaskList(googleTaskList); - return tasks; - } - - @Delete - abstract void deleteGoogleTaskAccount(GoogleTaskAccount googleTaskAccount); - - @Query("SELECT * FROM google_task_lists WHERE gtl_account = :account ORDER BY gtl_title ASC") - abstract List getLists(String account); - - @Transaction - public List delete(GoogleTaskAccount googleTaskAccount) { - List deleted = new ArrayList<>(); - for (GoogleTaskList list : getLists(googleTaskAccount.getAccount())) { - deleted.addAll(delete(list)); - } - deleteGoogleTaskAccount(googleTaskAccount); - return deleted; - } - - @Query("SELECT cd_task FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_deleted = 0") - abstract List getActiveCaldavTasks(String calendar); - - @Delete - abstract void deleteCaldavCalendar(CaldavCalendar caldavCalendar); - - @Transaction - public List delete(CaldavCalendar caldavCalendar) { - List tasks = getActiveCaldavTasks(caldavCalendar.getUuid()); - delete(tasks); - deleteCaldavCalendar(caldavCalendar); - return tasks; - } - - @Query("SELECT * FROM caldav_lists WHERE cdl_account = :account") - abstract List getCalendars(String account); - - @Delete - abstract void deleteCaldavAccount(CaldavAccount caldavAccount); - - @Transaction - public List delete(CaldavAccount caldavAccount) { - List deleted = new ArrayList<>(); - for (CaldavCalendar calendar : getCalendars(caldavAccount.getUuid())) { - deleted.addAll(delete(calendar)); - } - deleteCaldavAccount(caldavAccount); - return deleted; - } -} diff --git a/app/src/main/java/org/tasks/data/DeletionDao.kt b/app/src/main/java/org/tasks/data/DeletionDao.kt new file mode 100644 index 000000000..9232deace --- /dev/null +++ b/app/src/main/java/org/tasks/data/DeletionDao.kt @@ -0,0 +1,113 @@ +package org.tasks.data + +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Query +import androidx.room.Transaction +import org.tasks.db.DbUtils +import java.util.* + +@Dao +abstract class DeletionDao { + @Query("SELECT _id FROM tasks WHERE deleted > 0") + abstract fun getDeleted(): List + + @Query("DELETE FROM caldav_tasks WHERE cd_task IN(:ids)") + abstract fun deleteCaldavTasks(ids: List) + + @Query("DELETE FROM google_tasks WHERE gt_task IN(:ids)") + abstract fun deleteGoogleTasks(ids: List) + + @Query("DELETE FROM tags WHERE task IN(:ids)") + abstract fun deleteTags(ids: List) + + @Query("DELETE FROM geofences WHERE task IN(:ids)") + abstract fun deleteGeofences(ids: List) + + @Query("DELETE FROM alarms WHERE task IN(:ids)") + abstract fun deleteAlarms(ids: List) + + @Query("DELETE FROM tasks WHERE _id IN(:ids)") + abstract fun deleteTasks(ids: List) + + @Transaction + open fun delete(ids: List) { + DbUtils.batch(ids) { + deleteAlarms(it) + deleteGeofences(it) + deleteTags(it) + deleteGoogleTasks(it) + deleteCaldavTasks(it) + deleteTasks(it) + } + } + + @Query("UPDATE tasks " + + "SET modified = (strftime('%s','now')*1000), deleted = (strftime('%s','now')*1000)" + + "WHERE _id IN(:ids)") + abstract fun markDeletedInternal(ids: List) + + fun markDeleted(ids: Iterable) { + DbUtils.batch(ids, this::markDeletedInternal) + } + + @Query("SELECT gt_task FROM google_tasks WHERE gt_deleted = 0 AND gt_list_id = :listId") + abstract fun getActiveGoogleTasks(listId: String): List + + @Delete + abstract fun deleteGoogleTaskList(googleTaskList: GoogleTaskList) + + @Transaction + open fun delete(googleTaskList: GoogleTaskList): List { + val tasks = getActiveGoogleTasks(googleTaskList.remoteId) + delete(tasks) + deleteGoogleTaskList(googleTaskList) + return tasks + } + + @Delete + abstract fun deleteGoogleTaskAccount(googleTaskAccount: GoogleTaskAccount) + + @Query("SELECT * FROM google_task_lists WHERE gtl_account = :account ORDER BY gtl_title ASC") + abstract fun getLists(account: String): List + + @Transaction + open fun delete(googleTaskAccount: GoogleTaskAccount): List { + val deleted = ArrayList() + for (list in getLists(googleTaskAccount.account)) { + deleted.addAll(delete(list)) + } + deleteGoogleTaskAccount(googleTaskAccount) + return deleted + } + + @Query("SELECT cd_task FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_deleted = 0") + abstract fun getActiveCaldavTasks(calendar: String): List + + @Delete + abstract fun deleteCaldavCalendar(caldavCalendar: CaldavCalendar) + + @Transaction + open fun delete(caldavCalendar: CaldavCalendar): List { + val tasks = getActiveCaldavTasks(caldavCalendar.uuid!!) + delete(tasks) + deleteCaldavCalendar(caldavCalendar) + return tasks + } + + @Query("SELECT * FROM caldav_lists WHERE cdl_account = :account") + abstract fun getCalendars(account: String): List + + @Delete + abstract fun deleteCaldavAccount(caldavAccount: CaldavAccount) + + @Transaction + open fun delete(caldavAccount: CaldavAccount): List { + val deleted = ArrayList() + for (calendar in getCalendars(caldavAccount.uuid!!)) { + deleted.addAll(delete(calendar)) + } + deleteCaldavAccount(caldavAccount) + return deleted + } +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/data/FilterDao.java b/app/src/main/java/org/tasks/data/FilterDao.java deleted file mode 100644 index 50af88622..000000000 --- a/app/src/main/java/org/tasks/data/FilterDao.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.tasks.data; - -import androidx.room.Dao; -import androidx.room.Insert; -import androidx.room.Query; -import androidx.room.Update; -import java.util.List; - -@Dao -public interface FilterDao { - - @Update - void update(Filter filter); - - @Query("DELETE FROM filters WHERE _id = :id") - void delete(long id); - - @Query("SELECT * FROM filters WHERE title = :title COLLATE NOCASE LIMIT 1") - Filter getByName(String title); - - @Insert - long insert(Filter filter); - - @Query("SELECT * FROM filters") - List getFilters(); - - @Query("SELECT * FROM filters WHERE _id = :id LIMIT 1") - Filter getById(long id); - - @Query("SELECT * FROM filters") - List getAll(); -} diff --git a/app/src/main/java/org/tasks/data/FilterDao.kt b/app/src/main/java/org/tasks/data/FilterDao.kt new file mode 100644 index 000000000..10ef4a475 --- /dev/null +++ b/app/src/main/java/org/tasks/data/FilterDao.kt @@ -0,0 +1,30 @@ +package org.tasks.data + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.Query +import androidx.room.Update + +@Dao +interface FilterDao { + @Update + fun update(filter: Filter) + + @Query("DELETE FROM filters WHERE _id = :id") + fun delete(id: Long) + + @Query("SELECT * FROM filters WHERE title = :title COLLATE NOCASE LIMIT 1") + fun getByName(title: String): Filter? + + @Insert + fun insert(filter: Filter): Long + + @Query("SELECT * FROM filters") + fun getFilters(): List + + @Query("SELECT * FROM filters WHERE _id = :id LIMIT 1") + fun getById(id: Long): Filter? + + @Query("SELECT * FROM filters") + fun getAll(): List +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/data/GoogleTaskListDao.java b/app/src/main/java/org/tasks/data/GoogleTaskListDao.java deleted file mode 100644 index 7d8b0b1e4..000000000 --- a/app/src/main/java/org/tasks/data/GoogleTaskListDao.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.tasks.data; - -import androidx.lifecycle.LiveData; -import androidx.room.Dao; -import androidx.room.Insert; -import androidx.room.OnConflictStrategy; -import androidx.room.Query; -import androidx.room.Update; -import io.reactivex.Single; -import java.util.List; -import org.tasks.filters.GoogleTaskFilters; - -@Dao -public interface GoogleTaskListDao { - - @Query("SELECT COUNT(*) FROM google_task_accounts") - Single accountCount(); - - @Query("SELECT * FROM google_task_accounts") - List getAccounts(); - - @Query("SELECT * FROM google_task_accounts WHERE gta_account = :account COLLATE NOCASE LIMIT 1") - GoogleTaskAccount getAccount(String account); - - @Query("SELECT * FROM google_task_lists WHERE gtl_id = :id") - GoogleTaskList getById(long id); - - @Query("SELECT * FROM google_task_lists WHERE gtl_account = :account ORDER BY gtl_title ASC") - List getLists(String account); - - @Query("SELECT * FROM google_task_lists WHERE gtl_remote_id = :remoteId LIMIT 1") - GoogleTaskList getByRemoteId(String remoteId); - - @Query("SELECT * FROM google_task_lists WHERE gtl_remote_id IN (:remoteIds)") - List getByRemoteId(List remoteIds); - - @Query("SELECT * FROM google_task_lists") - LiveData> subscribeToLists(); - - @Query( - "SELECT * FROM google_task_lists WHERE gtl_remote_id = :remoteId AND IFNULL(gtl_account, '') = ''") - GoogleTaskList findExistingList(String remoteId); - - @Query("SELECT * FROM google_task_lists") - List getAllLists(); - - @Query("UPDATE google_task_lists SET gtl_last_sync = 0 WHERE gtl_account = :account") - void resetLastSync(String account); - - @Insert(onConflict = OnConflictStrategy.REPLACE) - long insertOrReplace(GoogleTaskList googleTaskList); - - @Insert - long insert(GoogleTaskList googleTaskList); - - @Insert - void insert(GoogleTaskAccount googleTaskAccount); - - @Update - void update(GoogleTaskAccount account); - - @Update - void update(GoogleTaskList list); - - @Query( - "SELECT google_task_lists.*, COUNT(tasks._id) AS count" - + " FROM google_task_lists " - + " LEFT JOIN google_tasks ON google_tasks.gt_list_id = google_task_lists.gtl_remote_id" - + " LEFT JOIN tasks ON google_tasks.gt_task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil < :now AND gt_deleted = 0" - + " WHERE google_task_lists.gtl_account = :account" - + " GROUP BY google_task_lists.gtl_remote_id") - List getGoogleTaskFilters(String account, long now); -} diff --git a/app/src/main/java/org/tasks/data/GoogleTaskListDao.kt b/app/src/main/java/org/tasks/data/GoogleTaskListDao.kt new file mode 100644 index 000000000..f723460fc --- /dev/null +++ b/app/src/main/java/org/tasks/data/GoogleTaskListDao.kt @@ -0,0 +1,65 @@ +package org.tasks.data + +import androidx.lifecycle.LiveData +import androidx.room.* +import io.reactivex.Single +import org.tasks.filters.GoogleTaskFilters + +@Dao +interface GoogleTaskListDao { + @Query("SELECT COUNT(*) FROM google_task_accounts") + fun accountCount(): Single + + @Query("SELECT * FROM google_task_accounts") + fun getAccounts(): List + + @Query("SELECT * FROM google_task_accounts WHERE gta_account = :account COLLATE NOCASE LIMIT 1") + fun getAccount(account: String): GoogleTaskAccount? + + @Query("SELECT * FROM google_task_lists WHERE gtl_id = :id") + fun getById(id: Long): GoogleTaskList? + + @Query("SELECT * FROM google_task_lists WHERE gtl_account = :account ORDER BY gtl_title ASC") + fun getLists(account: String): List + + @Query("SELECT * FROM google_task_lists WHERE gtl_remote_id = :remoteId LIMIT 1") + fun getByRemoteId(remoteId: String): GoogleTaskList? + + @Query("SELECT * FROM google_task_lists WHERE gtl_remote_id IN (:remoteIds)") + fun getByRemoteId(remoteIds: List): List + + @Query("SELECT * FROM google_task_lists") + fun subscribeToLists(): LiveData> + + @Query("SELECT * FROM google_task_lists WHERE gtl_remote_id = :remoteId AND IFNULL(gtl_account, '') = ''") + fun findExistingList(remoteId: String): GoogleTaskList? + + @Query("SELECT * FROM google_task_lists") + fun getAllLists(): List + + @Query("UPDATE google_task_lists SET gtl_last_sync = 0 WHERE gtl_account = :account") + fun resetLastSync(account: String) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertOrReplace(googleTaskList: GoogleTaskList): Long + + @Insert + fun insert(googleTaskList: GoogleTaskList): Long + + @Insert + fun insert(googleTaskAccount: GoogleTaskAccount) + + @Update + fun update(account: GoogleTaskAccount) + + @Update + fun update(list: GoogleTaskList) + + @Query("SELECT google_task_lists.*, COUNT(tasks._id) AS count" + + " FROM google_task_lists " + + " LEFT JOIN google_tasks ON google_tasks.gt_list_id = google_task_lists.gtl_remote_id" + + " LEFT JOIN tasks ON google_tasks.gt_task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil < :now AND gt_deleted = 0" + + " WHERE google_task_lists.gtl_account = :account" + + " GROUP BY google_task_lists.gtl_remote_id") + fun getGoogleTaskFilters(account: String, now: Long): List +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/data/LocationDao.java b/app/src/main/java/org/tasks/data/LocationDao.java deleted file mode 100644 index 76cdbd844..000000000 --- a/app/src/main/java/org/tasks/data/LocationDao.java +++ /dev/null @@ -1,126 +0,0 @@ -package org.tasks.data; - -import androidx.lifecycle.LiveData; -import androidx.room.Dao; -import androidx.room.Delete; -import androidx.room.Insert; -import androidx.room.OnConflictStrategy; -import androidx.room.Query; -import androidx.room.Update; -import io.reactivex.Single; -import java.util.List; -import org.tasks.filters.LocationFilters; - -@Dao -public interface LocationDao { - - @Query( - "SELECT places.*" - + " FROM places" - + " INNER JOIN geofences ON geofences.place = places.uid" - + " INNER JOIN tasks ON geofences.task = tasks._id" - + " WHERE tasks.completed = 0 AND tasks.deleted = 0" - + " AND (geofences.arrival > 0 OR geofences.departure > 0)" - + " GROUP BY places.uid") - List getPlacesWithGeofences(); - - @Query( - "SELECT places.*," - + " max(geofences.arrival) as arrival," - + " max(geofences.departure) as departure," - + " min(geofences.radius) as radius" - + " FROM places" - + " INNER JOIN geofences ON geofences.place = places.uid" - + " INNER JOIN tasks ON tasks._id = geofences.task" - + " WHERE place = :uid AND tasks.completed = 0 AND tasks.deleted = 0" - + " AND (geofences.arrival > 0 OR geofences.departure > 0)" - + " GROUP BY places.uid") - MergedGeofence getGeofencesByPlace(String uid); - - @Query("DELETE FROM geofences WHERE place = :place") - void deleteGeofencesByPlace(String place); - - @Query( - "SELECT geofences.* FROM geofences" - + " INNER JOIN tasks ON tasks._id = geofences.task" - + " WHERE place = :place AND arrival = 1 AND tasks.completed = 0" - + " AND tasks.deleted = 0 AND tasks.snoozeTime < :now AND tasks.hideUntil < :now") - List getArrivalGeofences(String place, long now); - - @Query( - "SELECT geofences.* FROM geofences" - + " INNER JOIN tasks ON tasks._id = geofences.task" - + " WHERE place = :place AND departure = 1 AND tasks.completed = 0" - + " AND tasks.deleted = 0 AND tasks.snoozeTime < :now AND tasks.hideUntil < :now") - List getDepartureGeofences(String place, long now); - - @Query( - "SELECT * FROM geofences" - + " INNER JOIN places ON geofences.place = places.uid" - + " WHERE task = :taskId ORDER BY name ASC LIMIT 1") - Location getGeofences(long taskId); - - @Query( - "SELECT geofences.*, places.* FROM geofences INNER JOIN places ON geofences.place = places.uid INNER JOIN tasks ON tasks._id = geofences.task WHERE tasks._id = :taskId AND tasks.deleted = 0 AND tasks.completed = 0") - List getActiveGeofences(long taskId); - - @Query("SELECT places.*" - + " FROM places" - + " INNER JOIN geofences ON geofences.place = places.uid" - + " WHERE geofences.task = :taskId") - Place getPlaceForTask(long taskId); - - @Query( - "SELECT geofences.*, places.* FROM geofences INNER JOIN places ON geofences.place = places.uid INNER JOIN tasks ON tasks._id = geofences.task WHERE tasks.deleted = 0 AND tasks.completed = 0") - List getActiveGeofences(); - - @Query("SELECT COUNT(*) FROM geofences") - Single geofenceCount(); - - @Delete - void delete(Geofence location); - - @Delete - void delete(Place place); - - @Insert - long insert(Geofence location); - - @Insert(onConflict = OnConflictStrategy.IGNORE) - long insert(Place place); - - @Update - void update(Place place); - - @Update - void update(Geofence geofence); - - @Query("SELECT * FROM places WHERE uid = :uid LIMIT 1") - Place getByUid(String uid); - - @Query("SELECT * FROM geofences WHERE task = :taskId") - List getGeofencesForTask(long taskId); - - @Query("SELECT * FROM places") - List getPlaces(); - - @Query("SELECT * FROM places WHERE place_id = :id") - Place getPlace(long id); - - @Query("SELECT * FROM places WHERE uid = :uid") - Place getPlace(String uid); - - @Query( - "SELECT places.*, IFNULL(COUNT(geofence_id),0) AS count FROM places LEFT OUTER JOIN geofences ON geofences.place = places.uid GROUP BY uid ORDER BY COUNT(geofence_id) DESC") - LiveData> getPlaceUsage(); - - @Query("SELECT * FROM places WHERE latitude LIKE :latitude AND longitude LIKE :longitude") - Place findPlace(String latitude, String longitude); - - @Query("SELECT places.*, COUNT(tasks._id) AS count FROM places " - + " LEFT JOIN geofences ON geofences.place = places.uid " - + " LEFT JOIN tasks ON geofences.task = tasks._id AND tasks.completed = 0 AND tasks.deleted = 0 AND tasks.hideUntil < :now" - + " GROUP BY places.uid" - + " ORDER BY name COLLATE NOCASE ASC") - List getPlaceFilters(long now); -} diff --git a/app/src/main/java/org/tasks/data/LocationDao.kt b/app/src/main/java/org/tasks/data/LocationDao.kt new file mode 100644 index 000000000..ecf633230 --- /dev/null +++ b/app/src/main/java/org/tasks/data/LocationDao.kt @@ -0,0 +1,111 @@ +package org.tasks.data + +import androidx.lifecycle.LiveData +import androidx.room.* +import io.reactivex.Single +import org.tasks.filters.LocationFilters + +@Dao +interface LocationDao { + @Query("SELECT places.*" + + " FROM places" + + " INNER JOIN geofences ON geofences.place = places.uid" + + " INNER JOIN tasks ON geofences.task = tasks._id" + + " WHERE tasks.completed = 0 AND tasks.deleted = 0" + + " AND (geofences.arrival > 0 OR geofences.departure > 0)" + + " GROUP BY places.uid") + fun getPlacesWithGeofences(): List + + @Query("SELECT places.*," + + " max(geofences.arrival) as arrival," + + " max(geofences.departure) as departure," + + " min(geofences.radius) as radius" + + " FROM places" + + " INNER JOIN geofences ON geofences.place = places.uid" + + " INNER JOIN tasks ON tasks._id = geofences.task" + + " WHERE place = :uid AND tasks.completed = 0 AND tasks.deleted = 0" + + " AND (geofences.arrival > 0 OR geofences.departure > 0)" + + " GROUP BY places.uid") + fun getGeofencesByPlace(uid: String): MergedGeofence? + + @Query("DELETE FROM geofences WHERE place = :place") + fun deleteGeofencesByPlace(place: String) + + @Query("SELECT geofences.* FROM geofences" + + " INNER JOIN tasks ON tasks._id = geofences.task" + + " WHERE place = :place AND arrival = 1 AND tasks.completed = 0" + + " AND tasks.deleted = 0 AND tasks.snoozeTime < :now AND tasks.hideUntil < :now") + fun getArrivalGeofences(place: String, now: Long): List + + @Query("SELECT geofences.* FROM geofences" + + " INNER JOIN tasks ON tasks._id = geofences.task" + + " WHERE place = :place AND departure = 1 AND tasks.completed = 0" + + " AND tasks.deleted = 0 AND tasks.snoozeTime < :now AND tasks.hideUntil < :now") + fun getDepartureGeofences(place: String, now: Long): List + + @Query("SELECT * FROM geofences" + + " INNER JOIN places ON geofences.place = places.uid" + + " WHERE task = :taskId ORDER BY name ASC LIMIT 1") + fun getGeofences(taskId: Long): Location? + + @Query("SELECT geofences.*, places.* FROM geofences INNER JOIN places ON geofences.place = places.uid INNER JOIN tasks ON tasks._id = geofences.task WHERE tasks._id = :taskId AND tasks.deleted = 0 AND tasks.completed = 0") + fun getActiveGeofences(taskId: Long): List + + @Query("SELECT places.*" + + " FROM places" + + " INNER JOIN geofences ON geofences.place = places.uid" + + " WHERE geofences.task = :taskId") + fun getPlaceForTask(taskId: Long): Place? + + @Query("SELECT geofences.*, places.* FROM geofences INNER JOIN places ON geofences.place = places.uid INNER JOIN tasks ON tasks._id = geofences.task WHERE tasks.deleted = 0 AND tasks.completed = 0") + fun getActiveGeofences(): List + + @Query("SELECT COUNT(*) FROM geofences") + fun geofenceCount(): Single + + @Delete + fun delete(location: Geofence) + + @Delete + fun delete(place: Place) + + @Insert + fun insert(location: Geofence): Long + + @Insert(onConflict = OnConflictStrategy.IGNORE) + fun insert(place: Place): Long + + @Update + fun update(place: Place) + + @Update + fun update(geofence: Geofence) + + @Query("SELECT * FROM places WHERE uid = :uid LIMIT 1") + fun getByUid(uid: String): Place? + + @Query("SELECT * FROM geofences WHERE task = :taskId") + fun getGeofencesForTask(taskId: Long): List + + @Query("SELECT * FROM places") + fun getPlaces(): List + + @Query("SELECT * FROM places WHERE place_id = :id") + fun getPlace(id: Long): Place? + + @Query("SELECT * FROM places WHERE uid = :uid") + fun getPlace(uid: String): Place? + + @Query("SELECT places.*, IFNULL(COUNT(geofence_id),0) AS count FROM places LEFT OUTER JOIN geofences ON geofences.place = places.uid GROUP BY uid ORDER BY COUNT(geofence_id) DESC") + fun getPlaceUsage(): LiveData> + + @Query("SELECT * FROM places WHERE latitude LIKE :latitude AND longitude LIKE :longitude") + fun findPlace(latitude: String, longitude: String): Place? + + @Query("SELECT places.*, COUNT(tasks._id) AS count FROM places " + + " LEFT JOIN geofences ON geofences.place = places.uid " + + " LEFT JOIN tasks ON geofences.task = tasks._id AND tasks.completed = 0 AND tasks.deleted = 0 AND tasks.hideUntil < :now" + + " GROUP BY places.uid" + + " ORDER BY name COLLATE NOCASE ASC") + fun getPlaceFilters(now: Long): List +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/data/TaskAttachmentDao.java b/app/src/main/java/org/tasks/data/TaskAttachmentDao.java deleted file mode 100644 index 23f90d72d..000000000 --- a/app/src/main/java/org/tasks/data/TaskAttachmentDao.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.tasks.data; - -import androidx.room.Dao; -import androidx.room.Delete; -import androidx.room.Insert; -import androidx.room.OnConflictStrategy; -import androidx.room.Query; -import androidx.room.Update; -import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.helper.UUIDHelper; -import java.util.List; - -@Dao -public abstract class TaskAttachmentDao { - - @Query("SELECT * FROM task_attachments WHERE task_id = :taskUuid") - public abstract List getAttachments(String taskUuid); - - @Query( - "SELECT task_attachments.* FROM task_attachments INNER JOIN tasks ON tasks._id = :task WHERE task_id = tasks.remoteId") - public abstract List getAttachments(long task); - - @Query("SELECT * FROM task_attachments") - public abstract List getAttachments(); - - @Delete - public abstract void delete(TaskAttachment taskAttachment); - - @Insert(onConflict = OnConflictStrategy.REPLACE) - public abstract void insert(TaskAttachment attachment); - - @Update - public abstract void update(TaskAttachment attachment); - - public void createNew(TaskAttachment attachment) { - if (Task.isUuidEmpty(attachment.getRemoteId())) { - attachment.setRemoteId(UUIDHelper.newUUID()); - } - insert(attachment); - } -} diff --git a/app/src/main/java/org/tasks/data/TaskAttachmentDao.kt b/app/src/main/java/org/tasks/data/TaskAttachmentDao.kt new file mode 100644 index 000000000..67fbfa8a9 --- /dev/null +++ b/app/src/main/java/org/tasks/data/TaskAttachmentDao.kt @@ -0,0 +1,33 @@ +package org.tasks.data + +import androidx.room.* +import com.todoroo.astrid.data.Task +import com.todoroo.astrid.helper.UUIDHelper + +@Dao +abstract class TaskAttachmentDao { + @Query("SELECT * FROM task_attachments WHERE task_id = :taskUuid") + abstract fun getAttachments(taskUuid: String): List + + @Query("SELECT task_attachments.* FROM task_attachments INNER JOIN tasks ON tasks._id = :task WHERE task_id = tasks.remoteId") + abstract fun getAttachments(task: Long): List + + @Query("SELECT * FROM task_attachments") + abstract fun getAttachments(): List + + @Delete + abstract fun delete(taskAttachment: TaskAttachment) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + abstract fun insert(attachment: TaskAttachment) + + @Update + abstract fun update(attachment: TaskAttachment) + + fun createNew(attachment: TaskAttachment) { + if (Task.isUuidEmpty(attachment.remoteId)) { + attachment.remoteId = UUIDHelper.newUUID() + } + insert(attachment) + } +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/data/TaskListMetadataDao.java b/app/src/main/java/org/tasks/data/TaskListMetadataDao.java deleted file mode 100644 index 27df2edfd..000000000 --- a/app/src/main/java/org/tasks/data/TaskListMetadataDao.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.tasks.data; - -import androidx.room.Dao; -import androidx.room.Insert; -import androidx.room.Query; -import androidx.room.Update; - -@Dao -public abstract class TaskListMetadataDao { - - @Query("SELECT * from task_list_metadata where tag_uuid = :tagUuid OR filter = :tagUuid LIMIT 1") - public abstract TaskListMetadata fetchByTagOrFilter(String tagUuid); - - @Update - public abstract void update(TaskListMetadata taskListMetadata); - - @Insert - abstract long insert(TaskListMetadata taskListMetadata); - - public void createNew(TaskListMetadata taskListMetadata) { - taskListMetadata.setId(insert(taskListMetadata)); - } -} diff --git a/app/src/main/java/org/tasks/data/TaskListMetadataDao.kt b/app/src/main/java/org/tasks/data/TaskListMetadataDao.kt new file mode 100644 index 000000000..5c8db9673 --- /dev/null +++ b/app/src/main/java/org/tasks/data/TaskListMetadataDao.kt @@ -0,0 +1,22 @@ +package org.tasks.data + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.Query +import androidx.room.Update + +@Dao +abstract class TaskListMetadataDao { + @Query("SELECT * from task_list_metadata where tag_uuid = :tagUuid OR filter = :tagUuid LIMIT 1") + abstract fun fetchByTagOrFilter(tagUuid: String): TaskListMetadata? + + @Update + abstract fun update(taskListMetadata: TaskListMetadata) + + @Insert + abstract fun insert(taskListMetadata: TaskListMetadata): Long + + fun createNew(taskListMetadata: TaskListMetadata) { + taskListMetadata.id = insert(taskListMetadata) + } +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/data/UserActivityDao.java b/app/src/main/java/org/tasks/data/UserActivityDao.java deleted file mode 100644 index 4dcc1f258..000000000 --- a/app/src/main/java/org/tasks/data/UserActivityDao.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.tasks.data; - -import androidx.room.Dao; -import androidx.room.Delete; -import androidx.room.Insert; -import androidx.room.Query; -import androidx.room.Update; -import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.helper.UUIDHelper; -import java.util.List; - -@Dao -public abstract class UserActivityDao { - - @Insert - public abstract void insert(UserActivity userActivity); - - @Update - public abstract void update(UserActivity userActivity); - - @Delete - public abstract void delete(UserActivity userActivity); - - @Query("SELECT * FROM userActivity WHERE target_id = :taskUuid ORDER BY created_at DESC ") - public abstract List getCommentsForTask(String taskUuid); - - @Query( - "SELECT userActivity.* FROM userActivity INNER JOIN tasks ON tasks._id = :task WHERE target_id = tasks.remoteId") - public abstract List getComments(long task); - - @Query("SELECT * FROM userActivity") - public abstract List getComments(); - - public void createNew(UserActivity item) { - if (item.getCreated() == null || item.getCreated() == 0L) { - item.setCreated(DateUtilities.now()); - } - if (Task.isUuidEmpty(item.getRemoteId())) { - item.setRemoteId(UUIDHelper.newUUID()); - } - insert(item); - } -} diff --git a/app/src/main/java/org/tasks/data/UserActivityDao.kt b/app/src/main/java/org/tasks/data/UserActivityDao.kt new file mode 100644 index 000000000..d497694d1 --- /dev/null +++ b/app/src/main/java/org/tasks/data/UserActivityDao.kt @@ -0,0 +1,37 @@ +package org.tasks.data + +import androidx.room.* +import com.todoroo.andlib.utility.DateUtilities +import com.todoroo.astrid.data.Task +import com.todoroo.astrid.helper.UUIDHelper + +@Dao +abstract class UserActivityDao { + @Insert + abstract fun insert(userActivity: UserActivity) + + @Update + abstract fun update(userActivity: UserActivity) + + @Delete + abstract fun delete(userActivity: UserActivity) + + @Query("SELECT * FROM userActivity WHERE target_id = :taskUuid ORDER BY created_at DESC ") + abstract fun getCommentsForTask(taskUuid: String): List + + @Query("SELECT userActivity.* FROM userActivity INNER JOIN tasks ON tasks._id = :task WHERE target_id = tasks.remoteId") + abstract fun getComments(task: Long): List + + @Query("SELECT * FROM userActivity") + abstract fun getComments(): List + + fun createNew(item: UserActivity) { + if (item.created == null || item.created == 0L) { + item.created = DateUtilities.now() + } + if (Task.isUuidEmpty(item.remoteId)) { + item.remoteId = UUIDHelper.newUUID() + } + insert(item) + } +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/notifications/NotificationDao.java b/app/src/main/java/org/tasks/notifications/NotificationDao.java deleted file mode 100644 index ce112f2da..000000000 --- a/app/src/main/java/org/tasks/notifications/NotificationDao.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.tasks.notifications; - -import androidx.room.Dao; -import androidx.room.Insert; -import androidx.room.OnConflictStrategy; -import androidx.room.Query; -import java.util.List; - -@Dao -public interface NotificationDao { - - @Query("SELECT task FROM notification") - List getAll(); - - @Query("SELECT * FROM notification ORDER BY timestamp DESC") - List getAllOrdered(); - - @Insert(onConflict = OnConflictStrategy.REPLACE) - void insertAll(List notifications); - - @Query("DELETE FROM notification WHERE task = :taskId") - void delete(long taskId); - - @Query("DELETE FROM notification WHERE task IN(:taskIds)") - void deleteAll(List taskIds); - - @Query("SELECT MAX(timestamp) FROM notification") - long latestTimestamp(); -} diff --git a/app/src/main/java/org/tasks/notifications/NotificationDao.kt b/app/src/main/java/org/tasks/notifications/NotificationDao.kt new file mode 100644 index 000000000..1dfcf0def --- /dev/null +++ b/app/src/main/java/org/tasks/notifications/NotificationDao.kt @@ -0,0 +1,27 @@ +package org.tasks.notifications + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query + +@Dao +interface NotificationDao { + @Query("SELECT task FROM notification") + fun getAll(): List + + @Query("SELECT * FROM notification ORDER BY timestamp DESC") + fun getAllOrdered(): List + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertAll(notifications: List) + + @Query("DELETE FROM notification WHERE task = :taskId") + fun delete(taskId: Long) + + @Query("DELETE FROM notification WHERE task IN(:taskIds)") + fun deleteAll(taskIds: List) + + @Query("SELECT MAX(timestamp) FROM notification") + fun latestTimestamp(): Long +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt b/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt index 782a40f7c..79f6196a3 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt @@ -129,7 +129,7 @@ class Synchronization : InjectingPreferenceFragment() { } private fun addGoogleTasksAccounts(category: PreferenceCategory): Boolean { - val accounts: List = googleTaskListDao.accounts + val accounts: List = googleTaskListDao.getAccounts() for (googleTaskAccount in accounts) { val account = googleTaskAccount.account val preference = Preference(context) @@ -168,7 +168,7 @@ class Synchronization : InjectingPreferenceFragment() { } private fun addCaldavAccounts(category: PreferenceCategory): Boolean { - val accounts: List = caldavDao.accounts + val accounts: List = caldavDao.getAccounts() for (account in accounts) { val preference = Preference(context) preference.title = account.name