mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
use MediatorLiveData to update library live data when sort filter changes
This commit is contained in:
parent
0212c31d66
commit
88bf3a1a8d
2 changed files with 37 additions and 7 deletions
|
|
@ -3,6 +3,8 @@ package app.omnivore.omnivore.persistence.entities
|
|||
import androidx.core.net.toUri
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.room.*
|
||||
import app.omnivore.omnivore.BuildConfig
|
||||
import app.omnivore.omnivore.ui.library.SavedItemSortFilter
|
||||
import java.util.*
|
||||
|
||||
@Entity
|
||||
|
|
@ -86,9 +88,6 @@ data class SavedItemCardData(
|
|||
|
||||
@Dao
|
||||
interface SavedItemDao {
|
||||
@Query("SELECT savedItemId, slug, publisherURLString, title, author, imageURLString, isArchived, pageURLString, contentReader FROM SavedItem ORDER BY savedAt DESC")
|
||||
fun getLibraryLiveData(): LiveData<List<SavedItemCardData>>
|
||||
|
||||
@Query("SELECT * FROM savedItem")
|
||||
fun getAll(): List<SavedItem>
|
||||
|
||||
|
|
@ -114,6 +113,23 @@ interface SavedItemDao {
|
|||
fun update(savedItem: SavedItem)
|
||||
|
||||
@Transaction
|
||||
@Query("SELECT savedItemId, slug, publisherURLString, title, author, imageURLString, isArchived, pageURLString, contentReader FROM SavedItem ORDER BY savedAt DESC")
|
||||
fun getLibraryLiveDataWithLabels(): LiveData<List<SavedItemCardDataWithLabels>>
|
||||
@Query("SELECT ${SavedItemQueryConstants.columns} FROM SavedItem ORDER BY savedAt DESC")
|
||||
fun getLibraryLiveData(): LiveData<List<SavedItemCardDataWithLabels>>
|
||||
|
||||
@Transaction
|
||||
@Query("SELECT ${SavedItemQueryConstants.columns} FROM SavedItem ORDER BY savedAt ASC")
|
||||
fun getLibraryLiveDataSortedByOldest(): LiveData<List<SavedItemCardDataWithLabels>>
|
||||
|
||||
@Transaction
|
||||
@Query("SELECT ${SavedItemQueryConstants.columns} FROM SavedItem ORDER BY readAt DESC, savedAt DESC")
|
||||
fun getLibraryLiveDataSortedByRecentlyRead(): LiveData<List<SavedItemCardDataWithLabels>>
|
||||
|
||||
@Transaction
|
||||
@Query("SELECT ${SavedItemQueryConstants.columns} FROM SavedItem ORDER BY publishDate DESC")
|
||||
fun getLibraryLiveDataSortedByRecentlyPublished(): LiveData<List<SavedItemCardDataWithLabels>>
|
||||
}
|
||||
|
||||
|
||||
object SavedItemQueryConstants {
|
||||
const val columns = "savedItemId, slug, publisherURLString, title, author, imageURLString, isArchived, pageURLString, contentReader "
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ import androidx.compose.runtime.getValue
|
|||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MediatorLiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
|
|
@ -35,7 +37,8 @@ class LibraryViewModel @Inject constructor(
|
|||
// Live Data
|
||||
val searchTextLiveData = MutableLiveData("")
|
||||
val searchItemsLiveData = MutableLiveData<List<SavedItemCardDataWithLabels>>(listOf())
|
||||
val itemsLiveData = dataService.db.savedItemDao().getLibraryLiveDataWithLabels()
|
||||
private var itemsLiveDataInternal = dataService.db.savedItemDao().getLibraryLiveData()
|
||||
val itemsLiveData = MediatorLiveData<List<SavedItemCardDataWithLabels>>()
|
||||
val appliedFilterLiveData = MutableLiveData(SavedItemFilter.INBOX)
|
||||
val appliedSortFilterLiveData = MutableLiveData(SavedItemSortFilter.NEWEST)
|
||||
|
||||
|
|
@ -66,6 +69,10 @@ class LibraryViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
viewModelScope.launch {
|
||||
handleFilterChanges()
|
||||
}
|
||||
}
|
||||
|
||||
fun updateSearchText(text: String) {
|
||||
|
|
@ -125,7 +132,14 @@ class LibraryViewModel @Inject constructor(
|
|||
if (searchTextLiveData.value != "") {
|
||||
performSearch(true)
|
||||
} else {
|
||||
// TODO: implement
|
||||
itemsLiveData.removeSource(itemsLiveDataInternal)
|
||||
itemsLiveDataInternal = when (appliedSortFilterLiveData.value ?: SavedItemSortFilter.NEWEST) {
|
||||
SavedItemSortFilter.NEWEST -> dataService.db.savedItemDao().getLibraryLiveData()
|
||||
SavedItemSortFilter.OLDEST -> dataService.db.savedItemDao().getLibraryLiveDataSortedByOldest()
|
||||
SavedItemSortFilter.RECENTLY_READ -> dataService.db.savedItemDao().getLibraryLiveDataSortedByRecentlyRead()
|
||||
SavedItemSortFilter.RECENTLY_PUBLISHED -> dataService.db.savedItemDao().getLibraryLiveDataSortedByRecentlyPublished()
|
||||
}
|
||||
itemsLiveData.addSource(itemsLiveDataInternal, itemsLiveData::setValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue