Category management - Quest.
This commit is contained in:
parent
e0593c9cbf
commit
020af02c29
3 changed files with 47 additions and 11 deletions
|
|
@ -14,6 +14,8 @@ import com.pixelized.rplexicon.utilitary.exceptions.IncompatibleSheetStructure
|
|||
import com.pixelized.rplexicon.utilitary.extentions.context
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.awaitAll
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.SharedFlow
|
||||
import kotlinx.coroutines.flow.combine
|
||||
|
|
@ -49,7 +51,8 @@ class QuestListViewModel @Inject constructor(
|
|||
.groupBy(
|
||||
keySelector = {
|
||||
QuestCategoryUio(
|
||||
title = it.group ?: context.getString(R.string.default_category_other),
|
||||
title = it.group
|
||||
?: context.getString(R.string.default_category_other),
|
||||
)
|
||||
},
|
||||
valueTransform = { item ->
|
||||
|
|
@ -71,15 +74,36 @@ class QuestListViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
launch(Dispatchers.IO) {
|
||||
update(force = false)
|
||||
withContext(Dispatchers.Main) {
|
||||
_isLoading.value = true
|
||||
}
|
||||
awaitAll(
|
||||
async { updateQuests(force = false) },
|
||||
async { updateCategoryOrder(force = false) },
|
||||
)
|
||||
withContext(Dispatchers.Main) {
|
||||
_isLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun update(force: Boolean) {
|
||||
withContext(context = Dispatchers.Main) {
|
||||
_isLoading.value = true
|
||||
fun update(force: Boolean) {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
withContext(Dispatchers.Main) {
|
||||
_isLoading.value = true
|
||||
}
|
||||
awaitAll(
|
||||
async { updateQuests(force = force) },
|
||||
async { updateCategoryOrder(force = force) },
|
||||
)
|
||||
withContext(Dispatchers.Main) {
|
||||
_isLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun updateQuests(force: Boolean) {
|
||||
try {
|
||||
if (force || repository.lastSuccessFullUpdate.shouldUpdate()) {
|
||||
repository.fetchQuests()
|
||||
|
|
@ -95,12 +119,24 @@ class QuestListViewModel @Inject constructor(
|
|||
Log.e(TAG, exception.message, exception)
|
||||
_error.emit(FetchErrorUio.Default)
|
||||
}
|
||||
// clean the loading state
|
||||
finally {
|
||||
withContext(context = Dispatchers.Main) {
|
||||
_isLoading.value = false
|
||||
}
|
||||
|
||||
private suspend fun updateCategoryOrder(force: Boolean) {
|
||||
try {
|
||||
if (force || order.lastSuccessFullUpdate.shouldUpdate()) {
|
||||
order.fetchCategoryOrder()
|
||||
}
|
||||
}
|
||||
// the data sheet structure is not as expected
|
||||
catch (exception: IncompatibleSheetStructure) {
|
||||
Log.e(TAG, exception.message, exception)
|
||||
_error.emit(FetchErrorUio.Structure(type = FetchErrorUio.Structure.Type.CATEGORY_ORDER))
|
||||
}
|
||||
// default exception
|
||||
catch (exception: Exception) {
|
||||
Log.e(TAG, exception.message, exception)
|
||||
_error.emit(FetchErrorUio.Default)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<string name="app_name">Rp-Compagnon</string>
|
||||
|
||||
<string name="action_close">Fermer</string>
|
||||
<string name="default_category_other">Autre</string>
|
||||
<string name="default_category_other">Autres</string>
|
||||
|
||||
<string name="error_generic">Une erreur s\'est produite.</string>
|
||||
<string name="error_structure_unknowed">La structure des données semble avoir changé et n\'est plus compatible avec cette application.</string>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<string name="app_name">Rp-Companion</string>
|
||||
|
||||
<string name="action_close">Close</string>
|
||||
<string name="default_category_other">Other</string>
|
||||
<string name="default_category_other">Others</string>
|
||||
|
||||
<string name="error_generic">An error occurred.</string>
|
||||
<string name="error_structure_unknowed">The file structure appears to have changed and is no longer compatible with this application</string>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue