diff --git a/app/src/main/java/net/novagamestudios/kaffeekasse/ui/Updates.kt b/app/src/main/java/net/novagamestudios/kaffeekasse/ui/Updates.kt index b3a1c89761e46bf3ad9b5f378378759a8faa3579..97241bf5d3906d220885348e7ac1c48d349aaabe 100644 --- a/app/src/main/java/net/novagamestudios/kaffeekasse/ui/Updates.kt +++ b/app/src/main/java/net/novagamestudios/kaffeekasse/ui/Updates.kt @@ -46,6 +46,7 @@ import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.screenModelScope import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch +import net.novagamestudios.common_utils.Logger import net.novagamestudios.common_utils.compose.DashedShape import net.novagamestudios.common_utils.compose.components.CircularLoadingBox import net.novagamestudios.common_utils.compose.components.ColumnCenter @@ -54,6 +55,7 @@ import net.novagamestudios.common_utils.compose.components.RowCenter import net.novagamestudios.common_utils.compose.components.TransparentListItem import net.novagamestudios.common_utils.compose.state.ReentrantActionState import net.novagamestudios.common_utils.compose.state.collectAsStateIn +import net.novagamestudios.common_utils.error import net.novagamestudios.common_utils.toastLong import net.novagamestudios.kaffeekasse.App import net.novagamestudios.kaffeekasse.App.Companion.settings @@ -65,6 +67,8 @@ import net.novagamestudios.kaffeekasse.repositories.InstallStatus import net.novagamestudios.kaffeekasse.repositories.RepositoryProvider import net.novagamestudios.kaffeekasse.repositories.UpdateController import net.novagamestudios.kaffeekasse.repositories.releases.Releases +import net.novagamestudios.kaffeekasse.ui.util.Toasts +import net.novagamestudios.kaffeekasse.ui.util.ToastsState import net.novagamestudios.kaffeekasse.ui.util.openInBrowser import net.novagamestudios.kaffeekasse.ui.util.screenmodel.GlobalScreenModelFactory import net.novagamestudios.kaffeekasse.ui.util.screenmodel.ScreenModelProvider @@ -75,12 +79,14 @@ class UpdatesScreenModel private constructor( private val releases: Releases, private val updateController: UpdateController, private val gitLabProjectUrl: String -) : ScreenModel { +) : ScreenModel, Logger { var showAppInfo by mutableStateOf(false) private val checkingMutex = ReentrantActionState() val isChecking by checkingMutex + val toasts = ToastsState() + val newerReleases by releases.newerReleases .map { it.orEmpty() } .collectAsStateIn(screenModelScope, emptyList()) @@ -104,7 +110,12 @@ class UpdatesScreenModel private constructor( screenModelScope.launch { checkingMutex.trueWhile { releases.newerReleases.value = null - releases.fetchNewerReleases() + try { + releases.fetchNewerReleases() + } catch (e: Throwable) { + error (e) { "Failed to fetch newer releases" } + toasts.short("Failed to check for updates: ${e.message}") + } } } } @@ -159,6 +170,7 @@ fun UpdateDialogs(model: UpdatesScreenModel = UpdatesScreenModel.model) { newerReleases = model.newerReleases, onStartUpdate = { model.update() } ) + Toasts(model.toasts) } @Composable