feat: search entry's title in library (#158)

* feat: add library title search

* do library search only, won't do source search
This commit is contained in:
Tran M. Cuong 2024-07-08 00:02:04 +07:00 committed by GitHub
parent 241c6ff4c1
commit 271aa166aa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
25 changed files with 92 additions and 29 deletions

View file

@ -119,7 +119,7 @@ fun SourcesScreen(
listState = lazyListState,
searchQuery = state.searchQuery,
onChangeSearchQuery = onChangeSearchQuery,
placeholderText = stringResource(KMR.strings.action_source_search),
placeholderText = stringResource(KMR.strings.action_search_for_source),
)
FastScrollLazyColumn(

View file

@ -192,6 +192,7 @@ fun MangaScreen(
onRelatedMangasScreenClick: () -> Unit,
onRelatedMangaClick: (Manga) -> Unit,
onRelatedMangaLongClick: (Manga) -> Unit,
librarySearch: (query: String) -> Unit,
onSourceClick: () -> Unit,
onCoverLoaded: (MangaCover) -> Unit,
onPaletteScreenClick: () -> Unit,
@ -255,6 +256,7 @@ fun MangaScreen(
onRelatedMangasScreenClick = onRelatedMangasScreenClick,
onRelatedMangaClick = onRelatedMangaClick,
onRelatedMangaLongClick = onRelatedMangaLongClick,
librarySearch = librarySearch,
onSourceClick = onSourceClick,
onCoverLoaded = onCoverLoaded,
onPaletteScreenClick = onPaletteScreenClick,
@ -311,6 +313,7 @@ fun MangaScreen(
onRelatedMangasScreenClick = onRelatedMangasScreenClick,
onRelatedMangaClick = onRelatedMangaClick,
onRelatedMangaLongClick = onRelatedMangaLongClick,
librarySearch = librarySearch,
onSourceClick = onSourceClick,
onCoverLoaded = onCoverLoaded,
onPaletteScreenClick = onPaletteScreenClick,
@ -384,6 +387,7 @@ private fun MangaScreenSmallImpl(
onRelatedMangasScreenClick: () -> Unit,
onRelatedMangaClick: (Manga) -> Unit,
onRelatedMangaLongClick: (Manga) -> Unit,
librarySearch: (query: String) -> Unit,
onSourceClick: () -> Unit,
onCoverLoaded: (MangaCover) -> Unit,
onPaletteScreenClick: () -> Unit,
@ -556,6 +560,7 @@ private fun MangaScreenSmallImpl(
onCoverClick = onCoverClicked,
doSearch = onSearch,
// KMK -->
librarySearch = librarySearch,
onSourceClick = onSourceClick,
onCoverLoaded = onCoverLoaded,
// KMK <--
@ -790,6 +795,7 @@ private fun MangaScreenLargeImpl(
onRelatedMangasScreenClick: () -> Unit,
onRelatedMangaClick: (Manga) -> Unit,
onRelatedMangaLongClick: (Manga) -> Unit,
librarySearch: (query: String) -> Unit,
onSourceClick: () -> Unit,
onCoverLoaded: (MangaCover) -> Unit,
onPaletteScreenClick: () -> Unit,
@ -954,6 +960,7 @@ private fun MangaScreenLargeImpl(
onCoverClick = onCoverClicked,
doSearch = onSearch,
// KMK -->
librarySearch = librarySearch,
onSourceClick = onSourceClick,
onCoverLoaded = onCoverLoaded,
// KMK <--

View file

@ -80,6 +80,7 @@ import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.system.copyToClipboard
import tachiyomi.domain.manga.model.Manga
import tachiyomi.i18n.MR
import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
import tachiyomi.presentation.core.components.material.TextButton
import tachiyomi.presentation.core.components.material.padding
@ -111,6 +112,7 @@ fun MangaInfoBox(
doSearch: (query: String, global: Boolean) -> Unit,
modifier: Modifier = Modifier,
// KMK -->
librarySearch: (query: String) -> Unit,
onSourceClick: () -> Unit,
onCoverLoaded: (DomainMangaCover) -> Unit,
// KMK <--
@ -134,7 +136,7 @@ fun MangaInfoBox(
colors = backdropGradientColors,
// KMK -->
startY = size.height / 2,
// KMKM <--
// KMK <--
),
)
}
@ -161,6 +163,7 @@ fun MangaInfoBox(
sourceName = sourceName,
isStubSource = isStubSource,
// KMK -->
librarySearch = librarySearch,
onSourceClick = onSourceClick,
onCoverLoaded = onCoverLoaded,
// KMK <--
@ -178,6 +181,7 @@ fun MangaInfoBox(
sourceName = sourceName,
isStubSource = isStubSource,
// KMK -->
librarySearch = librarySearch,
onSourceClick = onSourceClick,
onCoverLoaded = onCoverLoaded,
// KMK <--
@ -429,6 +433,7 @@ private fun MangaAndSourceTitlesLarge(
sourceName: String,
isStubSource: Boolean,
// KMK -->
librarySearch: (query: String) -> Unit,
onSourceClick: () -> Unit,
onCoverLoaded: (DomainMangaCover) -> Unit,
// KMK <--
@ -459,6 +464,7 @@ private fun MangaAndSourceTitlesLarge(
isStubSource = isStubSource,
textAlign = TextAlign.Center,
// KMK -->
librarySearch = librarySearch,
onSourceClick = onSourceClick,
// KMK <--
)
@ -478,6 +484,7 @@ private fun MangaAndSourceTitlesSmall(
sourceName: String,
isStubSource: Boolean,
// KMK -->
librarySearch: (query: String) -> Unit,
onSourceClick: () -> Unit,
onCoverLoaded: (DomainMangaCover) -> Unit,
// KMK <--
@ -512,6 +519,7 @@ private fun MangaAndSourceTitlesSmall(
sourceName = sourceName,
isStubSource = isStubSource,
// KMK -->
librarySearch = librarySearch,
onSourceClick = onSourceClick,
// KMK <--
)
@ -519,6 +527,7 @@ private fun MangaAndSourceTitlesSmall(
}
}
@Suppress("UnusedReceiverParameter")
@Composable
private fun ColumnScope.MangaContentInfo(
title: String,
@ -530,20 +539,52 @@ private fun ColumnScope.MangaContentInfo(
isStubSource: Boolean,
textAlign: TextAlign? = LocalTextStyle.current.textAlign,
// KMK -->
librarySearch: (query: String) -> Unit,
onSourceClick: () -> Unit,
// KMK <--
) {
val context = LocalContext.current
// KMK -->
var showMenu by remember { mutableStateOf(false) }
DropdownMenu(
expanded = showMenu,
onDismissRequest = { showMenu = false },
) {
DropdownMenuItem(
text = { Text(text = stringResource(KMR.strings.action_library_search)) },
onClick = {
librarySearch(title)
showMenu = false
},
)
DropdownMenuItem(
text = { Text(text = stringResource(MR.strings.action_global_search)) },
onClick = {
doSearch(title, true)
showMenu = false
},
)
DropdownMenuItem(
text = { Text(text = stringResource(MR.strings.action_copy_to_clipboard)) },
onClick = {
context.copyToClipboard(
title,
title,
)
showMenu = false
},
)
}
// KMK <--
Text(
text = title.ifBlank { stringResource(MR.strings.unknown_title) },
style = MaterialTheme.typography.titleLarge,
modifier = Modifier.clickableNoIndication(
onLongClick = {
if (title.isNotBlank()) {
context.copyToClipboard(
title,
title,
)
// KMK -->
showMenu = true
// KMK <--
}
},
onClick = { if (title.isNotBlank()) doSearch(title, true) },

View file

@ -301,6 +301,11 @@ class MangaScreen(
onRefresh = screenModel::fetchAllFromSource,
onContinueReading = { continueReading(context, screenModel.getNextUnreadChapter()) },
onSearch = { query, global -> scope.launch { performSearch(navigator, query, global) } },
// KMK -->
librarySearch = { query ->
scope.launch { performSearch(navigator, query, global = false, library = true) }
},
// KMK <--
onCoverClicked = screenModel::showCoverDialog,
onShareClicked = { shareManga(context, screenModel.manga, screenModel.source) }.takeIf { isHttpSource },
onDownloadActionClicked = screenModel::runDownloadAction.takeIf { !successState.source.isLocalOrStub() },
@ -573,7 +578,14 @@ class MangaScreen(
*
* @param query the search query to the parent controller
*/
private suspend fun performSearch(navigator: Navigator, query: String, global: Boolean) {
private suspend fun performSearch(
navigator: Navigator,
query: String,
global: Boolean,
// KMK -->
library: Boolean = false,
// KMK <--
) {
if (global) {
navigator.push(GlobalSearchScreen(query))
return
@ -585,7 +597,8 @@ class MangaScreen(
// KMK -->
navigator.popUntil { screen ->
screen is BrowseSourceScreen || screen is HomeScreen || screen is SourceFeedScreen
screen is HomeScreen ||
!library && (screen is BrowseSourceScreen || screen is SourceFeedScreen)
}
// KMK <--

View file

@ -6,7 +6,7 @@
<string name="theme_matrix">ماتريكس</string>
<string name="theme_mocha">موكا</string>
<string name="theme_sapphire">ياقوت</string>
<string name="action_source_search">البحث عن مصدر</string>
<string name="action_search_for_source">البحث عن مصدر</string>
<string name="action_toggle_nsfw_only">تبديل NSFW فقط</string>
<string name="action_bulk_select">وضع التحديد بالجملة</string>
<string name="action_faq_and_guides">الأسئلة الشائعة والأدلة</string>

View file

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Actions -->
<string name="action_source_search">Search for source</string>
<string name="action_search_for_source">Search for source</string>
<string name="action_source_search">Source search</string>
<string name="action_library_search">Library search</string>
<string name="action_toggle_nsfw_only">Toggle NSFW only</string>
<string name="action_bulk_select">Bulk selection mode</string>
<string name="action_faq_and_guides">FAQ and Guides</string>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_source_search">Hledat zdroj</string>
<string name="action_search_for_source">Hledat zdroj</string>
<string name="action_toggle_nsfw_only">Přepnout pouze NSFW</string>
<string name="action_bulk_select">Režim hromadného výběru</string>
<string name="action_faq_and_guides">FAQ a návody</string>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_source_search">Søg efter kilde</string>
<string name="action_search_for_source">Søg efter kilde</string>
<string name="action_toggle_nsfw_only">Slå kun NSFW til/fra</string>
<string name="action_bulk_select">Masse valg tilstand</string>
<string name="action_faq_and_guides">Ofte stillede spørgsmål og vejledninger</string>

View file

@ -6,7 +6,7 @@
<string name="theme_matrix">Matrix</string>
<string name="theme_mocha">Mokka</string>
<string name="theme_sapphire">Saphir</string>
<string name="action_source_search">Nach Quelle suchen</string>
<string name="action_search_for_source">Nach Quelle suchen</string>
<string name="action_toggle_nsfw_only">Nur NSFW umschalten</string>
<string name="action_bulk_select">Massenauswahlmodus</string>
<string name="action_faq_and_guides">FAQ und Anleitungen</string>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_source_search">Αναζήτηση πηγής</string>
<string name="action_search_for_source">Αναζήτηση πηγής</string>
<string name="action_toggle_nsfw_only">Εναλλαγή μόνο NSFW</string>
<string name="action_bulk_select">Λειτουργία μαζικής επιλογής</string>
<string name="action_faq_and_guides">Συχνές ερωτήσεις και οδηγοί</string>

View file

@ -6,7 +6,7 @@
<string name="theme_matrix">Matrix</string>
<string name="theme_mocha">Moca</string>
<string name="theme_sapphire">Zafiro</string>
<string name="action_source_search">Buscar fuente</string>
<string name="action_search_for_source">Buscar fuente</string>
<string name="action_toggle_nsfw_only">Alternar sólo NSFW</string>
<string name="action_bulk_select">Modo de selección masiva</string>
<string name="action_faq_and_guides">Preguntas frecuentes y guías</string>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_source_search">Hae lähdekoodia</string>
<string name="action_search_for_source">Hae lähdekoodia</string>
<string name="action_toggle_nsfw_only">Vaihda vain NSFW</string>
<string name="action_bulk_select">Bulk valintatila</string>
<string name="action_faq_and_guides">UKK ja oppaat</string>

View file

@ -6,7 +6,7 @@
<string name="theme_matrix">Matrix</string>
<string name="theme_mocha">Mocha</string>
<string name="theme_sapphire">Saphir</string>
<string name="action_source_search">Rechercher une source</string>
<string name="action_search_for_source">Rechercher une source</string>
<string name="action_toggle_nsfw_only">Activer/désactiver uniquement NSFW</string>
<string name="action_bulk_select">Mode de sélection en bloc</string>
<string name="action_faq_and_guides">FAQ et tutoriels</string>

View file

@ -6,7 +6,7 @@
<string name="theme_matrix">Matrix</string>
<string name="theme_mocha">Mocha</string>
<string name="theme_sapphire">Zaffiro</string>
<string name="action_source_search">Cerca la sorgente</string>
<string name="action_search_for_source">Cerca la sorgente</string>
<string name="action_toggle_nsfw_only">Attiva/disattiva solo NSFW</string>
<string name="action_bulk_select">Modalità selezione Bulk</string>
<string name="action_faq_and_guides">FAQ e guide</string>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_source_search">ソースを検索</string>
<string name="action_search_for_source">ソースを検索</string>
<string name="action_toggle_nsfw_only">NSFWのみ切り替え</string>
<string name="action_bulk_select">一括選択モード</string>
<string name="action_faq_and_guides">FAQ とガイド</string>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_source_search">Bron zoeken</string>
<string name="action_search_for_source">Bron zoeken</string>
<string name="action_toggle_nsfw_only">Alleen NSFW in-/uitschakelen</string>
<string name="action_bulk_select">Bulk selectiemodus</string>
<string name="action_faq_and_guides">FAQ en handleidingen</string>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_source_search">Szukaj źródła</string>
<string name="action_search_for_source">Szukaj źródła</string>
<string name="action_toggle_nsfw_only">Przełącz tylko NSFW</string>
<string name="action_bulk_select">Tryb masowego zaznaczenia</string>
<string name="action_faq_and_guides">FAQ i przewodniki</string>

View file

@ -6,7 +6,7 @@
<string name="theme_matrix">Verde</string>
<string name="theme_mocha">Café</string>
<string name="theme_sapphire">Safira</string>
<string name="action_source_search">Pesquisar fonte</string>
<string name="action_search_for_source">Pesquisar fonte</string>
<string name="action_toggle_nsfw_only">Ativar/desativar somente NSFW</string>
<string name="action_bulk_select">Modo de seleção em massa</string>
<string name="action_faq_and_guides">FAQ e Guias</string>

View file

@ -6,7 +6,7 @@
<string name="theme_matrix">Verde</string>
<string name="theme_mocha">Café</string>
<string name="theme_sapphire">Safira</string>
<string name="action_source_search">Pesquisar fonte</string>
<string name="action_search_for_source">Pesquisar fonte</string>
<string name="action_toggle_nsfw_only">Ativar/desativar somente NSFW</string>
<string name="action_bulk_select">Modo de seleção em massa</string>
<string name="action_faq_and_guides">FAQ e Guias</string>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_source_search">Caută sursa</string>
<string name="action_search_for_source">Caută sursa</string>
<string name="action_toggle_nsfw_only">Comută numai NSFW</string>
<string name="action_bulk_select">Mod selecţie în masă</string>
<string name="action_faq_and_guides">Întrebări frecvente și ghiduri</string>

View file

@ -6,7 +6,7 @@
<string name="theme_matrix">Matrix</string>
<string name="theme_mocha">Мокко</string>
<string name="theme_sapphire">Сапфир</string>
<string name="action_source_search">Поиск источника</string>
<string name="action_search_for_source">Поиск источника</string>
<string name="action_toggle_nsfw_only">Переключить только NSFW</string>
<string name="action_bulk_select">Режим массового выбора</string>
<string name="action_faq_and_guides">FAQ и руководства</string>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_source_search">Sök efter källa</string>
<string name="action_search_for_source">Sök efter källa</string>
<string name="action_toggle_nsfw_only">Växla endast NSFW</string>
<string name="action_bulk_select">Bulk markeringsläge</string>
<string name="action_faq_and_guides">Vanliga frågor och guider</string>

View file

@ -2,7 +2,7 @@
<resources>
<string name="theme_cottoncandy">Бавовняні цукерки</string>
<string name="theme_mocha">Моча</string>
<string name="action_source_search">Пошук джерела</string>
<string name="action_search_for_source">Пошук джерела</string>
<string name="action_toggle_nsfw_only">Лише NSFW</string>
<string name="action_bulk_select">Масовий режим вибору</string>
<string name="action_faq_and_guides">ЧаПи та керівництва</string>

View file

@ -6,7 +6,7 @@
<string name="theme_matrix">黑客</string>
<string name="theme_mocha">摩卡</string>
<string name="theme_sapphire">蓝宝石</string>
<string name="action_source_search">搜索源</string>
<string name="action_search_for_source">搜索源</string>
<string name="action_toggle_nsfw_only">仅切换 NSFW</string>
<string name="action_bulk_select">批量选择模式</string>
<string name="action_faq_and_guides">常见问题和指南</string>

View file

@ -6,7 +6,7 @@
<string name="theme_matrix">駭客</string>
<string name="theme_mocha">摩卡</string>
<string name="theme_sapphire">藍寶石</string>
<string name="action_source_search">搜尋來源</string>
<string name="action_search_for_source">搜尋來源</string>
<string name="action_toggle_nsfw_only">切換僅 NSFW</string>
<string name="action_bulk_select">批量選擇模式</string>
<string name="action_faq_and_guides">常見問題和指南</string>