load from db before fetching from server
This commit is contained in:
@ -106,7 +106,14 @@ suspend fun DataService.sync(since: String, cursor: String?, limit: Int = 20): S
|
||||
)
|
||||
}
|
||||
|
||||
suspend fun DataService.syncSavedItemContent(slug: String) {
|
||||
suspend fun DataService.syncSavedItemContent(slug: String, skipIfStoredInDB: Boolean) {
|
||||
if (skipIfStoredInDB) {
|
||||
val existingItem = db.savedItemDao().getSavedItemWithLabelsAndHighlights(slug)
|
||||
if (existingItem?.savedItem?.content != null) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
val syncResult = networker.savedItem(slug)
|
||||
|
||||
val savedItem = syncResult.item ?: return
|
||||
@ -129,8 +136,6 @@ suspend fun DataService.syncSavedItemContent(slug: String) {
|
||||
}
|
||||
|
||||
db.savedItemAndHighlightCrossRefDao().insertAll(highlightCrossRefs)
|
||||
|
||||
Log.d("sync", "saved content for item with id: ${savedItem.savedItemId}")
|
||||
}
|
||||
|
||||
data class SavedItemSyncResult(
|
||||
|
||||
@ -145,6 +145,10 @@ class LibraryViewModel @Inject constructor(
|
||||
CoroutineScope(Dispatchers.Main).launch {
|
||||
isRefreshing = false
|
||||
}
|
||||
|
||||
result.savedItemSlugs.map {
|
||||
dataService.syncSavedItemContent(it, skipIfStoredInDB = true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -201,14 +205,12 @@ class LibraryViewModel @Inject constructor(
|
||||
// Fetch content for the initial batch only
|
||||
if (isInitialBatch) {
|
||||
for (slug in result.savedItemSlugs) {
|
||||
dataService.syncSavedItemContent(slug)
|
||||
dataService.syncSavedItemContent(slug, skipIfStoredInDB = false)
|
||||
}
|
||||
}
|
||||
|
||||
val totalCount = count + result.count
|
||||
|
||||
Log.d("sync", "fetched ${result.count} items")
|
||||
|
||||
if (!result.hasError && result.hasMoreItems && result.cursor != null) {
|
||||
performItemSync(
|
||||
cursor = result.cursor,
|
||||
|
||||
@ -81,14 +81,14 @@ class WebReaderViewModel @Inject constructor(
|
||||
}
|
||||
|
||||
private suspend fun loadItemUsingSlug(slug: String) {
|
||||
loadItemFromDB(slug)
|
||||
|
||||
val webReaderParams = loadItemFromServer(slug)
|
||||
|
||||
if (webReaderParams != null) {
|
||||
Log.d("reader", "data loaded from server")
|
||||
webReaderParamsLiveData.postValue(webReaderParams)
|
||||
isLoading = false
|
||||
} else {
|
||||
loadItemFromDB(slug)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user