Fix issues with feed reloading all the time

This commit is contained in:
Jobobby04 2023-04-09 20:25:29 -04:00
parent d532ea8137
commit 28fe7fec06
2 changed files with 19 additions and 12 deletions

View File

@ -47,8 +47,6 @@ import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import xyz.nulldev.ts.api.http.serializer.FilterSerializer import xyz.nulldev.ts.api.http.serializer.FilterSerializer
import java.util.concurrent.Executors 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 import tachiyomi.domain.manga.model.Manga as DomainManga
/** /**
@ -72,7 +70,7 @@ open class FeedScreenModel(
val events = _events.receiveAsFlow() val events = _events.receiveAsFlow()
private val coroutineDispatcher = Executors.newFixedThreadPool(1).asCoroutineDispatcher() private val coroutineDispatcher = Executors.newFixedThreadPool(1).asCoroutineDispatcher()
var lastRefresh = System.currentTimeMillis().milliseconds var pushed: Boolean = false
init { init {
getFeedSavedSearchGlobal.subscribe() getFeedSavedSearchGlobal.subscribe()
@ -98,12 +96,7 @@ open class FeedScreenModel(
} }
fun init() { fun init() {
if (lastRefresh - System.currentTimeMillis().milliseconds > 30.seconds) return pushed = false
refresh()
}
fun refresh() {
lastRefresh = System.currentTimeMillis().milliseconds
coroutineScope.launchIO { coroutineScope.launchIO {
val newItems = state.value.items?.map { it.copy(results = null) } ?: return@launchIO val newItems = state.value.items?.map { it.copy(results = null) } ?: return@launchIO
mutableState.update { state -> mutableState.update { state ->

View File

@ -3,14 +3,17 @@ package eu.kanade.tachiyomi.ui.browse.feed
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Add import androidx.compose.material.icons.outlined.Add
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel
import cafe.adriel.voyager.core.screen.Screen 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.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow import cafe.adriel.voyager.navigator.currentOrThrow
import cafe.adriel.voyager.navigator.tab.LocalTabNavigator
import eu.kanade.presentation.browse.FeedAddDialog import eu.kanade.presentation.browse.FeedAddDialog
import eu.kanade.presentation.browse.FeedAddSearchDialog import eu.kanade.presentation.browse.FeedAddSearchDialog
import eu.kanade.presentation.browse.FeedDeleteConfirmDialog import eu.kanade.presentation.browse.FeedDeleteConfirmDialog
@ -27,13 +30,24 @@ import tachiyomi.domain.source.interactor.GetRemoteManga
@Composable @Composable
fun Screen.feedTab(): TabContent { fun Screen.feedTab(): TabContent {
val navigator = LocalNavigator.currentOrThrow val navigator = LocalNavigator.currentOrThrow
val tabNavigator = LocalTabNavigator.current
val screenModel = rememberScreenModel { FeedScreenModel() } val screenModel = rememberScreenModel { FeedScreenModel() }
val state by screenModel.state.collectAsState() val state by screenModel.state.collectAsState()
LaunchedEffect(Unit) { DisposableEffect(navigator.lastEvent) {
if (navigator.lastEvent == StackEvent.Push) {
screenModel.pushed = true
} else if (!screenModel.pushed) {
screenModel.init() screenModel.init()
} }
onDispose {
if (navigator.lastEvent == StackEvent.Idle && screenModel.pushed) {
screenModel.pushed = false
}
}
}
return TabContent( return TabContent(
titleRes = R.string.feed, titleRes = R.string.feed,
actions = listOf( actions = listOf(
@ -72,7 +86,7 @@ fun Screen.feedTab(): TabContent {
onClickManga = { manga -> onClickManga = { manga ->
navigator.push(MangaScreen(manga.id, true)) navigator.push(MangaScreen(manga.id, true))
}, },
onRefresh = screenModel::refresh, onRefresh = screenModel::init,
getMangaState = { manga, source -> screenModel.getManga(initialManga = manga, source = source) }, getMangaState = { manga, source -> screenModel.getManga(initialManga = manga, source = source) },
) )