Better support tsumno and mangadex tag search

This commit is contained in:
Jobobby04 2021-11-13 23:19:01 -05:00
parent 114ef56329
commit fb4d15d9ef

View File

@ -8,6 +8,7 @@ import exh.source.EXH_SOURCE_ID
import exh.source.PURURIN_SOURCE_ID import exh.source.PURURIN_SOURCE_ID
import exh.source.TSUMINO_SOURCE_ID import exh.source.TSUMINO_SOURCE_ID
import exh.source.hitomiSourceIds import exh.source.hitomiSourceIds
import exh.source.mangaDexSourceIds
import exh.source.nHentaiSourceIds import exh.source.nHentaiSourceIds
import java.util.Locale import java.util.Locale
@ -18,7 +19,15 @@ object SourceTagsUtil {
tag: String? = null, tag: String? = null,
fullTag: String? = null fullTag: String? = null
): String? { ): String? {
return if (sourceId == EXH_SOURCE_ID || sourceId == EH_SOURCE_ID || sourceId in nHentaiSourceIds || sourceId in hitomiSourceIds) { return if (
sourceId == EXH_SOURCE_ID ||
sourceId == EH_SOURCE_ID ||
sourceId in nHentaiSourceIds ||
sourceId in hitomiSourceIds ||
sourceId in mangaDexSourceIds ||
sourceId == PURURIN_SOURCE_ID ||
sourceId == TSUMINO_SOURCE_ID
) {
val parsed = when { val parsed = when {
fullTag != null -> parseTag(fullTag) fullTag != null -> parseTag(fullTag)
namespace != null && tag != null -> RaisedTag(namespace, tag, TAG_TYPE_DEFAULT) namespace != null && tag != null -> RaisedTag(namespace, tag, TAG_TYPE_DEFAULT)
@ -28,27 +37,28 @@ object SourceTagsUtil {
when (sourceId) { when (sourceId) {
in hitomiSourceIds -> wrapTagHitomi(parsed.namespace, parsed.name.substringBefore('|').trim()) in hitomiSourceIds -> wrapTagHitomi(parsed.namespace, parsed.name.substringBefore('|').trim())
in nHentaiSourceIds -> wrapTagNHentai(parsed.namespace, parsed.name.substringBefore('|').trim()) in nHentaiSourceIds -> wrapTagNHentai(parsed.namespace, parsed.name.substringBefore('|').trim())
in mangaDexSourceIds -> parsed.name
PURURIN_SOURCE_ID -> parsed.name.substringBefore('|').trim() PURURIN_SOURCE_ID -> parsed.name.substringBefore('|').trim()
TSUMINO_SOURCE_ID -> parsed.name.substringBefore('|').trim() TSUMINO_SOURCE_ID -> wrapTagTsumino(parsed.namespace, parsed.name.substringBefore('|').trim())
else -> wrapTag(parsed.namespace, parsed.name.substringBefore('|').trim()) else -> wrapTag(parsed.namespace, parsed.name.substringBefore('|').trim())
} }
} else null } else null
} else null } else null
} }
private fun wrapTag(namespace: String, tag: String) = if (tag.contains(' ')) { private fun wrapTag(namespace: String, tag: String) = if (tag.contains(spaceRegex)) {
"$namespace:\"$tag$\"" "$namespace:\"$tag$\""
} else { } else {
"$namespace:$tag$" "$namespace:$tag$"
} }
private fun wrapTagHitomi(namespace: String, tag: String) = if (tag.contains(' ')) { private fun wrapTagHitomi(namespace: String, tag: String) = if (tag.contains(spaceRegex)) {
"$namespace:$tag".replace("\\s".toRegex(), "_") "$namespace:$tag".replace("\\s".toRegex(), "_")
} else { } else {
"$namespace:$tag" "$namespace:$tag"
} }
private fun wrapTagNHentai(namespace: String, tag: String) = if (tag.contains(' ')) { private fun wrapTagNHentai(namespace: String, tag: String) = if (tag.contains(spaceRegex)) {
if (namespace == "tag") { if (namespace == "tag") {
""""$tag"""" """"$tag""""
} else { } else {
@ -58,6 +68,20 @@ object SourceTagsUtil {
"$namespace:$tag" "$namespace:$tag"
} }
private fun wrapTagTsumino(namespace: String, tag: String) = if (tag.contains(spaceRegex)) {
if (namespace == "tags") {
"\"${tag.replace(spaceRegex, "_")}\""
} else {
"\"$namespace: ${tag.replace(spaceRegex, "_")}\""
}
} else {
if (namespace == "tags") {
tag
} else {
"$namespace:$tag"
}
}
fun parseTag(tag: String) = RaisedTag( fun parseTag(tag: String) = RaisedTag(
if (tag.startsWith("-")) { if (tag.startsWith("-")) {
tag.substringAfter("-") tag.substringAfter("-")
@ -68,7 +92,7 @@ object SourceTagsUtil {
if (tag.startsWith("-")) TAG_TYPE_EXCLUDE else TAG_TYPE_DEFAULT if (tag.startsWith("-")) TAG_TYPE_EXCLUDE else TAG_TYPE_DEFAULT
) )
const val TAG_TYPE_EXCLUDE = 69 // why not private const val TAG_TYPE_EXCLUDE = 69 // why not
enum class GenreColor(val color: Int) { enum class GenreColor(val color: Int) {
DOUJINSHI_COLOR("#f44336"), DOUJINSHI_COLOR("#f44336"),
@ -104,6 +128,8 @@ object SourceTagsUtil {
} }
private const val TAG_TYPE_DEFAULT = 1 private const val TAG_TYPE_DEFAULT = 1
private val spaceRegex = "\\s".toRegex()
} }
fun Manga.getRaisedTags(genres: List<String>? = getGenres()): List<RaisedTag>? = genres?.map { fun Manga.getRaisedTags(genres: List<String>? = getGenres()): List<RaisedTag>? = genres?.map {