Show no pinned sources message when attempting to migrate/search

This commit is contained in:
arkon 2023-01-10 22:39:19 -05:00
parent 7df10b076c
commit 6bb3070c57
4 changed files with 35 additions and 2 deletions

View File

@ -14,6 +14,7 @@ import eu.kanade.presentation.browse.components.GlobalSearchErrorResultItem
import eu.kanade.presentation.browse.components.GlobalSearchLoadingResultItem import eu.kanade.presentation.browse.components.GlobalSearchLoadingResultItem
import eu.kanade.presentation.browse.components.GlobalSearchResultItem import eu.kanade.presentation.browse.components.GlobalSearchResultItem
import eu.kanade.presentation.browse.components.GlobalSearchToolbar import eu.kanade.presentation.browse.components.GlobalSearchToolbar
import eu.kanade.presentation.components.EmptyScreen
import eu.kanade.presentation.components.LazyColumn import eu.kanade.presentation.components.LazyColumn
import eu.kanade.presentation.components.Scaffold import eu.kanade.presentation.components.Scaffold
import eu.kanade.presentation.util.padding import eu.kanade.presentation.util.padding
@ -49,6 +50,7 @@ fun GlobalSearchScreen(
) { paddingValues -> ) { paddingValues ->
GlobalSearchContent( GlobalSearchContent(
items = state.items, items = state.items,
isPinnedOnly = state.isPinnedOnly,
contentPadding = paddingValues, contentPadding = paddingValues,
getManga = getManga, getManga = getManga,
onClickSource = onClickSource, onClickSource = onClickSource,
@ -61,12 +63,20 @@ fun GlobalSearchScreen(
@Composable @Composable
fun GlobalSearchContent( fun GlobalSearchContent(
items: Map<CatalogueSource, SearchItemResult>, items: Map<CatalogueSource, SearchItemResult>,
isPinnedOnly: Boolean,
contentPadding: PaddingValues, contentPadding: PaddingValues,
getManga: @Composable (CatalogueSource, Manga) -> State<Manga>, getManga: @Composable (CatalogueSource, Manga) -> State<Manga>,
onClickSource: (CatalogueSource) -> Unit, onClickSource: (CatalogueSource) -> Unit,
onClickItem: (Manga) -> Unit, onClickItem: (Manga) -> Unit,
onLongClickItem: (Manga) -> Unit, onLongClickItem: (Manga) -> Unit,
) { ) {
if (items.isEmpty() && isPinnedOnly) {
EmptyScreen(
message = stringResource(R.string.no_pinned_sources),
)
return
}
LazyColumn( LazyColumn(
contentPadding = contentPadding, contentPadding = contentPadding,
) { ) {

View File

@ -3,6 +3,7 @@ package eu.kanade.presentation.browse
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.State import androidx.compose.runtime.State
import androidx.compose.ui.res.stringResource
import eu.kanade.domain.manga.model.Manga import eu.kanade.domain.manga.model.Manga
import eu.kanade.presentation.browse.components.GlobalSearchCardRow import eu.kanade.presentation.browse.components.GlobalSearchCardRow
import eu.kanade.presentation.browse.components.GlobalSearchEmptyResultItem import eu.kanade.presentation.browse.components.GlobalSearchEmptyResultItem
@ -10,8 +11,10 @@ import eu.kanade.presentation.browse.components.GlobalSearchErrorResultItem
import eu.kanade.presentation.browse.components.GlobalSearchLoadingResultItem import eu.kanade.presentation.browse.components.GlobalSearchLoadingResultItem
import eu.kanade.presentation.browse.components.GlobalSearchResultItem import eu.kanade.presentation.browse.components.GlobalSearchResultItem
import eu.kanade.presentation.browse.components.GlobalSearchToolbar import eu.kanade.presentation.browse.components.GlobalSearchToolbar
import eu.kanade.presentation.components.EmptyScreen
import eu.kanade.presentation.components.LazyColumn import eu.kanade.presentation.components.LazyColumn
import eu.kanade.presentation.components.Scaffold import eu.kanade.presentation.components.Scaffold
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.ui.browse.migration.search.MigrateSearchState import eu.kanade.tachiyomi.ui.browse.migration.search.MigrateSearchState
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SearchItemResult import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SearchItemResult
@ -44,6 +47,7 @@ fun MigrateSearchScreen(
MigrateSearchContent( MigrateSearchContent(
sourceId = state.manga?.source ?: -1, sourceId = state.manga?.source ?: -1,
items = state.items, items = state.items,
isPinnedOnly = state.isPinnedOnly,
contentPadding = paddingValues, contentPadding = paddingValues,
getManga = getManga, getManga = getManga,
onClickSource = onClickSource, onClickSource = onClickSource,
@ -57,12 +61,20 @@ fun MigrateSearchScreen(
fun MigrateSearchContent( fun MigrateSearchContent(
sourceId: Long, sourceId: Long,
items: Map<CatalogueSource, SearchItemResult>, items: Map<CatalogueSource, SearchItemResult>,
isPinnedOnly: Boolean,
contentPadding: PaddingValues, contentPadding: PaddingValues,
getManga: @Composable (CatalogueSource, Manga) -> State<Manga>, getManga: @Composable (CatalogueSource, Manga) -> State<Manga>,
onClickSource: (CatalogueSource) -> Unit, onClickSource: (CatalogueSource) -> Unit,
onClickItem: (Manga) -> Unit, onClickItem: (Manga) -> Unit,
onLongClickItem: (Manga) -> Unit, onLongClickItem: (Manga) -> Unit,
) { ) {
if (items.isEmpty() && isPinnedOnly) {
EmptyScreen(
message = stringResource(R.string.no_pinned_sources),
)
return
}
LazyColumn( LazyColumn(
contentPadding = contentPadding, contentPadding = contentPadding,
) { ) {

View File

@ -22,7 +22,11 @@ class MigrateSearchScreenModel(
private val sourcePreferences: SourcePreferences = Injekt.get(), private val sourcePreferences: SourcePreferences = Injekt.get(),
private val sourceManager: SourceManager = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(),
private val getManga: GetManga = Injekt.get(), private val getManga: GetManga = Injekt.get(),
) : SearchScreenModel<MigrateSearchState>(MigrateSearchState()) { ) : SearchScreenModel<MigrateSearchState>(
MigrateSearchState(
isPinnedOnly = sourcePreferences.searchPinnedSourcesOnly().get(),
),
) {
init { init {
extensionFilter = initialExtensionFilter extensionFilter = initialExtensionFilter
@ -84,6 +88,7 @@ data class MigrateSearchState(
val manga: Manga? = null, val manga: Manga? = null,
val searchQuery: String? = null, val searchQuery: String? = null,
val items: Map<CatalogueSource, SearchItemResult> = emptyMap(), val items: Map<CatalogueSource, SearchItemResult> = emptyMap(),
val isPinnedOnly: Boolean,
val dialog: MigrateSearchDialog? = null, val dialog: MigrateSearchDialog? = null,
) { ) {

View File

@ -15,7 +15,12 @@ class GlobalSearchScreenModel(
preferences: BasePreferences = Injekt.get(), preferences: BasePreferences = Injekt.get(),
private val sourcePreferences: SourcePreferences = Injekt.get(), private val sourcePreferences: SourcePreferences = Injekt.get(),
private val sourceManager: SourceManager = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(),
) : SearchScreenModel<GlobalSearchState>(GlobalSearchState(searchQuery = initialQuery)) { ) : SearchScreenModel<GlobalSearchState>(
GlobalSearchState(
searchQuery = initialQuery,
isPinnedOnly = sourcePreferences.searchPinnedSourcesOnly().get(),
),
) {
val incognitoMode = preferences.incognitoMode() val incognitoMode = preferences.incognitoMode()
val lastUsedSourceId = sourcePreferences.lastUsedSource() val lastUsedSourceId = sourcePreferences.lastUsedSource()
@ -59,6 +64,7 @@ class GlobalSearchScreenModel(
data class GlobalSearchState( data class GlobalSearchState(
val searchQuery: String? = null, val searchQuery: String? = null,
val items: Map<CatalogueSource, SearchItemResult> = emptyMap(), val items: Map<CatalogueSource, SearchItemResult> = emptyMap(),
val isPinnedOnly: Boolean,
) { ) {
val progress: Int = items.count { it.value !is SearchItemResult.Loading } val progress: Int = items.count { it.value !is SearchItemResult.Loading }