diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/source/online/all/EHentaiMetadata.kt b/app/src/main/java/eu/kanade/tachiyomi/data/source/online/all/EHentaiMetadata.kt index fc2eae524..506995c0b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/source/online/all/EHentaiMetadata.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/source/online/all/EHentaiMetadata.kt @@ -125,7 +125,7 @@ class EHentaiMetadata(override val id: Int, override fun fetchMangaDetails(manga: Manga) = Observable.fromCallable { //Hack to convert the gallery into an online gallery when favoriting it or reading it - metadataHelper.fetchMetadata(manga.url, exh).copyTo(manga) + metadataHelper.fetchMetadata(manga.url, exh)?.copyTo(manga) manga }!! 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 c5bc50303..b1a99c92d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt @@ -7,9 +7,15 @@ import android.widget.FrameLayout import eu.davidea.flexibleadapter.FlexibleAdapter import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Manga +import eu.kanade.tachiyomi.data.source.SourceManager +import eu.kanade.tachiyomi.data.source.online.all.EHentai +import eu.kanade.tachiyomi.data.source.online.all.EHentaiMetadata import eu.kanade.tachiyomi.util.inflate import eu.kanade.tachiyomi.widget.AutofitRecyclerView +import exh.metadata.MetadataHelper +import exh.search.SearchEngine import kotlinx.android.synthetic.main.item_catalogue_grid.view.* +import uy.kohesive.injekt.injectLazy import java.util.* /** @@ -25,6 +31,11 @@ class LibraryCategoryAdapter(val fragment: LibraryCategoryView) : */ private var mangas: List = emptyList() + private val sourceManager: SourceManager by injectLazy() + + private val searchEngine = SearchEngine() + private val metadataHelper = MetadataHelper() + init { setHasStableIds(true) } @@ -70,8 +81,28 @@ class LibraryCategoryAdapter(val fragment: LibraryCategoryView) : * @return true if the manga should be included, false otherwise. */ override fun filterObject(manga: Manga, query: String): Boolean = with(manga) { - title.toLowerCase().contains(query) || - author != null && author!!.toLowerCase().contains(query) + if(manga.source > 100) { + //Regular searching for normal manga + title.toLowerCase().contains(query) || + author != null && author!!.toLowerCase().contains(query) + } else { + //Use gallery search engine for EH manga + val source = sourceManager.get(manga.source) + source?.let { + val exh: Boolean + if(source is EHentai) + exh = source.exh + else if(source is EHentaiMetadata) + exh = source.exh + else + return@with false + + val metadata = metadataHelper.fetchMetadata(manga.url, exh) + metadata?.let { + searchEngine.matches(metadata, searchEngine.parseQuery(query)) + } ?: title.toLowerCase().contains(query) //Use regular searching when the metadata is not set up for this gallery + } ?: false + } } /** diff --git a/app/src/main/java/exh/metadata/MetadataHelper.kt b/app/src/main/java/exh/metadata/MetadataHelper.kt index 77b633620..735603c15 100644 --- a/app/src/main/java/exh/metadata/MetadataHelper.kt +++ b/app/src/main/java/exh/metadata/MetadataHelper.kt @@ -8,7 +8,8 @@ class MetadataHelper { fun writeGallery(galleryMetadata: ExGalleryMetadata) = exGalleryBook().write(galleryMetadata.galleryUniqueIdentifier(), galleryMetadata) - fun fetchMetadata(url: String, exh: Boolean) = ExGalleryMetadata().apply { + fun fetchMetadata(url: String, exh: Boolean): ExGalleryMetadata? + = ExGalleryMetadata().apply { this.url = url this.exh = exh return exGalleryBook().read(galleryUniqueIdentifier()) diff --git a/app/src/main/java/exh/search/SearchEngine.kt b/app/src/main/java/exh/search/SearchEngine.kt index 03083420f..00aaaa9df 100644 --- a/app/src/main/java/exh/search/SearchEngine.kt +++ b/app/src/main/java/exh/search/SearchEngine.kt @@ -4,6 +4,9 @@ import exh.metadata.models.ExGalleryMetadata import exh.metadata.models.Tag class SearchEngine { + + private val queryCache = mutableMapOf>() + fun matches(metadata: ExGalleryMetadata, query: List): Boolean { fun matchTagList(tags: List, @@ -56,7 +59,7 @@ class SearchEngine { return true } - fun parseQuery(query: String): List { + fun parseQuery(query: String) = queryCache.getOrPut(query, { val res = mutableListOf() var inQuotes = false @@ -128,6 +131,6 @@ class SearchEngine { } flushAll() - return res - } + res + }) }