From 505c8c29d586da3263df4a416ddc39aa07f6acad Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 26 May 2024 08:06:00 -0500 Subject: [PATCH] Make sure dao methods are suspending --- .../org/tasks/caldav/CaldavSynchronizer.kt | 40 ++++++++++++++----- .../kotlin/org/tasks/data/dao/CaldavDao.kt | 2 +- .../org/tasks/data/dao/ContentProviderDao.kt | 2 +- .../kotlin/org/tasks/data/dao/PrincipalDao.kt | 20 +++++----- .../org/tasks/data/dao/TaskAttachmentDao.kt | 11 +++-- .../kotlin/org/tasks/data/dao/UpgraderDao.kt | 2 +- 6 files changed, 51 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.kt b/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.kt index 87ce56481..9bcc995bd 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.kt +++ b/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.kt @@ -1,19 +1,28 @@ package org.tasks.caldav import android.content.Context -import at.bitfire.dav4jvm.* +import at.bitfire.dav4jvm.DavCalendar import at.bitfire.dav4jvm.DavCalendar.Companion.MIME_ICALENDAR +import at.bitfire.dav4jvm.DavResource +import at.bitfire.dav4jvm.Property +import at.bitfire.dav4jvm.PropertyRegistry +import at.bitfire.dav4jvm.Response import at.bitfire.dav4jvm.Response.HrefRelation import at.bitfire.dav4jvm.exception.DavException import at.bitfire.dav4jvm.exception.HttpException import at.bitfire.dav4jvm.exception.ServiceUnavailableException import at.bitfire.dav4jvm.exception.UnauthorizedException -import at.bitfire.dav4jvm.property.* +import at.bitfire.dav4jvm.property.CalendarColor +import at.bitfire.dav4jvm.property.CalendarData +import at.bitfire.dav4jvm.property.CurrentUserPrincipal +import at.bitfire.dav4jvm.property.CurrentUserPrivilegeSet +import at.bitfire.dav4jvm.property.DisplayName +import at.bitfire.dav4jvm.property.GetCTag +import at.bitfire.dav4jvm.property.GetETag import at.bitfire.dav4jvm.property.GetETag.Companion.fromResponse +import at.bitfire.dav4jvm.property.SyncToken import at.bitfire.ical4android.ICalendar.Companion.prodId import com.todoroo.astrid.dao.TaskDao -import org.tasks.data.entity.Task -import org.tasks.data.UUIDHelper import com.todoroo.astrid.service.TaskDeleter import dagger.hilt.android.qualifiers.ApplicationContext import net.fortuna.ical4j.model.property.ProdId @@ -28,19 +37,30 @@ import org.tasks.Strings.isNullOrEmpty import org.tasks.analytics.Firebase import org.tasks.billing.Inventory import org.tasks.caldav.iCalendar.Companion.fromVtodo -import org.tasks.caldav.property.* +import org.tasks.caldav.property.Invite +import org.tasks.caldav.property.OCAccess +import org.tasks.caldav.property.OCInvite +import org.tasks.caldav.property.OCOwnerPrincipal +import org.tasks.caldav.property.OCUser import org.tasks.caldav.property.PropertyUtils.register +import org.tasks.caldav.property.ShareAccess import org.tasks.caldav.property.ShareAccess.Companion.NOT_SHARED import org.tasks.caldav.property.ShareAccess.Companion.NO_ACCESS import org.tasks.caldav.property.ShareAccess.Companion.READ import org.tasks.caldav.property.ShareAccess.Companion.READ_WRITE import org.tasks.caldav.property.ShareAccess.Companion.SHARED_OWNER +import org.tasks.caldav.property.Sharee +import org.tasks.data.UUIDHelper +import org.tasks.data.dao.CaldavDao +import org.tasks.data.dao.PrincipalDao +import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount.Companion.ERROR_UNAUTHORIZED import org.tasks.data.entity.CaldavAccount.Companion.SERVER_OPEN_XCHANGE import org.tasks.data.entity.CaldavAccount.Companion.SERVER_OWNCLOUD import org.tasks.data.entity.CaldavAccount.Companion.SERVER_SABREDAV import org.tasks.data.entity.CaldavAccount.Companion.SERVER_TASKS import org.tasks.data.entity.CaldavAccount.Companion.SERVER_UNKNOWN +import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_OWNER import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_ONLY import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_WRITE @@ -50,12 +70,9 @@ import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_DECLINED import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_INVALID import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_NO_RESPONSE import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_UNKNOWN -import org.tasks.data.dao.CaldavDao -import org.tasks.data.dao.PrincipalDao -import org.tasks.data.entity.CaldavAccount -import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.PrincipalAccess +import org.tasks.data.entity.Task import timber.log.Timber import java.io.IOException import java.net.ConnectException @@ -202,6 +219,9 @@ class CaldavSynchronizer @Inject constructor( } private suspend fun setError(account: CaldavAccount, message: String?) { + if (!message.isNullOrBlank()) { + Timber.e("${account.name}: $message") + } account.error = message caldavDao.update(account) localBroadcastManager.broadcastRefreshList() @@ -362,7 +382,7 @@ class CaldavSynchronizer @Inject constructor( Timber.d("SENT %s", caldavTask) } - fun Response.principals( + suspend fun Response.principals( account: CaldavAccount, list: CaldavCalendar ): List { diff --git a/data/src/commonMain/kotlin/org/tasks/data/dao/CaldavDao.kt b/data/src/commonMain/kotlin/org/tasks/data/dao/CaldavDao.kt index 684cad605..95e336330 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/dao/CaldavDao.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/dao/CaldavDao.kt @@ -29,7 +29,7 @@ const val APPLE_EPOCH = 978307200000L // 1/1/2001 GMT @Dao abstract class CaldavDao { @Query("SELECT COUNT(*) FROM caldav_lists WHERE cdl_account = :account") - abstract fun listCount(account: String): Int + abstract suspend fun listCount(account: String): Int @Query("SELECT * FROM caldav_lists") abstract fun subscribeToCalendars(): Flow> diff --git a/data/src/commonMain/kotlin/org/tasks/data/dao/ContentProviderDao.kt b/data/src/commonMain/kotlin/org/tasks/data/dao/ContentProviderDao.kt index 645dc1bcd..ad40eb771 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/dao/ContentProviderDao.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/dao/ContentProviderDao.kt @@ -5,8 +5,8 @@ import androidx.room.Dao import androidx.room.Query import androidx.room.RawQuery import androidx.sqlite.db.SupportSQLiteQuery -import org.tasks.data.entity.Task import org.tasks.data.entity.TagData +import org.tasks.data.entity.Task @Dao interface ContentProviderDao { diff --git a/data/src/commonMain/kotlin/org/tasks/data/dao/PrincipalDao.kt b/data/src/commonMain/kotlin/org/tasks/data/dao/PrincipalDao.kt index 4f4983e13..c3094e648 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/dao/PrincipalDao.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/dao/PrincipalDao.kt @@ -16,34 +16,34 @@ import org.tasks.data.entity.PrincipalAccess @Dao interface PrincipalDao { @Insert - fun insert(principal: Principal): Long + suspend fun insert(principal: Principal): Long @Insert - fun insert(access: PrincipalAccess): Long + suspend fun insert(access: PrincipalAccess): Long @Update - fun update(access: PrincipalAccess) + suspend fun update(access: PrincipalAccess) @Query(""" DELETE FROM principal_access WHERE list = :list AND id NOT IN (:access)""") - fun deleteRemoved(list: Long, access: List) + suspend fun deleteRemoved(list: Long, access: List) @Delete - fun delete(access: PrincipalAccess) + suspend fun delete(access: PrincipalAccess) @Transaction @Query("SELECT * FROM principal_access") - fun getAll(): List + suspend fun getAll(): List - fun getOrCreatePrincipal(account: CaldavAccount, href: String, displayName: String? = null) = + suspend fun getOrCreatePrincipal(account: CaldavAccount, href: String, displayName: String? = null) = findPrincipal(account.id, href) ?: Principal(account = account.id, href = href, displayName = displayName) .apply { id = insert(this) } - fun getOrCreateAccess( + suspend fun getOrCreateAccess( calendar: CaldavCalendar, principal: Principal, invite: Int, @@ -65,10 +65,10 @@ WHERE list = :list ).apply { id = insert(this) } @Query("SELECT * FROM principals WHERE account = :account AND href = :href") - fun findPrincipal(account: Long, href: String): Principal? + suspend fun findPrincipal(account: Long, href: String): Principal? @Query("SELECT * FROM principal_access WHERE list = :list and principal = :principal") - fun findAccess(list: Long, principal: Long): PrincipalAccess? + suspend fun findAccess(list: Long, principal: Long): PrincipalAccess? @Transaction @Query("SELECT * FROM principal_access WHERE list = :id") diff --git a/data/src/commonMain/kotlin/org/tasks/data/dao/TaskAttachmentDao.kt b/data/src/commonMain/kotlin/org/tasks/data/dao/TaskAttachmentDao.kt index a198c85dc..415f7c410 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/dao/TaskAttachmentDao.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/dao/TaskAttachmentDao.kt @@ -1,8 +1,13 @@ package org.tasks.data.dao -import androidx.room.* -import org.tasks.data.entity.TaskAttachment +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 org.tasks.data.entity.Attachment +import org.tasks.data.entity.TaskAttachment @Dao interface TaskAttachmentDao { @@ -34,5 +39,5 @@ interface TaskAttachmentDao { suspend fun update(attachment: TaskAttachment) @Delete - fun delete(value: List) + suspend fun delete(value: List) } \ No newline at end of file diff --git a/data/src/commonMain/kotlin/org/tasks/data/dao/UpgraderDao.kt b/data/src/commonMain/kotlin/org/tasks/data/dao/UpgraderDao.kt index b9b69a1e2..81f417d3e 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/dao/UpgraderDao.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/dao/UpgraderDao.kt @@ -34,5 +34,5 @@ WHERE cd_deleted = 0 suspend fun getOpenTasksForList(account: String, url: String): List @Query("UPDATE tasks SET hideUntil = :startDate WHERE _id = :task") - fun setStartDate(task: Long, startDate: Long) + suspend fun setStartDate(task: Long, startDate: Long) } \ No newline at end of file