Make sure dao methods are suspending

pull/2898/head
Alex Baker 2 years ago
parent 7149308c97
commit 505c8c29d5

@ -1,19 +1,28 @@
package org.tasks.caldav package org.tasks.caldav
import android.content.Context 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.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.Response.HrefRelation
import at.bitfire.dav4jvm.exception.DavException import at.bitfire.dav4jvm.exception.DavException
import at.bitfire.dav4jvm.exception.HttpException import at.bitfire.dav4jvm.exception.HttpException
import at.bitfire.dav4jvm.exception.ServiceUnavailableException import at.bitfire.dav4jvm.exception.ServiceUnavailableException
import at.bitfire.dav4jvm.exception.UnauthorizedException 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.GetETag.Companion.fromResponse
import at.bitfire.dav4jvm.property.SyncToken
import at.bitfire.ical4android.ICalendar.Companion.prodId import at.bitfire.ical4android.ICalendar.Companion.prodId
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.entity.Task
import org.tasks.data.UUIDHelper
import com.todoroo.astrid.service.TaskDeleter import com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import net.fortuna.ical4j.model.property.ProdId import net.fortuna.ical4j.model.property.ProdId
@ -28,19 +37,30 @@ import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.caldav.iCalendar.Companion.fromVtodo 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.PropertyUtils.register
import org.tasks.caldav.property.ShareAccess
import org.tasks.caldav.property.ShareAccess.Companion.NOT_SHARED 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.NO_ACCESS
import org.tasks.caldav.property.ShareAccess.Companion.READ import org.tasks.caldav.property.ShareAccess.Companion.READ
import org.tasks.caldav.property.ShareAccess.Companion.READ_WRITE import org.tasks.caldav.property.ShareAccess.Companion.READ_WRITE
import org.tasks.caldav.property.ShareAccess.Companion.SHARED_OWNER 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.ERROR_UNAUTHORIZED
import org.tasks.data.entity.CaldavAccount.Companion.SERVER_OPEN_XCHANGE 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_OWNCLOUD
import org.tasks.data.entity.CaldavAccount.Companion.SERVER_SABREDAV 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_TASKS
import org.tasks.data.entity.CaldavAccount.Companion.SERVER_UNKNOWN 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_OWNER
import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_ONLY import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_ONLY
import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_WRITE 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_INVALID
import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_NO_RESPONSE import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_NO_RESPONSE
import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_UNKNOWN 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.CaldavTask
import org.tasks.data.entity.PrincipalAccess import org.tasks.data.entity.PrincipalAccess
import org.tasks.data.entity.Task
import timber.log.Timber import timber.log.Timber
import java.io.IOException import java.io.IOException
import java.net.ConnectException import java.net.ConnectException
@ -202,6 +219,9 @@ class CaldavSynchronizer @Inject constructor(
} }
private suspend fun setError(account: CaldavAccount, message: String?) { private suspend fun setError(account: CaldavAccount, message: String?) {
if (!message.isNullOrBlank()) {
Timber.e("${account.name}: $message")
}
account.error = message account.error = message
caldavDao.update(account) caldavDao.update(account)
localBroadcastManager.broadcastRefreshList() localBroadcastManager.broadcastRefreshList()
@ -362,7 +382,7 @@ class CaldavSynchronizer @Inject constructor(
Timber.d("SENT %s", caldavTask) Timber.d("SENT %s", caldavTask)
} }
fun Response.principals( suspend fun Response.principals(
account: CaldavAccount, account: CaldavAccount,
list: CaldavCalendar list: CaldavCalendar
): List<PrincipalAccess> { ): List<PrincipalAccess> {

@ -29,7 +29,7 @@ const val APPLE_EPOCH = 978307200000L // 1/1/2001 GMT
@Dao @Dao
abstract class CaldavDao { abstract class CaldavDao {
@Query("SELECT COUNT(*) FROM caldav_lists WHERE cdl_account = :account") @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") @Query("SELECT * FROM caldav_lists")
abstract fun subscribeToCalendars(): Flow<List<CaldavCalendar>> abstract fun subscribeToCalendars(): Flow<List<CaldavCalendar>>

@ -5,8 +5,8 @@ import androidx.room.Dao
import androidx.room.Query import androidx.room.Query
import androidx.room.RawQuery import androidx.room.RawQuery
import androidx.sqlite.db.SupportSQLiteQuery import androidx.sqlite.db.SupportSQLiteQuery
import org.tasks.data.entity.Task
import org.tasks.data.entity.TagData import org.tasks.data.entity.TagData
import org.tasks.data.entity.Task
@Dao @Dao
interface ContentProviderDao { interface ContentProviderDao {

@ -16,34 +16,34 @@ import org.tasks.data.entity.PrincipalAccess
@Dao @Dao
interface PrincipalDao { interface PrincipalDao {
@Insert @Insert
fun insert(principal: Principal): Long suspend fun insert(principal: Principal): Long
@Insert @Insert
fun insert(access: PrincipalAccess): Long suspend fun insert(access: PrincipalAccess): Long
@Update @Update
fun update(access: PrincipalAccess) suspend fun update(access: PrincipalAccess)
@Query(""" @Query("""
DELETE DELETE
FROM principal_access FROM principal_access
WHERE list = :list WHERE list = :list
AND id NOT IN (:access)""") AND id NOT IN (:access)""")
fun deleteRemoved(list: Long, access: List<Long>) suspend fun deleteRemoved(list: Long, access: List<Long>)
@Delete @Delete
fun delete(access: PrincipalAccess) suspend fun delete(access: PrincipalAccess)
@Transaction @Transaction
@Query("SELECT * FROM principal_access") @Query("SELECT * FROM principal_access")
fun getAll(): List<PrincipalWithAccess> suspend fun getAll(): List<PrincipalWithAccess>
fun getOrCreatePrincipal(account: CaldavAccount, href: String, displayName: String? = null) = suspend fun getOrCreatePrincipal(account: CaldavAccount, href: String, displayName: String? = null) =
findPrincipal(account.id, href) findPrincipal(account.id, href)
?: Principal(account = account.id, href = href, displayName = displayName) ?: Principal(account = account.id, href = href, displayName = displayName)
.apply { id = insert(this) } .apply { id = insert(this) }
fun getOrCreateAccess( suspend fun getOrCreateAccess(
calendar: CaldavCalendar, calendar: CaldavCalendar,
principal: Principal, principal: Principal,
invite: Int, invite: Int,
@ -65,10 +65,10 @@ WHERE list = :list
).apply { id = insert(this) } ).apply { id = insert(this) }
@Query("SELECT * FROM principals WHERE account = :account AND href = :href") @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") @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 @Transaction
@Query("SELECT * FROM principal_access WHERE list = :id") @Query("SELECT * FROM principal_access WHERE list = :id")

@ -1,8 +1,13 @@
package org.tasks.data.dao package org.tasks.data.dao
import androidx.room.* import androidx.room.Dao
import org.tasks.data.entity.TaskAttachment 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.Attachment
import org.tasks.data.entity.TaskAttachment
@Dao @Dao
interface TaskAttachmentDao { interface TaskAttachmentDao {
@ -34,5 +39,5 @@ interface TaskAttachmentDao {
suspend fun update(attachment: TaskAttachment) suspend fun update(attachment: TaskAttachment)
@Delete @Delete
fun delete(value: List<TaskAttachment>) suspend fun delete(value: List<TaskAttachment>)
} }

@ -34,5 +34,5 @@ WHERE cd_deleted = 0
suspend fun getOpenTasksForList(account: String, url: String): List<CaldavTaskContainer> suspend fun getOpenTasksForList(account: String, url: String): List<CaldavTaskContainer>
@Query("UPDATE tasks SET hideUntil = :startDate WHERE _id = :task") @Query("UPDATE tasks SET hideUntil = :startDate WHERE _id = :task")
fun setStartDate(task: Long, startDate: Long) suspend fun setStartDate(task: Long, startDate: Long)
} }
Loading…
Cancel
Save