Remove duplicate raised search metadata code
This commit is contained in:
parent
fcc095ffa3
commit
628eedf15a
@ -119,14 +119,18 @@ class NHentai(delegate: HttpSource, val context: Context) :
|
|||||||
@Serializable
|
@Serializable
|
||||||
data class JsonResponse(
|
data class JsonResponse(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
@SerialName("media_id") val mediaId: String? = null,
|
@SerialName("media_id")
|
||||||
|
val mediaId: String? = null,
|
||||||
val title: JsonTitle? = null,
|
val title: JsonTitle? = null,
|
||||||
val images: JsonImages? = null,
|
val images: JsonImages? = null,
|
||||||
val scanlator: String? = null,
|
val scanlator: String? = null,
|
||||||
@SerialName("upload_date") val uploadDate: Long? = null,
|
@SerialName("upload_date")
|
||||||
|
val uploadDate: Long? = null,
|
||||||
val tags: List<JsonTag> = emptyList(),
|
val tags: List<JsonTag> = emptyList(),
|
||||||
@SerialName("num_pages") val numPages: Int? = null,
|
@SerialName("num_pages")
|
||||||
@SerialName("num_favorites") val numFavorites: Long? = null
|
val numPages: Int? = null,
|
||||||
|
@SerialName("num_favorites")
|
||||||
|
val numFavorites: Long? = null
|
||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@ -145,9 +149,12 @@ class NHentai(delegate: HttpSource, val context: Context) :
|
|||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class JsonPage(
|
data class JsonPage(
|
||||||
@SerialName("t") val type: String? = null,
|
@SerialName("t")
|
||||||
@SerialName("w") val width: Long? = null,
|
val type: String? = null,
|
||||||
@SerialName("h") val height: Long? = null
|
@SerialName("w")
|
||||||
|
val width: Long? = null,
|
||||||
|
@SerialName("h")
|
||||||
|
val height: Long? = null
|
||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
@ -16,7 +16,7 @@ import eu.kanade.tachiyomi.source.online.UrlImportableSource
|
|||||||
import eu.kanade.tachiyomi.ui.manga.MangaController
|
import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||||
import eu.kanade.tachiyomi.util.asJsoup
|
import eu.kanade.tachiyomi.util.asJsoup
|
||||||
import exh.metadata.metadata.PururinSearchMetadata
|
import exh.metadata.metadata.PururinSearchMetadata
|
||||||
import exh.metadata.metadata.base.RaisedSearchMetadata.Companion.TAG_TYPE_VIRTUAL
|
import exh.metadata.metadata.base.RaisedSearchMetadata
|
||||||
import exh.metadata.metadata.base.RaisedTag
|
import exh.metadata.metadata.base.RaisedTag
|
||||||
import exh.source.DelegatedHttpSource
|
import exh.source.DelegatedHttpSource
|
||||||
import exh.ui.metadata.adapters.PururinDescriptionAdapter
|
import exh.ui.metadata.adapters.PururinDescriptionAdapter
|
||||||
@ -108,7 +108,7 @@ class Pururin(delegate: HttpSource, val context: Context) :
|
|||||||
tags += RaisedTag(
|
tags += RaisedTag(
|
||||||
namespace,
|
namespace,
|
||||||
searchUrl.lastPathSegment!!.substringBefore("."),
|
searchUrl.lastPathSegment!!.substringBefore("."),
|
||||||
if (namespace != PururinSearchMetadata.TAG_NAMESPACE_CATEGORY) PururinSearchMetadata.TAG_TYPE_DEFAULT else TAG_TYPE_VIRTUAL
|
if (namespace != PururinSearchMetadata.TAG_NAMESPACE_CATEGORY) PururinSearchMetadata.TAG_TYPE_DEFAULT else RaisedSearchMetadata.TAG_TYPE_VIRTUAL
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -122,7 +122,7 @@ class Pururin(delegate: HttpSource, val context: Context) :
|
|||||||
"www.pururin.io"
|
"www.pururin.io"
|
||||||
)
|
)
|
||||||
|
|
||||||
override suspend fun mapUrlToMangaUrl(uri: Uri): String? {
|
override suspend fun mapUrlToMangaUrl(uri: Uri): String {
|
||||||
return "${PururinSearchMetadata.BASE_URL}/gallery/${uri.pathSegments[1]}/${uri.lastPathSegment}"
|
return "${PururinSearchMetadata.BASE_URL}/gallery/${uri.pathSegments[1]}/${uri.lastPathSegment}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,44 +90,6 @@ class EHentaiSearchMetadata : RaisedSearchMetadata() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copyTo(manga: SManga) {
|
|
||||||
gId?.let { gId ->
|
|
||||||
gToken?.let { gToken ->
|
|
||||||
manga.url = idAndTokenToUrl(gId, gToken)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
thumbnailUrl?.let { manga.thumbnail_url = it }
|
|
||||||
|
|
||||||
// No title bug?
|
|
||||||
val titleObj = if (Injekt.get<PreferencesHelper>().useJapaneseTitle().get()) {
|
|
||||||
altTitle ?: title
|
|
||||||
} else {
|
|
||||||
title
|
|
||||||
}
|
|
||||||
titleObj?.let { manga.title = it }
|
|
||||||
|
|
||||||
// Set artist (if we can find one)
|
|
||||||
tags.filter { it.namespace == EH_ARTIST_NAMESPACE }.let { tags ->
|
|
||||||
if (tags.isNotEmpty()) manga.artist = tags.joinToString(transform = { it.name })
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy tags -> genres
|
|
||||||
manga.genre = tagsToGenreString()
|
|
||||||
|
|
||||||
// Try to automatically identify if it is ongoing, we try not to be too lenient here to avoid making mistakes
|
|
||||||
// We default to completed
|
|
||||||
manga.status = SManga.COMPLETED
|
|
||||||
title?.let { t ->
|
|
||||||
MetadataUtil.ONGOING_SUFFIX.find {
|
|
||||||
t.endsWith(it, ignoreCase = true)
|
|
||||||
}?.let {
|
|
||||||
manga.status = SManga.ONGOING
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
manga.description = "meta"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
||||||
val pairs = mutableListOf<Pair<String, String>>()
|
val pairs = mutableListOf<Pair<String, String>>()
|
||||||
|
|
||||||
|
@ -38,24 +38,6 @@ class EightMusesSearchMetadata : RaisedSearchMetadata() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copyTo(manga: SManga) {
|
|
||||||
manga.url = path.joinToString("/", prefix = "/")
|
|
||||||
|
|
||||||
title?.let {
|
|
||||||
manga.title = it
|
|
||||||
}
|
|
||||||
|
|
||||||
thumbnailUrl?.let {
|
|
||||||
manga.thumbnail_url = it
|
|
||||||
}
|
|
||||||
|
|
||||||
manga.artist = tags.ofNamespace(ARTIST_NAMESPACE).joinToString { it.name }
|
|
||||||
|
|
||||||
manga.genre = tagsToGenreString()
|
|
||||||
|
|
||||||
manga.description = "meta"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
||||||
val pairs = mutableListOf<Pair<String, String>>()
|
val pairs = mutableListOf<Pair<String, String>>()
|
||||||
title?.let { pairs += context.getString(R.string.title) to it }
|
title?.let { pairs += context.getString(R.string.title) to it }
|
||||||
|
@ -46,27 +46,6 @@ class HBrowseSearchMetadata : RaisedSearchMetadata() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copyTo(manga: SManga) {
|
|
||||||
hbUrl?.let {
|
|
||||||
manga.url = it
|
|
||||||
}
|
|
||||||
|
|
||||||
title?.let {
|
|
||||||
manga.title = it
|
|
||||||
}
|
|
||||||
|
|
||||||
// Guess thumbnail URL if manga does not have thumbnail URL
|
|
||||||
if (manga.thumbnail_url.isNullOrBlank()) {
|
|
||||||
manga.thumbnail_url = guessThumbnailUrl(hbId.toString())
|
|
||||||
}
|
|
||||||
|
|
||||||
manga.artist = tags.ofNamespace(ARTIST_NAMESPACE).joinToString { it.name }
|
|
||||||
|
|
||||||
manga.genre = tagsToGenreString()
|
|
||||||
|
|
||||||
manga.description = "meta"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
||||||
val pairs = mutableListOf<Pair<String, String>>()
|
val pairs = mutableListOf<Pair<String, String>>()
|
||||||
hbId?.let { pairs += context.getString(R.string.id) to it.toString() }
|
hbId?.let { pairs += context.getString(R.string.id) to it.toString() }
|
||||||
|
@ -50,21 +50,6 @@ class HentaiCafeSearchMetadata : RaisedSearchMetadata() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copyTo(manga: SManga) {
|
|
||||||
thumbnailUrl?.let { manga.thumbnail_url = it }
|
|
||||||
|
|
||||||
manga.title = title!!
|
|
||||||
manga.artist = artist
|
|
||||||
manga.author = artist
|
|
||||||
|
|
||||||
// Not available
|
|
||||||
manga.status = SManga.UNKNOWN
|
|
||||||
|
|
||||||
manga.genre = tagsToGenreString()
|
|
||||||
|
|
||||||
manga.description = "meta"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
||||||
val pairs = mutableListOf<Pair<String, String>>()
|
val pairs = mutableListOf<Pair<String, String>>()
|
||||||
hcId?.let { pairs += context.getString(R.string.id) to it }
|
hcId?.let { pairs += context.getString(R.string.id) to it }
|
||||||
|
@ -62,23 +62,6 @@ class HitomiSearchMetadata : RaisedSearchMetadata() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copyTo(manga: SManga) {
|
|
||||||
thumbnailUrl?.let { manga.thumbnail_url = it }
|
|
||||||
|
|
||||||
title?.let {
|
|
||||||
manga.title = it
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy tags -> genres
|
|
||||||
manga.genre = tagsToGenreString()
|
|
||||||
|
|
||||||
manga.artist = artists.joinToString()
|
|
||||||
|
|
||||||
manga.status = SManga.UNKNOWN
|
|
||||||
|
|
||||||
manga.description = "meta"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
||||||
val pairs = mutableListOf<Pair<String, String>>()
|
val pairs = mutableListOf<Pair<String, String>>()
|
||||||
with(context) {
|
with(context) {
|
||||||
|
@ -78,42 +78,6 @@ class MangaDexSearchMetadata : RaisedSearchMetadata() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copyTo(manga: SManga) {
|
|
||||||
mdUrl?.let {
|
|
||||||
manga.url = try {
|
|
||||||
val uri = it.toUri()
|
|
||||||
val out = uri.path!!.removePrefix("/api")
|
|
||||||
out + if (out.endsWith("/")) "" else "/"
|
|
||||||
} catch (e: Exception) {
|
|
||||||
it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
title?.let {
|
|
||||||
manga.title = it
|
|
||||||
}
|
|
||||||
|
|
||||||
manga.thumbnail_url = thumbnail_url
|
|
||||||
|
|
||||||
author?.let {
|
|
||||||
manga.author = it
|
|
||||||
}
|
|
||||||
|
|
||||||
artist?.let {
|
|
||||||
manga.artist = it
|
|
||||||
}
|
|
||||||
|
|
||||||
status?.let {
|
|
||||||
manga.status = it
|
|
||||||
}
|
|
||||||
|
|
||||||
manga.genre = tagsToGenreString()
|
|
||||||
|
|
||||||
description?.let {
|
|
||||||
manga.description = it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
||||||
val pairs = mutableListOf<Pair<String, String>>()
|
val pairs = mutableListOf<Pair<String, String>>()
|
||||||
mdId?.let { pairs += context.getString(R.string.id) to it }
|
mdId?.let { pairs += context.getString(R.string.id) to it }
|
||||||
|
@ -3,6 +3,8 @@ package exh.metadata.metadata
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
|
import eu.kanade.tachiyomi.source.model.toMangaInfo
|
||||||
|
import eu.kanade.tachiyomi.source.model.toSManga
|
||||||
import exh.metadata.MetadataUtil
|
import exh.metadata.MetadataUtil
|
||||||
import exh.metadata.metadata.base.RaisedSearchMetadata
|
import exh.metadata.metadata.base.RaisedSearchMetadata
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
@ -85,43 +87,6 @@ class NHentaiSearchMetadata : RaisedSearchMetadata() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copyTo(manga: SManga) {
|
|
||||||
nhId?.let { manga.url = nhIdToPath(it) }
|
|
||||||
|
|
||||||
if (mediaId != null) {
|
|
||||||
typeToExtension(coverImageType)?.let {
|
|
||||||
manga.thumbnail_url = "https://t.nhentai.net/galleries/$mediaId/cover.$it"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
manga.title = when (preferredTitle) {
|
|
||||||
TITLE_TYPE_SHORT -> shortTitle ?: englishTitle ?: japaneseTitle!!
|
|
||||||
0, TITLE_TYPE_ENGLISH -> englishTitle ?: japaneseTitle ?: shortTitle!!
|
|
||||||
else -> englishTitle ?: japaneseTitle ?: shortTitle!!
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set artist (if we can find one)
|
|
||||||
tags.filter { it.namespace == NHENTAI_ARTIST_NAMESPACE }.let { tags ->
|
|
||||||
if (tags.isNotEmpty()) manga.artist = tags.joinToString(transform = { it.name })
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy tags -> genres
|
|
||||||
manga.genre = tagsToGenreString()
|
|
||||||
|
|
||||||
// Try to automatically identify if it is ongoing, we try not to be too lenient here to avoid making mistakes
|
|
||||||
// We default to completed
|
|
||||||
manga.status = SManga.COMPLETED
|
|
||||||
englishTitle?.let { t ->
|
|
||||||
MetadataUtil.ONGOING_SUFFIX.find {
|
|
||||||
t.endsWith(it, ignoreCase = true)
|
|
||||||
}?.let {
|
|
||||||
manga.status = SManga.ONGOING
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
manga.description = "meta"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
||||||
val pairs = mutableListOf<Pair<String, String>>()
|
val pairs = mutableListOf<Pair<String, String>>()
|
||||||
nhId?.let { pairs += context.getString(R.string.id) to it.toString() }
|
nhId?.let { pairs += context.getString(R.string.id) to it.toString() }
|
||||||
|
@ -64,32 +64,6 @@ class PervEdenSearchMetadata : RaisedSearchMetadata() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copyTo(manga: SManga) {
|
|
||||||
url?.let { manga.url = it }
|
|
||||||
thumbnailUrl?.let { manga.thumbnail_url = it }
|
|
||||||
|
|
||||||
title?.let {
|
|
||||||
manga.title = it
|
|
||||||
}
|
|
||||||
|
|
||||||
artist?.let {
|
|
||||||
manga.artist = it
|
|
||||||
}
|
|
||||||
|
|
||||||
status?.let {
|
|
||||||
manga.status = when (it) {
|
|
||||||
"Ongoing" -> SManga.ONGOING
|
|
||||||
"Completed", "Suspended" -> SManga.COMPLETED
|
|
||||||
else -> SManga.UNKNOWN
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy tags -> genres
|
|
||||||
manga.genre = tagsToGenreString()
|
|
||||||
|
|
||||||
manga.description = "meta"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
||||||
val pairs = mutableListOf<Pair<String, String>>()
|
val pairs = mutableListOf<Pair<String, String>>()
|
||||||
pvId?.let { pairs += context.getString(R.string.id) to it }
|
pvId?.let { pairs += context.getString(R.string.id) to it }
|
||||||
|
@ -54,28 +54,6 @@ class PururinSearchMetadata : RaisedSearchMetadata() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copyTo(manga: SManga) {
|
|
||||||
prId?.let { prId ->
|
|
||||||
prShortLink?.let { prShortLink ->
|
|
||||||
manga.url = "/gallery/$prId/$prShortLink"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
(title ?: altTitle)?.let {
|
|
||||||
manga.title = it
|
|
||||||
}
|
|
||||||
|
|
||||||
thumbnailUrl?.let {
|
|
||||||
manga.thumbnail_url = it
|
|
||||||
}
|
|
||||||
|
|
||||||
manga.artist = tags.ofNamespace(TAG_NAMESPACE_ARTIST).joinToString { it.name }
|
|
||||||
|
|
||||||
manga.genre = tagsToGenreString()
|
|
||||||
|
|
||||||
manga.description = "meta"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
||||||
val pairs = mutableListOf<Pair<String, String>>()
|
val pairs = mutableListOf<Pair<String, String>>()
|
||||||
prId?.let { pairs += context.getString(R.string.id) to it.toString() }
|
prId?.let { pairs += context.getString(R.string.id) to it.toString() }
|
||||||
@ -100,6 +78,6 @@ class PururinSearchMetadata : RaisedSearchMetadata() {
|
|||||||
private const val TAG_NAMESPACE_ARTIST = "artist"
|
private const val TAG_NAMESPACE_ARTIST = "artist"
|
||||||
const val TAG_NAMESPACE_CATEGORY = "category"
|
const val TAG_NAMESPACE_CATEGORY = "category"
|
||||||
|
|
||||||
val BASE_URL = "https://pururin.io"
|
const val BASE_URL = "https://pururin.io"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,20 +65,6 @@ class TsuminoSearchMetadata : RaisedSearchMetadata() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copyTo(manga: SManga) {
|
|
||||||
title?.let { manga.title = it }
|
|
||||||
manga.thumbnail_url = BASE_URL.replace("www", "content") + thumbUrlFromId(tmId.toString())
|
|
||||||
|
|
||||||
artist?.let { manga.artist = it }
|
|
||||||
|
|
||||||
manga.status = SManga.UNKNOWN
|
|
||||||
|
|
||||||
// Copy tags -> genres
|
|
||||||
manga.genre = tagsToGenreString()
|
|
||||||
|
|
||||||
manga.description = "meta"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
|
||||||
val pairs = mutableListOf<Pair<String, String>>()
|
val pairs = mutableListOf<Pair<String, String>>()
|
||||||
tmId?.let { pairs += context.getString(R.string.id) to it.toString() }
|
tmId?.let { pairs += context.getString(R.string.id) to it.toString() }
|
||||||
|
@ -2,6 +2,8 @@ package exh.metadata.metadata.base
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
|
import eu.kanade.tachiyomi.source.model.toMangaInfo
|
||||||
|
import eu.kanade.tachiyomi.source.model.toSManga
|
||||||
import exh.metadata.forEach
|
import exh.metadata.forEach
|
||||||
import exh.metadata.metadata.EHentaiSearchMetadata
|
import exh.metadata.metadata.EHentaiSearchMetadata
|
||||||
import exh.metadata.metadata.EightMusesSearchMetadata
|
import exh.metadata.metadata.EightMusesSearchMetadata
|
||||||
@ -56,7 +58,10 @@ abstract class RaisedSearchMetadata {
|
|||||||
if (newTitle != null) titles += RaisedTitle(newTitle, type)
|
if (newTitle != null) titles += RaisedTitle(newTitle, type)
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract fun copyTo(manga: SManga)
|
open fun copyTo(manga: SManga) {
|
||||||
|
val infoManga = createMangaInfo(manga.toMangaInfo()).toSManga()
|
||||||
|
manga.copyFrom(infoManga)
|
||||||
|
}
|
||||||
|
|
||||||
abstract fun createMangaInfo(manga: MangaInfo): MangaInfo
|
abstract fun createMangaInfo(manga: MangaInfo): MangaInfo
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user