From 5a48b3b37519e7792623437498495e97f8cbf80d 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 (cherry picked from commit 28fe7fec0658b5b4f4b51802ed99121c9ddf194e) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt --- .../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 63633379a..ab91faae2 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 @@ -53,8 +53,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 /** @@ -78,7 +76,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() @@ -104,12 +102,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 0de29ec4b..f086c1c24 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.domain.source.interactor.GetRemoteManga import eu.kanade.presentation.browse.FeedAddDialog import eu.kanade.presentation.browse.FeedAddSearchDialog @@ -27,11 +30,22 @@ import kotlinx.coroutines.launch @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) }, )