mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Insert saved items with highlights in labels in single transaction, reset search cursor when pulling to refresh or changing search filter
This commit is contained in:
parent
b7421950a4
commit
d399bf15f5
4 changed files with 13 additions and 90 deletions
|
|
@ -91,70 +91,6 @@ suspend fun DataService.sync(since: String, cursor: String?, limit: Int = 20): S
|
|||
}
|
||||
|
||||
db.savedItemWithLabelsAndHighlightsDao().insertAll(savedItems)
|
||||
//
|
||||
// db.savedItemDao().insertAll(savedItems)
|
||||
//
|
||||
// val labels: MutableList<SavedItemLabel> = mutableListOf()
|
||||
// val crossRefs: MutableList<SavedItemAndSavedItemLabelCrossRef> = mutableListOf()
|
||||
//
|
||||
// // save labels
|
||||
// for (item in syncResult.items) {
|
||||
// val itemLabels = (item.labels ?: listOf()).map {
|
||||
// SavedItemLabel(
|
||||
// savedItemLabelId = it.labelFields.id,
|
||||
// name = it.labelFields.name,
|
||||
// color = it.labelFields.color,
|
||||
// createdAt = null,
|
||||
// labelDescription = null
|
||||
// )
|
||||
// }
|
||||
//
|
||||
// labels.addAll(itemLabels)
|
||||
//
|
||||
// val newCrossRefs = itemLabels.map {
|
||||
// SavedItemAndSavedItemLabelCrossRef(
|
||||
// savedItemLabelId = it.savedItemLabelId,
|
||||
// savedItemId = item.id
|
||||
// )
|
||||
// }
|
||||
//
|
||||
// crossRefs.addAll(newCrossRefs)
|
||||
// }
|
||||
//
|
||||
// db.savedItemLabelDao().insertAll(labels)
|
||||
// db.savedItemAndSavedItemLabelCrossRefDao().insertAll(crossRefs)
|
||||
//
|
||||
// // Persist Highlights
|
||||
// db.highlightDao().insertAll(syncResult.items.flatMap {
|
||||
// it.highlights ?: listOf()
|
||||
// }.map {
|
||||
// Highlight(
|
||||
// type = it.highlightFields.type.toString(),
|
||||
// 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")
|
||||
|
||||
|
|
@ -175,28 +111,16 @@ fun DataService.isSavedItemContentStoredInDB(slug: String): Boolean {
|
|||
|
||||
suspend fun DataService.fetchSavedItemContent(slug: String) {
|
||||
val syncResult = networker.savedItem(slug)
|
||||
val isSuccess = syncResult.item != null
|
||||
|
||||
val savedItem = syncResult.item ?: return
|
||||
db.savedItemDao().insert(savedItem)
|
||||
|
||||
// Persist Labels
|
||||
db.savedItemLabelDao().insertAll(syncResult.labels)
|
||||
|
||||
val labelCrossRefs = syncResult.labels.map {
|
||||
SavedItemAndSavedItemLabelCrossRef(savedItemLabelId = it.savedItemLabelId, savedItemId = savedItem.savedItemId)
|
||||
val savedItem = syncResult.item
|
||||
savedItem?.let {
|
||||
val item = SavedItemWithLabelsAndHighlights(
|
||||
savedItem = savedItem,
|
||||
labels = syncResult.labels,
|
||||
highlights = syncResult.highlights
|
||||
)
|
||||
db.savedItemWithLabelsAndHighlightsDao().insertAll(listOf(item))
|
||||
}
|
||||
|
||||
db.savedItemAndSavedItemLabelCrossRefDao().insertAll(labelCrossRefs)
|
||||
|
||||
// Persist Highlights
|
||||
db.highlightDao().insertAll(syncResult.highlights)
|
||||
|
||||
val highlightCrossRefs = syncResult.highlights.map {
|
||||
SavedItemAndHighlightCrossRef(highlightId = it.highlightId, savedItemId = savedItem.savedItemId)
|
||||
}
|
||||
|
||||
db.savedItemAndHighlightCrossRefDao().insertAll(highlightCrossRefs)
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -138,9 +138,6 @@ interface SavedItemDao {
|
|||
@Query("SELECT * FROM savedItem WHERE slug = :slug")
|
||||
fun getSavedItemWithLabelsAndHighlights(slug: String): SavedItemWithLabelsAndHighlights?
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
fun insert(item: SavedItem)
|
||||
|
||||
@Query("DELETE FROM savedItem WHERE savedItemId = :itemID")
|
||||
fun deleteById(itemID: String)
|
||||
|
||||
|
|
|
|||
|
|
@ -76,6 +76,8 @@ class LibraryViewModel @Inject constructor(
|
|||
}
|
||||
|
||||
fun refresh() {
|
||||
cursor = null
|
||||
librarySearchCursor = null
|
||||
isRefreshing = true
|
||||
load(true)
|
||||
}
|
||||
|
|
@ -164,8 +166,9 @@ class LibraryViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
fun handleFilterChanges() {
|
||||
librarySearchCursor = null
|
||||
|
||||
if (appliedSortFilterLiveData.value != null && appliedFilterLiveData.value != null) {
|
||||
val applied = appliedFilterLiveData.value
|
||||
val sortKey = when (appliedSortFilterLiveData.value) {
|
||||
SavedItemSortFilter.NEWEST -> "newest"
|
||||
SavedItemSortFilter.OLDEST -> "oldest"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package app.omnivore.omnivore.ui.savedItemViews
|
||||
|
||||
import LabelChip
|
||||
import android.util.Log
|
||||
import androidx.compose.foundation.*
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyRow
|
||||
|
|
@ -34,8 +35,6 @@ import coil.compose.rememberAsyncImagePainter
|
|||
fun SavedItemCard(savedItemViewModel: SavedItemViewModel, savedItem: SavedItemWithLabelsAndHighlights, onClickHandler: () -> Unit, actionHandler: (SavedItemAction) -> Unit) {
|
||||
val listState = rememberLazyListState()
|
||||
|
||||
val actionsMenuItem: SavedItemWithLabelsAndHighlights? by savedItemViewModel.actionsMenuItemLiveData.observeAsState(null)
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.combinedClickable(
|
||||
|
|
|
|||
Loading…
Reference in a new issue