Fix issues with feed reloading all the time
This commit is contained in:
parent
d532ea8137
commit
28fe7fec06
@ -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 ->
|
||||
|
@ -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) },
|
||||
)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user