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 {
|
override fun fetchMangaDetails(manga: Manga) = Observable.fromCallable {
|
||||||
//Hack to convert the gallery into an online gallery when favoriting it or reading it
|
//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
|
manga
|
||||||
}!!
|
}!!
|
||||||
|
|
||||||
|
@ -7,9 +7,15 @@ import android.widget.FrameLayout
|
|||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
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.util.inflate
|
||||||
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
||||||
|
import exh.metadata.MetadataHelper
|
||||||
|
import exh.search.SearchEngine
|
||||||
import kotlinx.android.synthetic.main.item_catalogue_grid.view.*
|
import kotlinx.android.synthetic.main.item_catalogue_grid.view.*
|
||||||
|
import uy.kohesive.injekt.injectLazy
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -25,6 +31,11 @@ class LibraryCategoryAdapter(val fragment: LibraryCategoryView) :
|
|||||||
*/
|
*/
|
||||||
private var mangas: List<Manga> = emptyList()
|
private var mangas: List<Manga> = emptyList()
|
||||||
|
|
||||||
|
private val sourceManager: SourceManager by injectLazy()
|
||||||
|
|
||||||
|
private val searchEngine = SearchEngine()
|
||||||
|
private val metadataHelper = MetadataHelper()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
setHasStableIds(true)
|
setHasStableIds(true)
|
||||||
}
|
}
|
||||||
@ -70,8 +81,28 @@ class LibraryCategoryAdapter(val fragment: LibraryCategoryView) :
|
|||||||
* @return true if the manga should be included, false otherwise.
|
* @return true if the manga should be included, false otherwise.
|
||||||
*/
|
*/
|
||||||
override fun filterObject(manga: Manga, query: String): Boolean = with(manga) {
|
override fun filterObject(manga: Manga, query: String): Boolean = with(manga) {
|
||||||
title.toLowerCase().contains(query) ||
|
if(manga.source > 100) {
|
||||||
author != null && author!!.toLowerCase().contains(query)
|
//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)
|
fun writeGallery(galleryMetadata: ExGalleryMetadata)
|
||||||
= exGalleryBook().write(galleryMetadata.galleryUniqueIdentifier(), galleryMetadata)
|
= 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.url = url
|
||||||
this.exh = exh
|
this.exh = exh
|
||||||
return exGalleryBook().read<ExGalleryMetadata>(galleryUniqueIdentifier())
|
return exGalleryBook().read<ExGalleryMetadata>(galleryUniqueIdentifier())
|
||||||
|
@ -4,6 +4,9 @@ import exh.metadata.models.ExGalleryMetadata
|
|||||||
import exh.metadata.models.Tag
|
import exh.metadata.models.Tag
|
||||||
|
|
||||||
class SearchEngine {
|
class SearchEngine {
|
||||||
|
|
||||||
|
private val queryCache = mutableMapOf<String, List<QueryComponent>>()
|
||||||
|
|
||||||
fun matches(metadata: ExGalleryMetadata, query: List<QueryComponent>): Boolean {
|
fun matches(metadata: ExGalleryMetadata, query: List<QueryComponent>): Boolean {
|
||||||
|
|
||||||
fun matchTagList(tags: List<Tag>,
|
fun matchTagList(tags: List<Tag>,
|
||||||
@ -56,7 +59,7 @@ class SearchEngine {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parseQuery(query: String): List<QueryComponent> {
|
fun parseQuery(query: String) = queryCache.getOrPut(query, {
|
||||||
val res = mutableListOf<QueryComponent>()
|
val res = mutableListOf<QueryComponent>()
|
||||||
|
|
||||||
var inQuotes = false
|
var inQuotes = false
|
||||||
@ -128,6 +131,6 @@ class SearchEngine {
|
|||||||
}
|
}
|
||||||
flushAll()
|
flushAll()
|
||||||
|
|
||||||
return res
|
res
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user