From 28fe7fec0658b5b4f4b51802ed99121c9ddf194e Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Sun, 9 Apr 2023 20:25:29 -0400 Subject: [PATCH] Fix issues with feed reloading all the time --- .../ui/browse/feed/FeedScreenModel.kt | 11 ++-------- .../tachiyomi/ui/browse/feed/FeedTab.kt | 20 ++++++++++++++++--- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedScreenModel.kt index d3267507d..bfd4578d6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedScreenModel.kt @@ -47,8 +47,6 @@ import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import xyz.nulldev.ts.api.http.serializer.FilterSerializer import java.util.concurrent.Executors -import kotlin.time.Duration.Companion.milliseconds -import kotlin.time.Duration.Companion.seconds import tachiyomi.domain.manga.model.Manga as DomainManga /** @@ -72,7 +70,7 @@ open class FeedScreenModel( val events = _events.receiveAsFlow() private val coroutineDispatcher = Executors.newFixedThreadPool(1).asCoroutineDispatcher() - var lastRefresh = System.currentTimeMillis().milliseconds + var pushed: Boolean = false init { getFeedSavedSearchGlobal.subscribe() @@ -98,12 +96,7 @@ open class FeedScreenModel( } fun init() { - if (lastRefresh - System.currentTimeMillis().milliseconds > 30.seconds) return - refresh() - } - - fun refresh() { - lastRefresh = System.currentTimeMillis().milliseconds + pushed = false coroutineScope.launchIO { val newItems = state.value.items?.map { it.copy(results = null) } ?: return@launchIO mutableState.update { state -> diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt index 52c96df9e..9cbca24a1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt @@ -3,14 +3,17 @@ package eu.kanade.tachiyomi.ui.browse.feed import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Add import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen +import cafe.adriel.voyager.core.stack.StackEvent import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow +import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import eu.kanade.presentation.browse.FeedAddDialog import eu.kanade.presentation.browse.FeedAddSearchDialog import eu.kanade.presentation.browse.FeedDeleteConfirmDialog @@ -27,11 +30,22 @@ import tachiyomi.domain.source.interactor.GetRemoteManga @Composable fun Screen.feedTab(): TabContent { val navigator = LocalNavigator.currentOrThrow + val tabNavigator = LocalTabNavigator.current val screenModel = rememberScreenModel { FeedScreenModel() } val state by screenModel.state.collectAsState() - LaunchedEffect(Unit) { - screenModel.init() + DisposableEffect(navigator.lastEvent) { + if (navigator.lastEvent == StackEvent.Push) { + screenModel.pushed = true + } else if (!screenModel.pushed) { + screenModel.init() + } + + onDispose { + if (navigator.lastEvent == StackEvent.Idle && screenModel.pushed) { + screenModel.pushed = false + } + } } return TabContent( @@ -72,7 +86,7 @@ fun Screen.feedTab(): TabContent { onClickManga = { manga -> navigator.push(MangaScreen(manga.id, true)) }, - onRefresh = screenModel::refresh, + onRefresh = screenModel::init, getMangaState = { manga, source -> screenModel.getManga(initialManga = manga, source = source) }, )