load from db before fetching from server

This commit is contained in:
Satindar Dhillon
2023-03-23 16:54:04 -07:00
parent af142b190b
commit 1ee83041fb
3 changed files with 15 additions and 8 deletions

View File

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

View File

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

View File

@ -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)
}
}