From 28d43bbecccf2bf53555e03709e4195df825b451 Mon Sep 17 00:00:00 2001 From: NerdNumber9 Date: Sun, 14 Apr 2019 20:04:53 -0400 Subject: [PATCH] Allow searching by title for lewd galleries with missing metadata --- .../tachiyomi/data/database/queries/MangaQueries.kt | 13 +++++++++++++ .../tachiyomi/ui/library/LibraryCategoryAdapter.kt | 11 ++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt index a27a11c34..2066cbbcb 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/MangaQueries.kt @@ -11,6 +11,7 @@ import eu.kanade.tachiyomi.data.database.tables.CategoryTable import eu.kanade.tachiyomi.data.database.tables.ChapterTable import eu.kanade.tachiyomi.data.database.tables.MangaCategoryTable import eu.kanade.tachiyomi.data.database.tables.MangaTable +import exh.metadata.sql.tables.SearchMetadataTable interface MangaQueries : DbProvider { @@ -110,4 +111,16 @@ interface MangaQueries : DbProvider { fun getTotalChapterManga() = db.get().listOfObjects(Manga::class.java) .withQuery(RawQuery.builder().query(getTotalChapterMangaQuery()).observesTables(MangaTable.TABLE).build()).prepare(); + + fun getMangaWithMetadata() = db.get() + .listOfObjects(Manga::class.java) + .withQuery(RawQuery.builder() + .query(""" + SELECT ${MangaTable.TABLE}.* FROM ${MangaTable.TABLE} + INNER JOIN ${SearchMetadataTable.TABLE} + ON ${MangaTable.TABLE}.${MangaTable.COL_ID} = ${SearchMetadataTable.TABLE}.${SearchMetadataTable.COL_MANGA_ID} + ORDER BY ${MangaTable.TABLE}.${MangaTable.COL_ID} + """.trimIndent()) + .build()) + .prepare() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt index 78cceb55f..8ed14accc 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt @@ -78,6 +78,8 @@ class LibraryCategoryAdapter(val view: LibraryCategoryView) : .args(*sqlQuery.second.toTypedArray()) .build()) + val mangaWithMetadata = db.getMangaWithMetadata().executeAsBlocking() + ensureActive() // Fail early when cancelled val convertedResult = LongArray(queryResult.count) @@ -97,7 +99,14 @@ class LibraryCategoryAdapter(val view: LibraryCategoryView) : // Flow the mangas to allow cancellation of this filter operation mangas.asFlow().cancellable().filter { item -> if(isLewdSource(item.manga.source)) { - convertedResult.binarySearch(item.manga.id ?: -1) >= 0 + val mangaId = item.manga.id ?: -1 + if(convertedResult.binarySearch(mangaId) < 0) { + // Check if this manga even has metadata + if(mangaWithMetadata.binarySearchBy(mangaId) { it.id } < 0) { + // No meta? Filter using title + item.filter(savedSearchText) + } else false + } else true } else { item.filter(savedSearchText) }