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 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 ->
|
||||||
|
@ -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) },
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user