Improve Hitomi tag list
This commit is contained in:
parent
b6f454ba66
commit
478d7f989d
@ -35,6 +35,7 @@ import exh.log.xLogD
|
|||||||
import exh.metadata.MetadataUtil
|
import exh.metadata.MetadataUtil
|
||||||
import exh.metadata.metadata.EHentaiSearchMetadata
|
import exh.metadata.metadata.EHentaiSearchMetadata
|
||||||
import exh.metadata.metadata.EHentaiSearchMetadata.Companion.EH_GENRE_NAMESPACE
|
import exh.metadata.metadata.EHentaiSearchMetadata.Companion.EH_GENRE_NAMESPACE
|
||||||
|
import exh.metadata.metadata.EHentaiSearchMetadata.Companion.EH_META_NAMESPACE
|
||||||
import exh.metadata.metadata.EHentaiSearchMetadata.Companion.TAG_TYPE_LIGHT
|
import exh.metadata.metadata.EHentaiSearchMetadata.Companion.TAG_TYPE_LIGHT
|
||||||
import exh.metadata.metadata.EHentaiSearchMetadata.Companion.TAG_TYPE_NORMAL
|
import exh.metadata.metadata.EHentaiSearchMetadata.Companion.TAG_TYPE_NORMAL
|
||||||
import exh.metadata.metadata.EHentaiSearchMetadata.Companion.TAG_TYPE_WEAK
|
import exh.metadata.metadata.EHentaiSearchMetadata.Companion.TAG_TYPE_WEAK
|
||||||
@ -654,24 +655,25 @@ class EHentai(
|
|||||||
tags.clear()
|
tags.clear()
|
||||||
select("#taglist tr").forEach {
|
select("#taglist tr").forEach {
|
||||||
val namespace = it.select(".tc").text().removeSuffix(":")
|
val namespace = it.select(".tc").text().removeSuffix(":")
|
||||||
tags.addAll(
|
tags += it.select("div").map { element ->
|
||||||
it.select("div").map { element ->
|
RaisedTag(
|
||||||
RaisedTag(
|
namespace,
|
||||||
namespace,
|
element.text().trim(),
|
||||||
element.text().trim(),
|
when {
|
||||||
when {
|
element.hasClass("gtl") -> TAG_TYPE_LIGHT
|
||||||
element.hasClass("gtl") -> TAG_TYPE_LIGHT
|
element.hasClass("gtw") -> TAG_TYPE_WEAK
|
||||||
element.hasClass("gtw") -> TAG_TYPE_WEAK
|
else -> TAG_TYPE_NORMAL
|
||||||
else -> TAG_TYPE_NORMAL
|
}
|
||||||
}
|
)
|
||||||
)
|
}
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add genre as virtual tag
|
// Add genre as virtual tag
|
||||||
genre?.let {
|
genre?.let {
|
||||||
tags.add(RaisedTag(EH_GENRE_NAMESPACE, it, TAG_TYPE_VIRTUAL))
|
tags += RaisedTag(EH_GENRE_NAMESPACE, it, TAG_TYPE_VIRTUAL)
|
||||||
|
}
|
||||||
|
if (aged) {
|
||||||
|
tags += RaisedTag(EH_META_NAMESPACE, "aged", TAG_TYPE_VIRTUAL)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,23 +54,31 @@ class Hitomi(delegate: HttpSource, val context: Context) :
|
|||||||
|
|
||||||
title = galleryElement.selectFirst("h1")!!.text()
|
title = galleryElement.selectFirst("h1")!!.text()
|
||||||
artists = galleryElement.select("h2 a").map { it.text() }
|
artists = galleryElement.select("h2 a").map { it.text() }
|
||||||
tags += artists.map { RaisedTag("artist", it, RaisedSearchMetadata.TAG_TYPE_VIRTUAL) }
|
tags += artists.map { RaisedTag("artist", it, HitomiSearchMetadata.TAG_TYPE_DEFAULT) }
|
||||||
|
|
||||||
input.select(".gallery-info tr").forEach { galleryInfoElement ->
|
input.select(".gallery-info tr").forEach { galleryInfoElement ->
|
||||||
val content = galleryInfoElement.child(1)
|
val content = galleryInfoElement.child(1)
|
||||||
when (galleryInfoElement.child(0).text().lowercase()) {
|
when (galleryInfoElement.child(0).text().lowercase()) {
|
||||||
"group" -> {
|
"group" -> {
|
||||||
group = content.text()
|
val group = content.text()
|
||||||
tags += RaisedTag("group", group!!, RaisedSearchMetadata.TAG_TYPE_VIRTUAL)
|
tags += RaisedTag(
|
||||||
|
"group",
|
||||||
|
group,
|
||||||
|
if (group != "N/A") {
|
||||||
|
HitomiSearchMetadata.TAG_TYPE_DEFAULT
|
||||||
|
} else {
|
||||||
|
RaisedSearchMetadata.TAG_TYPE_VIRTUAL
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
"type" -> {
|
"type" -> {
|
||||||
genre = content.text()
|
genre = content.text()
|
||||||
tags += RaisedTag("type", genre!!, RaisedSearchMetadata.TAG_TYPE_VIRTUAL)
|
tags += RaisedTag("genre", genre!!, RaisedSearchMetadata.TAG_TYPE_VIRTUAL)
|
||||||
}
|
}
|
||||||
"series" -> {
|
"series" -> {
|
||||||
series = content.select("a").map { it.text() }
|
val series = content.select("a").map { it.text() }
|
||||||
tags += series.map {
|
tags += series.map {
|
||||||
RaisedTag("series", it, RaisedSearchMetadata.TAG_TYPE_VIRTUAL)
|
RaisedTag("series", it, HitomiSearchMetadata.TAG_TYPE_DEFAULT)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"language" -> {
|
"language" -> {
|
||||||
@ -80,7 +88,7 @@ class Hitomi(delegate: HttpSource, val context: Context) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
"characters" -> {
|
"characters" -> {
|
||||||
characters = content.select("a").map { it.text() }
|
val characters = content.select("a").map { it.text() }
|
||||||
tags += characters.map {
|
tags += characters.map {
|
||||||
RaisedTag(
|
RaisedTag(
|
||||||
"character",
|
"character",
|
||||||
|
@ -93,7 +93,15 @@ class NHentai(delegate: HttpSource, val context: Context) :
|
|||||||
jsonResponse.tags.filter {
|
jsonResponse.tags.filter {
|
||||||
it.type != null && it.name != null
|
it.type != null && it.name != null
|
||||||
}.mapTo(tags) {
|
}.mapTo(tags) {
|
||||||
RaisedTag(it.type!!, it.name!!, if (it.type == NHentaiSearchMetadata.NHENTAI_CATEGORIES_NAMESPACE) RaisedSearchMetadata.TAG_TYPE_VIRTUAL else NHentaiSearchMetadata.TAG_TYPE_DEFAULT)
|
RaisedTag(
|
||||||
|
it.type!!,
|
||||||
|
it.name!!,
|
||||||
|
if (it.type == NHentaiSearchMetadata.NHENTAI_CATEGORIES_NAMESPACE) {
|
||||||
|
RaisedSearchMetadata.TAG_TYPE_VIRTUAL
|
||||||
|
} else {
|
||||||
|
NHentaiSearchMetadata.TAG_TYPE_DEFAULT
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,6 +126,7 @@ class EHentaiSearchMetadata : RaisedSearchMetadata() {
|
|||||||
const val EH_GENRE_NAMESPACE = "genre"
|
const val EH_GENRE_NAMESPACE = "genre"
|
||||||
private const val EH_ARTIST_NAMESPACE = "artist"
|
private const val EH_ARTIST_NAMESPACE = "artist"
|
||||||
const val EH_LANGUAGE_NAMESPACE = "language"
|
const val EH_LANGUAGE_NAMESPACE = "language"
|
||||||
|
const val EH_META_NAMESPACE = "meta"
|
||||||
|
|
||||||
private fun splitGalleryUrl(url: String) =
|
private fun splitGalleryUrl(url: String) =
|
||||||
url.let {
|
url.let {
|
||||||
|
@ -26,16 +26,10 @@ class HitomiSearchMetadata : RaisedSearchMetadata() {
|
|||||||
|
|
||||||
var artists: List<String> = emptyList()
|
var artists: List<String> = emptyList()
|
||||||
|
|
||||||
var group: String? = null
|
|
||||||
|
|
||||||
var genre: String? = null
|
var genre: String? = null
|
||||||
|
|
||||||
var language: String? = null
|
var language: String? = null
|
||||||
|
|
||||||
var series: List<String> = emptyList()
|
|
||||||
|
|
||||||
var characters: List<String> = emptyList()
|
|
||||||
|
|
||||||
var uploadDate: Long? = null
|
var uploadDate: Long? = null
|
||||||
|
|
||||||
override fun createMangaInfo(manga: MangaInfo): MangaInfo {
|
override fun createMangaInfo(manga: MangaInfo): MangaInfo {
|
||||||
@ -69,11 +63,8 @@ class HitomiSearchMetadata : RaisedSearchMetadata() {
|
|||||||
title?.let { getString(R.string.title) to it },
|
title?.let { getString(R.string.title) to it },
|
||||||
thumbnailUrl?.let { getString(R.string.thumbnail_url) to it },
|
thumbnailUrl?.let { getString(R.string.thumbnail_url) to it },
|
||||||
artists.nullIfEmpty()?.joinToString()?.let { getString(R.string.artist) to it },
|
artists.nullIfEmpty()?.joinToString()?.let { getString(R.string.artist) to it },
|
||||||
group?.let { getString(R.string.group) to it },
|
|
||||||
genre?.let { getString(R.string.genre) to it },
|
genre?.let { getString(R.string.genre) to it },
|
||||||
language?.let { getString(R.string.language) to it },
|
language?.let { getString(R.string.language) to it },
|
||||||
series.nullIfEmpty()?.joinToString()?.let { getString(R.string.series) to it },
|
|
||||||
characters.nullIfEmpty()?.joinToString()?.let { getString(R.string.characters) to it },
|
|
||||||
uploadDate?.let { getString(R.string.date_posted) to MetadataUtil.EX_DATE_FORMAT.format(Date(it)) }
|
uploadDate?.let { getString(R.string.date_posted) to MetadataUtil.EX_DATE_FORMAT.format(Date(it)) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -44,14 +44,12 @@ class HitomiDescriptionAdapter(
|
|||||||
} ?: meta.genre ?: itemView.context.getString(R.string.unknown)
|
} ?: meta.genre ?: itemView.context.getString(R.string.unknown)
|
||||||
|
|
||||||
binding.whenPosted.text = MetadataUtil.EX_DATE_FORMAT.format(Date(meta.uploadDate ?: 0))
|
binding.whenPosted.text = MetadataUtil.EX_DATE_FORMAT.format(Date(meta.uploadDate ?: 0))
|
||||||
binding.group.text = meta.group ?: itemView.context.getString(R.string.unknown)
|
|
||||||
binding.language.text = meta.language ?: itemView.context.getString(R.string.unknown)
|
binding.language.text = meta.language ?: itemView.context.getString(R.string.unknown)
|
||||||
|
|
||||||
binding.moreInfo.bindDrawable(itemView.context, R.drawable.ic_info_24dp)
|
binding.moreInfo.bindDrawable(itemView.context, R.drawable.ic_info_24dp)
|
||||||
|
|
||||||
listOf(
|
listOf(
|
||||||
binding.genre,
|
binding.genre,
|
||||||
binding.group,
|
|
||||||
binding.language,
|
binding.language,
|
||||||
binding.whenPosted
|
binding.whenPosted
|
||||||
).forEach { textView ->
|
).forEach { textView ->
|
||||||
|
@ -65,17 +65,6 @@
|
|||||||
app:layout_constraintBottom_toBottomOf="@+id/language"
|
app:layout_constraintBottom_toBottomOf="@+id/language"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@+id/language" />
|
app:layout_constraintTop_toTopOf="@+id/language" />
|
||||||
|
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
|
||||||
android:id="@+id/group"
|
|
||||||
style="@style/TextAppearance.Regular.Body1.Secondary"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/language" />
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
Loading…
x
Reference in New Issue
Block a user