Persist highlights while syncing

This commit is contained in:
Jackson Harper
2023-04-21 20:47:52 +08:00
parent 64ded2481e
commit aaf27b0631

View File

@ -1,6 +1,8 @@
package app.omnivore.omnivore.dataService
import android.util.Log
import androidx.room.PrimaryKey
import app.omnivore.omnivore.models.ServerSyncStatus
import app.omnivore.omnivore.networking.*
import app.omnivore.omnivore.persistence.entities.*
@ -46,7 +48,8 @@ suspend fun DataService.librarySearch(cursor: String?, query: String): SearchRes
}
suspend fun DataService.sync(since: String, cursor: String?, limit: Int = 20): SavedItemSyncResult {
val syncResult = networker.savedItemUpdates(cursor = cursor, limit = limit, since = since) ?: return SavedItemSyncResult.errorResult
val syncResult = networker.savedItemUpdates(cursor = cursor, limit = limit, since = since)
?: return SavedItemSyncResult.errorResult
val savedItems = syncResult.items.map {
SavedItem(
@ -93,7 +96,10 @@ suspend fun DataService.sync(since: String, cursor: String?, limit: Int = 20): S
labels.addAll(itemLabels)
val newCrossRefs = itemLabels.map {
SavedItemAndSavedItemLabelCrossRef(savedItemLabelId = it.savedItemLabelId, savedItemId = item.id)
SavedItemAndSavedItemLabelCrossRef(
savedItemLabelId = it.savedItemLabelId,
savedItemId = item.id
)
}
crossRefs.addAll(newCrossRefs)
@ -102,6 +108,37 @@ suspend fun DataService.sync(since: String, cursor: String?, limit: Int = 20): S
db.savedItemLabelDao().insertAll(labels)
db.savedItemAndSavedItemLabelCrossRefDao().insertAll(crossRefs)
// Persist Highlights
db.highlightDao().insertAll(syncResult.items.flatMap {
it.highlights ?: listOf()
}.map {
Highlight(
highlightId = it.highlightFields.id,
annotation = it.highlightFields.annotation,
createdByMe = it.highlightFields.createdByMe,
markedForDeletion = false,
patch = it.highlightFields.patch,
prefix = it.highlightFields.prefix,
quote = it.highlightFields.quote,
serverSyncStatus = ServerSyncStatus.IS_SYNCED.rawValue,
shortId = it.highlightFields.shortId,
suffix = it.highlightFields.suffix,
createdAt = null,
updatedAt = it.highlightFields.updatedAt as String?,
)
})
val highlightCrossRefs = syncResult.items.flatMap {
val savedItem = it
(savedItem.highlights ?: listOf()).map {
Pair(it, savedItem.id)
}
}.map {
SavedItemAndHighlightCrossRef(highlightId = it.first.highlightFields.id, savedItemId = it.second)
}
db.savedItemAndHighlightCrossRefDao().insertAll(highlightCrossRefs)
Log.d("sync", "found ${syncResult.items.size} items with sync api. Since: $since")
return SavedItemSyncResult(