Allow searching by title for lewd galleries with missing metadata

This commit is contained in:
NerdNumber9 2019-04-14 20:04:53 -04:00
parent 55a3b2f3a1
commit 28d43bbecc
2 changed files with 23 additions and 1 deletions

View File

@ -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()
}

View File

@ -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)
}