Integrate tag searching into library.
This commit is contained in:
parent
63d58c7a4f
commit
516a3bd017
@ -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
|
||||
}!!
|
||||
|
||||
|
@ -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<Manga> = 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) {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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<ExGalleryMetadata>(galleryUniqueIdentifier())
|
||||
|
@ -4,6 +4,9 @@ import exh.metadata.models.ExGalleryMetadata
|
||||
import exh.metadata.models.Tag
|
||||
|
||||
class SearchEngine {
|
||||
|
||||
private val queryCache = mutableMapOf<String, List<QueryComponent>>()
|
||||
|
||||
fun matches(metadata: ExGalleryMetadata, query: List<QueryComponent>): Boolean {
|
||||
|
||||
fun matchTagList(tags: List<Tag>,
|
||||
@ -56,7 +59,7 @@ class SearchEngine {
|
||||
return true
|
||||
}
|
||||
|
||||
fun parseQuery(query: String): List<QueryComponent> {
|
||||
fun parseQuery(query: String) = queryCache.getOrPut(query, {
|
||||
val res = mutableListOf<QueryComponent>()
|
||||
|
||||
var inQuotes = false
|
||||
@ -128,6 +131,6 @@ class SearchEngine {
|
||||
}
|
||||
flushAll()
|
||||
|
||||
return res
|
||||
}
|
||||
res
|
||||
})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user