package exh.recs import androidx.activity.compose.BackHandler 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.compose.ui.platform.LocalHapticFeedback import androidx.paging.compose.collectAsLazyPagingItems import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.BrowseSourceContent import eu.kanade.presentation.browse.components.BrowseSourceSimpleToolbar import eu.kanade.presentation.components.SelectionToolbar import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.ui.browse.AddDuplicateMangaDialog import eu.kanade.tachiyomi.ui.browse.AllowDuplicateDialog import eu.kanade.tachiyomi.ui.browse.BulkFavoriteScreenModel import eu.kanade.tachiyomi.ui.browse.ChangeMangaCategoryDialog import eu.kanade.tachiyomi.ui.browse.ChangeMangasCategoryDialog import eu.kanade.tachiyomi.ui.browse.RemoveMangaDialog import eu.kanade.tachiyomi.ui.browse.source.SourcesScreen import exh.ui.ifSourcesLoaded import tachiyomi.domain.manga.model.Manga import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.screens.LoadingScreen class RecommendsScreen(val mangaId: Long, val sourceId: Long) : Screen() { @Composable override fun Content() { if (!ifSourcesLoaded()) { LoadingScreen() return } val screenModel = rememberScreenModel { RecommendsScreenModel(mangaId, sourceId) } val navigator = LocalNavigator.currentOrThrow // KMK --> val state by screenModel.state.collectAsState() val bulkFavoriteScreenModel = rememberScreenModel { BulkFavoriteScreenModel() } val bulkFavoriteState by bulkFavoriteScreenModel.state.collectAsState() val haptic = LocalHapticFeedback.current BackHandler(enabled = bulkFavoriteState.selectionMode) { bulkFavoriteScreenModel.toggleSelectionMode() } // KMK <-- val onMangaClick: (Manga) -> Unit = { manga -> openSmartSearch(navigator, manga.ogTitle) } val snackbarHostState = remember { SnackbarHostState() } Scaffold( topBar = { scrollBehavior -> // KMK --> if (bulkFavoriteState.selectionMode) { SelectionToolbar( selectedCount = bulkFavoriteState.selection.size, onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode, onChangeCategoryClicked = bulkFavoriteScreenModel::addFavorite, onSelectAll = { state.mangaDisplayingList.forEach { manga -> if (!bulkFavoriteState.selection.contains(manga)) { bulkFavoriteScreenModel.select(manga) } } }, ) } else { // KMK <-- BrowseSourceSimpleToolbar( navigateUp = navigator::pop, title = screenModel.manga.title, displayMode = screenModel.displayMode, onDisplayModeChange = { screenModel.displayMode = it }, scrollBehavior = scrollBehavior, // KMK --> toggleSelectionMode = bulkFavoriteScreenModel::toggleSelectionMode, // KMK <-- ) } }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, ) { paddingValues -> val pagingFlow by screenModel.mangaPagerFlowFlow.collectAsState() BrowseSourceContent( source = screenModel.source, mangaList = pagingFlow.collectAsLazyPagingItems(), columns = screenModel.getColumnsPreference(LocalConfiguration.current.orientation), // SY --> ehentaiBrowseDisplayMode = false, // SY <-- displayMode = screenModel.displayMode, snackbarHostState = snackbarHostState, contentPadding = paddingValues, onWebViewClick = null, onHelpClick = null, onLocalSourceHelpClick = null, onMangaClick = { manga -> // KMK --> if (bulkFavoriteState.selectionMode) { bulkFavoriteScreenModel.toggleSelection(manga) } else { // KMK <-- onMangaClick(manga) } }, onMangaLongClick = { manga -> // KMK --> if (!bulkFavoriteState.selectionMode) { bulkFavoriteScreenModel.addRemoveManga(manga, haptic) } // KMK <-- }, // KMK --> selection = bulkFavoriteState.selection, browseSourceState = state, // KMK <-- ) } // KMK --> when (bulkFavoriteState.dialog) { is BulkFavoriteScreenModel.Dialog.AddDuplicateManga -> AddDuplicateMangaDialog(bulkFavoriteScreenModel) is BulkFavoriteScreenModel.Dialog.RemoveManga -> RemoveMangaDialog(bulkFavoriteScreenModel) is BulkFavoriteScreenModel.Dialog.ChangeMangaCategory -> ChangeMangaCategoryDialog(bulkFavoriteScreenModel) is BulkFavoriteScreenModel.Dialog.ChangeMangasCategory -> ChangeMangasCategoryDialog(bulkFavoriteScreenModel) is BulkFavoriteScreenModel.Dialog.AllowDuplicate -> AllowDuplicateDialog(bulkFavoriteScreenModel) else -> {} } // KMK <-- } /** * Called when click on an recommending entry to search sources for it. */ private fun openSmartSearch(navigator: Navigator, title: String) { val smartSearchConfig = SourcesScreen.SmartSearchConfig(title) navigator.push(SourcesScreen(smartSearchConfig)) } }