From 2a0f114231116b83a07dd821554cce95ecc39806 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 5 May 2023 12:47:45 +0800 Subject: [PATCH] Fix the archive filter in the main DB query to handle "all" --- .../persistence/entities/SavedItem.kt | 8 ++--- .../omnivore/ui/library/LibraryViewModel.kt | 33 ++++--------------- 2 files changed, 10 insertions(+), 31 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItem.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItem.kt index 586f4549e..68f4b40f5 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItem.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/persistence/entities/SavedItem.kt @@ -191,7 +191,7 @@ interface SavedItemDao { "LEFT OUTER JOIN Highlight on highlight.highlightId = SavedItemAndHighlightCrossRef.highlightId " + "WHERE SavedItem.serverSyncStatus != 2 " + - "AND SavedItem.isArchived != :archiveFilter " + + "AND SavedItem.isArchived IN (:allowedArchiveStates) " + "AND SavedItem.contentReader IN (:allowedContentReaders) " + "AND CASE WHEN :hasRequiredLabels THEN SavedItemLabel.name in (:requiredLabels) ELSE 1 END " + "AND CASE WHEN :hasExcludedLabels THEN SavedItemLabel.name is NULL OR SavedItemLabel.name not in (:excludedLabels) ELSE 1 END " + @@ -205,11 +205,11 @@ interface SavedItemDao { "CASE WHEN :sortKey = 'recentlyRead' THEN SavedItem.readAt END DESC,\n" + "CASE WHEN :sortKey = 'recentlyPublished' THEN SavedItem.publishDate END DESC" ) - fun _filteredLibraryData(archiveFilter: Int, sortKey: String, hasRequiredLabels: Int, hasExcludedLabels: Int, requiredLabels: List, excludedLabels: List, allowedContentReaders: List): LiveData> + fun _filteredLibraryData(allowedArchiveStates: List, sortKey: String, hasRequiredLabels: Int, hasExcludedLabels: Int, requiredLabels: List, excludedLabels: List, allowedContentReaders: List): LiveData> - fun filteredLibraryData(archiveFilter: Int, sortKey: String, requiredLabels: List, excludedLabels: List, allowedContentReaders: List): LiveData> { + fun filteredLibraryData(allowedArchiveStates: List, sortKey: String, requiredLabels: List, excludedLabels: List, allowedContentReaders: List): LiveData> { return _filteredLibraryData( - archiveFilter = archiveFilter, + allowedArchiveStates = allowedArchiveStates, sortKey = sortKey, hasRequiredLabels = requiredLabels.size, hasExcludedLabels = excludedLabels.size, 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 cc4bb85ed..577526da6 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 @@ -36,7 +36,7 @@ class LibraryViewModel @Inject constructor( // Live Data private var itemsLiveDataInternal = dataService.db.savedItemDao().filteredLibraryData( - archiveFilter = 1, + allowedArchiveStates = listOf(0), sortKey = "newest", requiredLabels = listOf(), excludedLabels = listOf(), @@ -65,28 +65,6 @@ class LibraryViewModel @Inject constructor( } } -// runBlocking { -// datastoreRepo.getString(DatastoreKeys.lastUsedSavedItemFilter)?.let { str -> -// try { -// val filter = SavedItemFilter.values().first { it.rawValue == str } -// appliedFilterLiveData.postValue(filter) -// } catch (e: Exception) { -// Log.d("error", "invalid filter value stored in datastore repo: $e") -// } -// -// datastoreRepo.getString(DatastoreKeys.lastUsedSavedItemSortFilter)?.let { str -> -// try { -// val filter = SavedItemSortFilter.values().first { it.rawValue == str } -// appliedSortFilterLiveData.postValue(filter) -// } catch (e: Exception) { -// Log.d("error", "invalid sort filter value stored in datastore repo: $e") -// } -// -// handleFilterChanges() -// } -// } -// } - viewModelScope.launch { handleFilterChanges() for (slug in contentRequestChannel) { @@ -196,9 +174,10 @@ class LibraryViewModel @Inject constructor( else -> "newest" } - val archiveFilter = when (appliedFilterLiveData.value) { - SavedItemFilter.ARCHIVED -> 0 - else -> 1 + val allowedArchiveStates = when (appliedFilterLiveData.value) { + SavedItemFilter.ALL -> listOf(0, 1) + SavedItemFilter.ARCHIVED -> listOf(1) + else -> listOf(0) } val allowedContentReaders = when(appliedFilterLiveData.value) { @@ -221,7 +200,7 @@ class LibraryViewModel @Inject constructor( } val newData = dataService.db.savedItemDao().filteredLibraryData( - archiveFilter = archiveFilter, + allowedArchiveStates = allowedArchiveStates, sortKey = sortKey, requiredLabels = requiredLabels, excludedLabels = excludeLabels,