Replace Maybe with Single in Message DAO (#710)

This commit is contained in:
Mikołaj Pich
2020-03-02 22:31:55 +01:00
committed by GitHub
parent 87107ec474
commit 79bd2fccdf
7 changed files with 114 additions and 16 deletions

View File

@ -4,6 +4,7 @@ import androidx.room.Dao
import androidx.room.Query
import io.github.wulkanowy.data.db.entities.Message
import io.reactivex.Maybe
import io.reactivex.Single
@Dao
interface MessagesDao : BaseDao<Message> {
@ -12,7 +13,7 @@ interface MessagesDao : BaseDao<Message> {
fun loadAll(studentId: Int, folder: Int): Maybe<List<Message>>
@Query("SELECT * FROM Messages WHERE id = :id")
fun load(id: Long): Maybe<Message>
fun load(id: Long): Single<Message>
@Query("SELECT * FROM Messages WHERE student_id = :studentId AND removed = 1 ORDER BY date DESC")
fun loadDeleted(studentId: Int): Maybe<List<Message>>

View File

@ -5,6 +5,7 @@ import io.github.wulkanowy.data.db.entities.Message
import io.github.wulkanowy.data.db.entities.Student
import io.github.wulkanowy.data.repositories.message.MessageFolder.TRASHED
import io.reactivex.Maybe
import io.reactivex.Single
import javax.inject.Inject
import javax.inject.Singleton
@ -23,7 +24,7 @@ class MessageLocal @Inject constructor(private val messagesDb: MessagesDao) {
messagesDb.deleteAll(messages)
}
fun getMessage(id: Long): Maybe<Message> {
fun getMessage(id: Long): Single<Message> {
return messagesDb.load(id)
}

View File

@ -13,6 +13,7 @@ import io.github.wulkanowy.utils.uniqueSubtract
import io.reactivex.Completable
import io.reactivex.Maybe
import io.reactivex.Single
import timber.log.Timber
import java.net.UnknownHostException
import javax.inject.Inject
import javax.inject.Singleton
@ -51,21 +52,26 @@ class MessageRepository @Inject constructor(
return Single.just(sdkHelper.init(student))
.flatMap { _ ->
local.getMessage(messageDbId)
.filter { it.content.isNotEmpty() }
.filter {
it.content.isNotEmpty().also { status ->
Timber.d("Message content in db empty: ${!status}")
}
}
.switchIfEmpty(ReactiveNetwork.checkInternetConnectivity(settings)
.flatMap {
if (it) local.getMessage(messageDbId).toSingle()
if (it) local.getMessage(messageDbId)
else Single.error(UnknownHostException())
}
.flatMap { dbMessage ->
remote.getMessagesContent(dbMessage, markAsRead).doOnSuccess {
local.updateMessages(listOf(dbMessage.copy(unread = false).apply {
local.updateMessages(listOf(dbMessage.copy(unread = !markAsRead).apply {
id = dbMessage.id
content = content.ifBlank { it }
}))
Timber.d("Message $messageDbId with blank content: ${dbMessage.content.isBlank()}, marked as read")
}
}.flatMap {
local.getMessage(messageDbId).toSingle()
local.getMessage(messageDbId)
}
)
}