93 lines
3.5 KiB
Kotlin
93 lines
3.5 KiB
Kotlin
|
|
package exh.recs
|
||
|
|
|
||
|
|
import androidx.compose.material3.SnackbarHost
|
||
|
|
import androidx.compose.material3.SnackbarHostState
|
||
|
|
import androidx.compose.runtime.Composable
|
||
|
|
import androidx.compose.runtime.collectAsState
|
||
|
|
import androidx.compose.runtime.getValue
|
||
|
|
import androidx.compose.runtime.remember
|
||
|
|
import androidx.compose.ui.platform.LocalConfiguration
|
||
|
|
import androidx.core.os.bundleOf
|
||
|
|
import androidx.paging.compose.collectAsLazyPagingItems
|
||
|
|
import cafe.adriel.voyager.core.model.rememberScreenModel
|
||
|
|
import cafe.adriel.voyager.core.screen.Screen
|
||
|
|
import cafe.adriel.voyager.navigator.LocalNavigator
|
||
|
|
import cafe.adriel.voyager.navigator.currentOrThrow
|
||
|
|
import com.bluelinelabs.conductor.Router
|
||
|
|
import eu.kanade.domain.manga.model.Manga
|
||
|
|
import eu.kanade.presentation.browse.BrowseSourceContent
|
||
|
|
import eu.kanade.presentation.browse.components.BrowseSourceSimpleToolbar
|
||
|
|
import eu.kanade.presentation.components.Scaffold
|
||
|
|
import eu.kanade.presentation.util.LocalRouter
|
||
|
|
import eu.kanade.tachiyomi.ui.base.controller.pushController
|
||
|
|
import eu.kanade.tachiyomi.ui.browse.source.SourcesController
|
||
|
|
|
||
|
|
class RecommendsScreen(val mangaId: Long, val sourceId: Long) : Screen {
|
||
|
|
|
||
|
|
@Composable
|
||
|
|
override fun Content() {
|
||
|
|
val screenModel = rememberScreenModel { RecommendsScreenModel(mangaId, sourceId) }
|
||
|
|
val state by screenModel.state.collectAsState()
|
||
|
|
val router = LocalRouter.currentOrThrow
|
||
|
|
val navigator = LocalNavigator.currentOrThrow
|
||
|
|
|
||
|
|
val onMangaClick: (Manga) -> Unit = { manga ->
|
||
|
|
openSmartSearch(router, manga.ogTitle)
|
||
|
|
}
|
||
|
|
|
||
|
|
val snackbarHostState = remember { SnackbarHostState() }
|
||
|
|
|
||
|
|
val navigateUp: () -> Unit = {
|
||
|
|
when {
|
||
|
|
navigator.canPop -> navigator.pop()
|
||
|
|
router.backstackSize > 1 -> router.popCurrentController()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
Scaffold(
|
||
|
|
topBar = { scrollBehavior ->
|
||
|
|
BrowseSourceSimpleToolbar(
|
||
|
|
navigateUp = navigateUp,
|
||
|
|
title = screenModel.manga.title,
|
||
|
|
displayMode = screenModel.displayMode,
|
||
|
|
onDisplayModeChange = { screenModel.displayMode = it },
|
||
|
|
scrollBehavior = scrollBehavior,
|
||
|
|
)
|
||
|
|
},
|
||
|
|
snackbarHost = { SnackbarHost(hostState = snackbarHostState) },
|
||
|
|
) { paddingValues ->
|
||
|
|
val mangaList = remember(state.currentFilter) {
|
||
|
|
screenModel.getMangaListFlow(state.currentFilter)
|
||
|
|
}.collectAsLazyPagingItems()
|
||
|
|
|
||
|
|
BrowseSourceContent(
|
||
|
|
source = screenModel.source,
|
||
|
|
mangaList = mangaList,
|
||
|
|
columns = screenModel.getColumnsPreference(LocalConfiguration.current.orientation),
|
||
|
|
// SY -->
|
||
|
|
ehentaiBrowseDisplayMode = false,
|
||
|
|
// SY <--
|
||
|
|
displayMode = screenModel.displayMode,
|
||
|
|
snackbarHostState = snackbarHostState,
|
||
|
|
contentPadding = paddingValues,
|
||
|
|
onWebViewClick = null,
|
||
|
|
onHelpClick = null,
|
||
|
|
onLocalSourceHelpClick = null,
|
||
|
|
onMangaClick = onMangaClick,
|
||
|
|
onMangaLongClick = onMangaClick,
|
||
|
|
)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private fun openSmartSearch(router: Router, title: String) {
|
||
|
|
val smartSearchConfig = SourcesController.SmartSearchConfig(title)
|
||
|
|
router.pushController(
|
||
|
|
SourcesController(
|
||
|
|
bundleOf(
|
||
|
|
SourcesController.SMART_SEARCH_CONFIG to smartSearchConfig,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
)
|
||
|
|
}
|
||
|
|
}
|