check updates on launch, handle package updated

This commit is contained in:
2026-07-26 11:22:48 +03:00
parent 51839829bd
commit ea51196433
10 changed files with 130 additions and 46 deletions
@@ -15,6 +15,7 @@ import com.seiko.imageloader.LocalImageLoader
import ru.shadowsparky.koin
import ru.shadowsparky.ui.components.BackButton
import ru.shadowsparky.ui.nav.Nav
import ru.shadowsparky.updater.presentation.UpdateDialog
import ru.shadowsparky.vbox.shared.presentation.list.VideoScreen
import ru.shadowsparky.vbox.shared.presentation.loading.LoadingScreen
import ru.shadowsparky.vbox.shared.presentation.nav.Child
@@ -77,6 +78,7 @@ private fun NavInternal(rootComponent: RootComponent) {
}
}
}
UpdateDialog(rootComponent.updateComponent)
}
}
@@ -2,15 +2,18 @@ package ru.shadowsparky.vbox.shared.presentation
import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.ExperimentalDecomposeApi
import com.arkivanov.decompose.childContext
import com.arkivanov.decompose.router.stack.childStackWebNavigation
import com.arkivanov.decompose.router.webhistory.WebNavigation
import com.arkivanov.decompose.router.webhistory.WebNavigationOwner
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import kotlinx.serialization.KSerializer
import org.koin.core.Koin
import org.koin.core.annotation.Factory
import ru.shadowsparky.http.domain.TokenStorage
import ru.shadowsparky.ui.nav.BaseRootComponent
import ru.shadowsparky.updater.presentation.UpdateComponentFactory
import ru.shadowsparky.vbox.shared.di.factory.ImageLoaderProvider
import ru.shadowsparky.vbox.shared.domain.HeathCheck
import ru.shadowsparky.vbox.shared.presentation.nav.Route
@@ -22,9 +25,12 @@ class RootComponent(
override val initStack: List<Route>,
private val healthCheck: HeathCheck,
val imageLoaderProvider: ImageLoaderProvider,
private val updateComponentFactory: UpdateComponentFactory,
override val serializer: KSerializer<Route> = Route.serializer(),
override val koin: Koin = ru.shadowsparky.koin
) : BaseRootComponent<Route>(componentContext), WebNavigationOwner {
val updateComponent = updateComponentFactory.create(childContext("UpdateComponentRoot"))
private val scope = createComponentScope()
val isLoggedIn = tokenStorage.token.map {
if (it != null) {
runCatching { healthCheck.check() }.getOrNull() ?: return@map false
@@ -34,6 +40,10 @@ class RootComponent(
}
}
init {
scope.launch { updateComponent.checkUpdates(false) }
}
override val webNavigation: WebNavigation<*> =
childStackWebNavigation(
navigator = nav,
@@ -52,7 +62,8 @@ class RootComponent(
class RootFactory(
private val tokenStorage: TokenStorage,
private val heathCheck: HeathCheck,
private val imageLoaderProvider: ImageLoaderProvider
private val imageLoaderProvider: ImageLoaderProvider,
private val updateComponentFactory: UpdateComponentFactory
) {
fun create(
context: ComponentContext,
@@ -70,7 +81,8 @@ class RootFactory(
tokenStorage,
listOf(Route.Loading(next = initStack.toSet())),
heathCheck,
imageLoaderProvider
imageLoaderProvider,
updateComponentFactory
)
}
}