Skip to content
Snippets Groups Projects
Commit d6f8aa29 authored by Jonas Broeckmann's avatar Jonas Broeckmann
Browse files

Fix crash if GitLab is down

parent 9dcb3f4a
No related branches found
No related tags found
No related merge requests found
...@@ -46,6 +46,7 @@ import cafe.adriel.voyager.core.model.ScreenModel ...@@ -46,6 +46,7 @@ import cafe.adriel.voyager.core.model.ScreenModel
import cafe.adriel.voyager.core.model.screenModelScope import cafe.adriel.voyager.core.model.screenModelScope
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import net.novagamestudios.common_utils.Logger
import net.novagamestudios.common_utils.compose.DashedShape import net.novagamestudios.common_utils.compose.DashedShape
import net.novagamestudios.common_utils.compose.components.CircularLoadingBox import net.novagamestudios.common_utils.compose.components.CircularLoadingBox
import net.novagamestudios.common_utils.compose.components.ColumnCenter import net.novagamestudios.common_utils.compose.components.ColumnCenter
...@@ -54,6 +55,7 @@ import net.novagamestudios.common_utils.compose.components.RowCenter ...@@ -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.components.TransparentListItem
import net.novagamestudios.common_utils.compose.state.ReentrantActionState import net.novagamestudios.common_utils.compose.state.ReentrantActionState
import net.novagamestudios.common_utils.compose.state.collectAsStateIn import net.novagamestudios.common_utils.compose.state.collectAsStateIn
import net.novagamestudios.common_utils.error
import net.novagamestudios.common_utils.toastLong import net.novagamestudios.common_utils.toastLong
import net.novagamestudios.kaffeekasse.App import net.novagamestudios.kaffeekasse.App
import net.novagamestudios.kaffeekasse.App.Companion.settings import net.novagamestudios.kaffeekasse.App.Companion.settings
...@@ -65,6 +67,8 @@ import net.novagamestudios.kaffeekasse.repositories.InstallStatus ...@@ -65,6 +67,8 @@ import net.novagamestudios.kaffeekasse.repositories.InstallStatus
import net.novagamestudios.kaffeekasse.repositories.RepositoryProvider import net.novagamestudios.kaffeekasse.repositories.RepositoryProvider
import net.novagamestudios.kaffeekasse.repositories.UpdateController import net.novagamestudios.kaffeekasse.repositories.UpdateController
import net.novagamestudios.kaffeekasse.repositories.releases.Releases 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.openInBrowser
import net.novagamestudios.kaffeekasse.ui.util.screenmodel.GlobalScreenModelFactory import net.novagamestudios.kaffeekasse.ui.util.screenmodel.GlobalScreenModelFactory
import net.novagamestudios.kaffeekasse.ui.util.screenmodel.ScreenModelProvider import net.novagamestudios.kaffeekasse.ui.util.screenmodel.ScreenModelProvider
...@@ -75,12 +79,14 @@ class UpdatesScreenModel private constructor( ...@@ -75,12 +79,14 @@ class UpdatesScreenModel private constructor(
private val releases: Releases, private val releases: Releases,
private val updateController: UpdateController, private val updateController: UpdateController,
private val gitLabProjectUrl: String private val gitLabProjectUrl: String
) : ScreenModel { ) : ScreenModel, Logger {
var showAppInfo by mutableStateOf(false) var showAppInfo by mutableStateOf(false)
private val checkingMutex = ReentrantActionState() private val checkingMutex = ReentrantActionState()
val isChecking by checkingMutex val isChecking by checkingMutex
val toasts = ToastsState()
val newerReleases by releases.newerReleases val newerReleases by releases.newerReleases
.map { it.orEmpty() } .map { it.orEmpty() }
.collectAsStateIn(screenModelScope, emptyList()) .collectAsStateIn(screenModelScope, emptyList())
...@@ -104,7 +110,12 @@ class UpdatesScreenModel private constructor( ...@@ -104,7 +110,12 @@ class UpdatesScreenModel private constructor(
screenModelScope.launch { screenModelScope.launch {
checkingMutex.trueWhile { checkingMutex.trueWhile {
releases.newerReleases.value = null 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) { ...@@ -159,6 +170,7 @@ fun UpdateDialogs(model: UpdatesScreenModel = UpdatesScreenModel.model) {
newerReleases = model.newerReleases, newerReleases = model.newerReleases,
onStartUpdate = { model.update() } onStartUpdate = { model.update() }
) )
Toasts(model.toasts)
} }
@Composable @Composable
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment