From 6393c52a245ea208c84cb390714dba5d45197199 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Wed, 18 Jan 2023 15:12:50 -0800 Subject: [PATCH] load web reader from server before db --- .../omnivore/ui/library/LibraryViewModel.kt | 18 ++++--- .../omnivore/ui/reader/WebReaderViewModel.kt | 53 +++++++++++-------- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt index 35b185efd..17dd85af3 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryViewModel.kt @@ -81,9 +81,16 @@ class LibraryViewModel @Inject constructor( } } - private suspend fun performItemSync(cursor: String?, since: String, count: Int, startTime: String, fetchContentSlugs: List = listOf()) { + private suspend fun performItemSync(cursor: String?, since: String, count: Int, startTime: String, isInitialBatch: Boolean = true) { dataService.syncOfflineItemsWithServerIfNeeded() - val result = dataService.sync(since = since, cursor = cursor) + val result = dataService.sync(since = since, cursor = cursor, limit = 20) + + // Fetch content for the initial batch only + if (isInitialBatch) { + for (slug in result.savedItemSlugs) { + dataService.syncSavedItemContent(slug) + } + } val totalCount = count + result.count @@ -95,15 +102,10 @@ class LibraryViewModel @Inject constructor( since = since, count = totalCount, startTime = startTime, - fetchContentSlugs = fetchContentSlugs.ifEmpty { result.savedItemSlugs } - + isInitialBatch = false ) } else { datastoreRepo.putString(DatastoreKeys.libraryLastSyncTimestamp, startTime) - - for (slug in result.savedItemSlugs) { - dataService.syncSavedItemContent(slug) - } } } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt index dfb472e8d..affa6166d 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt @@ -44,36 +44,44 @@ class WebReaderViewModel @Inject constructor( var hasTappedExistingHighlight = false var lastTapCoordinates: TapCoordinates? = null - + fun loadItem(slug: String) { viewModelScope.launch { - // Attempt to load from db first - withContext(Dispatchers.IO) { - val persistedItem = dataService.db.savedItemDao().getSavedItemWithLabelsAndHighlights(slug) + val webReaderParams = loadItemFromServer(slug) - if (persistedItem?.savedItem?.content != null) { - val articleContent = ArticleContent( - title = persistedItem.savedItem.title, - htmlContent = persistedItem.savedItem.content, - highlights = persistedItem.highlights, - contentStatus = "SUCCEEDED", - objectID = "", - labelsJSONString = Gson().toJson(persistedItem.labels) - ) - - Log.d("sync", "data loaded from db") - webReaderParamsLiveData.postValue(WebReaderParams(persistedItem.savedItem, articleContent)) - } else { - loadItemFromServer(slug) - } + if (webReaderParams != null) { + Log.d("sync", "data loaded from server") + webReaderParamsLiveData.postValue(webReaderParams) + } else { + loadItemFromDB(slug) } } } - private suspend fun loadItemFromServer(slug: String) { + private suspend fun loadItemFromDB(slug: String) { + withContext(Dispatchers.IO) { + val persistedItem = dataService.db.savedItemDao().getSavedItemWithLabelsAndHighlights(slug) + + if (persistedItem?.savedItem?.content != null) { + val articleContent = ArticleContent( + title = persistedItem.savedItem.title, + htmlContent = persistedItem.savedItem.content, + highlights = persistedItem.highlights, + contentStatus = "SUCCEEDED", + objectID = "", + labelsJSONString = Gson().toJson(persistedItem.labels) + ) + + Log.d("sync", "data loaded from db") + webReaderParamsLiveData.postValue(WebReaderParams(persistedItem.savedItem, articleContent)) + } + } + } + + private suspend fun loadItemFromServer(slug: String): WebReaderParams? { val articleQueryResult = networker.savedItem(slug) - val article = articleQueryResult.item ?: return + val article = articleQueryResult.item ?: return null val articleContent = ArticleContent( title = article.title, @@ -84,8 +92,7 @@ class WebReaderViewModel @Inject constructor( labelsJSONString = Gson().toJson(articleQueryResult.labels) ) - Log.d("sync", "data loaded from server") - webReaderParamsLiveData.postValue(WebReaderParams(article, articleContent)) + return WebReaderParams(article, articleContent) } fun handleSavedItemAction(itemID: String, action: SavedItemAction) {