Make sure dao methods are suspending

pull/2898/head
Alex Baker 4 weeks ago
parent 7149308c97
commit 505c8c29d5

@ -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<PrincipalAccess> {

@ -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<List<CaldavCalendar>>

@ -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 {

@ -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<Long>)
suspend fun deleteRemoved(list: Long, access: List<Long>)
@Delete
fun delete(access: PrincipalAccess)
suspend fun delete(access: PrincipalAccess)
@Transaction
@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)
?: 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")

@ -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<TaskAttachment>)
suspend fun delete(value: List<TaskAttachment>)
}

@ -34,5 +34,5 @@ WHERE cd_deleted = 0
suspend fun getOpenTasksForList(account: String, url: String): List<CaldavTaskContainer>
@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