From fbc4f04ff2cc2551c3cb281bb7b03bf0c1051260 Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Wed, 4 May 2022 03:41:10 +0200 Subject: [PATCH] Fix: Getting true search result --- .../viewmodels/MainNavFragmentViewModelX.kt | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt b/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt index a8cb8dbb..890341f4 100644 --- a/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt +++ b/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt @@ -1,6 +1,10 @@ package com.looker.droidify.ui.viewmodels -import androidx.lifecycle.* +import androidx.lifecycle.MediatorLiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewModelScope import com.looker.droidify.content.Preferences import com.looker.droidify.database.DatabaseX import com.looker.droidify.database.entity.Installed @@ -10,6 +14,7 @@ import com.looker.droidify.entity.Order import com.looker.droidify.entity.Section import com.looker.droidify.ui.fragments.Request import com.looker.droidify.ui.fragments.Source +import com.looker.droidify.utility.extension.ManageableLiveData import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -19,6 +24,7 @@ class MainNavFragmentViewModelX( primarySource: Source, secondarySource: Source ) : ViewModel() { + // TODO add better sort/filter fields var order = MutableLiveData(Order.LAST_UPDATE) private set @@ -66,7 +72,7 @@ class MainNavFragmentViewModelX( } private var primaryRequest = MediatorLiveData() - val primaryProducts = MediatorLiveData>() + val primaryProducts = ManageableLiveData>() private var secondaryRequest = request(secondarySource) val secondaryProducts = MediatorLiveData>() @@ -76,9 +82,10 @@ class MainNavFragmentViewModelX( init { primaryProducts.addSource( - db.productDao.queryLiveList(primaryRequest.value ?: request(primarySource)), - primaryProducts::setValue - ) + db.productDao.queryLiveList(primaryRequest.value ?: request(primarySource)) + ) { + primaryProducts.updateValue(it, System.currentTimeMillis()) + } secondaryProducts.addSource( db.productDao.queryLiveList(secondaryRequest), secondaryProducts::setValue @@ -87,29 +94,33 @@ class MainNavFragmentViewModelX( categories.addSource(db.categoryDao.allNamesLive, categories::setValue) listOf(sections, order, searchQuery).forEach { primaryRequest.addSource(it) { - primaryRequest.value = request(primarySource) + val newRequest = request(primarySource) + if (primaryRequest.value != newRequest) + primaryRequest.value = newRequest } } primaryProducts.addSource(primaryRequest) { request -> + val updateTime = System.currentTimeMillis() viewModelScope.launch { withContext(Dispatchers.IO) { - primaryProducts.postValue( - db.productDao.queryObject( - request - ) + primaryProducts.updateValue( + db.productDao.queryObject(request), + updateTime ) } } } installed.addSource(db.installedDao.allLive) { if (primarySource == Source.INSTALLED && secondarySource == Source.UPDATES) { + val updateTime = System.currentTimeMillis() viewModelScope.launch { withContext(Dispatchers.IO) { secondaryProducts.postValue(db.productDao.queryObject(secondaryRequest)) - primaryProducts.postValue( + primaryProducts.updateValue( db.productDao.queryObject( primaryRequest.value ?: request(primarySource) - ) + ), + updateTime ) } }