diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/DataSyncViewModel.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/DataSyncViewModel.kt index 4faeedd..ba16d94 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/DataSyncViewModel.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/DataSyncViewModel.kt @@ -9,11 +9,13 @@ import com.pixelized.desktop.lwa.repository.item.ItemRepository import com.pixelized.desktop.lwa.repository.network.NetworkRepository import com.pixelized.desktop.lwa.repository.settings.SettingsRepository import com.pixelized.desktop.lwa.repository.tag.TagRepository +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach @@ -47,28 +49,39 @@ class DataSyncViewModel( networkRepository.status .filter { status -> status == NetworkRepository.Status.CONNECTED } + .flowOn(context = Dispatchers.IO) .onEach { - tagRepository.updateAlterationTags() - alterationRepository.updateAlterationFlow() - tagRepository.updateCharacterTags() - characterRepository.updateCharacterPreviews() - campaignRepository.updateCampaign() - tagRepository.updateItemTags() - itemRepository.updateItemFlow() + try { + tagRepository.updateAlterationTags() + alterationRepository.updateAlterationFlow() + tagRepository.updateCharacterTags() + characterRepository.updateCharacterPreviews() + campaignRepository.updateCampaign() + tagRepository.updateItemTags() + itemRepository.updateItemFlow() + } catch (exception: Exception) { + println(exception.message) // TODO proper exception handling + } } .launchIn(this) networkRepository.status .filter { status -> status == NetworkRepository.Status.CONNECTED } + .flowOn(context = Dispatchers.IO) .flatMapLatest { campaignRepository.campaignFlow().map { it.instances } } + .distinctUntilChanged() .onEach { instances -> instances.forEach { characterSheetId -> - characterRepository.updateCharacterSheet( - characterSheetId = characterSheetId, - ) - inventoryRepository.updateInventoryFlow( - characterSheetId = characterSheetId, - ) + try { + characterRepository.updateCharacterSheet( + characterSheetId = characterSheetId, + ) + inventoryRepository.updateInventoryFlow( + characterSheetId = characterSheetId, + ) + } catch (exception: Exception) { + println(exception.message) // TODO proper exception handling + } } } .launchIn(this) diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/network/LwaClientImpl.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/network/LwaClientImpl.kt index 032edbc..17a7e4e 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/network/LwaClientImpl.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/network/LwaClientImpl.kt @@ -20,9 +20,9 @@ import io.ktor.http.contentType class LwaClientImpl( private val client: HttpClient, - setting: SettingsRepository, + private val setting: SettingsRepository, ) : LwaClient { - private val root = setting.settings().network.root + private val root get() = setting.settings().network.root @Throws override suspend fun getAlterations(): APIResponse> = client