Allow searching by title for lewd galleries with missing metadata
This commit is contained in:
parent
55a3b2f3a1
commit
28d43bbecc
@ -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.ChapterTable
|
||||||
import eu.kanade.tachiyomi.data.database.tables.MangaCategoryTable
|
import eu.kanade.tachiyomi.data.database.tables.MangaCategoryTable
|
||||||
import eu.kanade.tachiyomi.data.database.tables.MangaTable
|
import eu.kanade.tachiyomi.data.database.tables.MangaTable
|
||||||
|
import exh.metadata.sql.tables.SearchMetadataTable
|
||||||
|
|
||||||
interface MangaQueries : DbProvider {
|
interface MangaQueries : DbProvider {
|
||||||
|
|
||||||
@ -110,4 +111,16 @@ interface MangaQueries : DbProvider {
|
|||||||
|
|
||||||
fun getTotalChapterManga() = db.get().listOfObjects(Manga::class.java)
|
fun getTotalChapterManga() = db.get().listOfObjects(Manga::class.java)
|
||||||
.withQuery(RawQuery.builder().query(getTotalChapterMangaQuery()).observesTables(MangaTable.TABLE).build()).prepare();
|
.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()
|
||||||
}
|
}
|
||||||
|
@ -78,6 +78,8 @@ class LibraryCategoryAdapter(val view: LibraryCategoryView) :
|
|||||||
.args(*sqlQuery.second.toTypedArray())
|
.args(*sqlQuery.second.toTypedArray())
|
||||||
.build())
|
.build())
|
||||||
|
|
||||||
|
val mangaWithMetadata = db.getMangaWithMetadata().executeAsBlocking()
|
||||||
|
|
||||||
ensureActive() // Fail early when cancelled
|
ensureActive() // Fail early when cancelled
|
||||||
|
|
||||||
val convertedResult = LongArray(queryResult.count)
|
val convertedResult = LongArray(queryResult.count)
|
||||||
@ -97,7 +99,14 @@ class LibraryCategoryAdapter(val view: LibraryCategoryView) :
|
|||||||
// Flow the mangas to allow cancellation of this filter operation
|
// Flow the mangas to allow cancellation of this filter operation
|
||||||
mangas.asFlow().cancellable().filter { item ->
|
mangas.asFlow().cancellable().filter { item ->
|
||||||
if(isLewdSource(item.manga.source)) {
|
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 {
|
} else {
|
||||||
item.filter(savedSearchText)
|
item.filter(savedSearchText)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user