chore: Prepare ComicInfo

This commit is contained in:
Ahmad Ansori Palembani 2024-05-29 07:59:12 +07:00
parent fb6c463cf2
commit 66ac6201e5
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
5 changed files with 156 additions and 12 deletions

View file

@ -213,9 +213,7 @@ dependencies {
implementation(kotlin("reflect", version = kotlinx.versions.kotlin.get()))
// JSON
implementation(kotlinx.serialization.json)
implementation(kotlinx.serialization.protobuf)
implementation(kotlinx.serialization.json.okio)
implementation(kotlinx.bundles.serialization)
// JavaScript engine
implementation(libs.quickjs.android)

View file

@ -89,6 +89,9 @@
-keepclassmembers class kotlinx.serialization.** {
<methods>;
}
# XmlUtil
-keep public enum nl.adaptivity.xmlutil.EventType { *; }
##---------------End: proguard configuration for kotlinx.serialization ----------
# Apache Commons Compress

View file

@ -0,0 +1,134 @@
package dev.yokai.core.metadata
import eu.kanade.tachiyomi.source.model.SManga
import kotlinx.serialization.Serializable
import nl.adaptivity.xmlutil.serialization.XmlElement
import nl.adaptivity.xmlutil.serialization.XmlSerialName
import nl.adaptivity.xmlutil.serialization.XmlValue
// REF: https://anansi-project.github.io/docs/comicinfo/schemas/v2.0
@Serializable
@XmlSerialName("ComicInfo", "", "")
data class ComicInfo(
val title: Title?,
val series: Series?,
val number: Number?,
val summary: Summary?,
val writer: Writer?,
val penciller: Penciller?,
val inker: Inker?,
val colorist: Colorist?,
val letterer: Letterer?,
val coverArtist: CoverArtist?,
val translator: Translator?,
val genre: Genre?,
val tags: Tags?,
val web: Web?,
val publishingStatus: PublishingStatusTachiyomi?,
val categories: CategoriesTachiyomi?,
val source: SourceMihon?,
) {
@XmlElement(false)
@XmlSerialName("xmlns:xsd", "", "")
val xmlSchema: String = "http://www.w3.org/2001/XMLSchema"
@XmlElement(false)
@XmlSerialName("xmlns:xsi", "", "")
val xmlSchemaInstance: String = "http://www.w3.org/2001/XMLSchema-instance"
@Serializable
@XmlSerialName("Title", "", "")
data class Title(@XmlValue(true) val value: String = "")
@Serializable
@XmlSerialName("Series", "", "")
data class Series(val value: String = "")
@Serializable
@XmlSerialName("Number", "", "")
data class Number(@XmlValue(true) val value: String = "")
@Serializable
@XmlSerialName("Summary", "", "")
data class Summary(val value: String = "")
@Serializable
@XmlSerialName("Writer", "", "")
data class Writer(val value: String = "")
@Serializable
@XmlSerialName("Penciller", "", "")
data class Penciller(val value: String = "")
@Serializable
@XmlSerialName("Inker", "", "")
data class Inker(val value: String = "")
@Serializable
@XmlSerialName("Colorist", "", "")
data class Colorist(val value: String = "")
@Serializable
@XmlSerialName("Letterer", "", "")
data class Letterer(val value: String = "")
@Serializable
@XmlSerialName("CoverArtist", "", "")
data class CoverArtist(val value: String = "")
@Serializable
@XmlSerialName("Translator", "", "")
data class Translator(val value: String = "")
@Serializable
@XmlSerialName("Genre", "", "")
data class Genre(val value: String = "")
@Serializable
@XmlSerialName("Tags", "", "")
data class Tags(val value: String = "")
@Serializable
@XmlSerialName("Web", "", "")
data class Web(val value: String = "")
// Tachi Note: The spec doesn't have a good field for this
// REF: https://github.com/anansi-project/comicinfo/issues/5
@Serializable
@XmlSerialName("PublishingStatusTachiyomi", "http://www.w3.org/2001/XMLSchema", "ty")
data class PublishingStatusTachiyomi(val value: String = "")
@Serializable
@XmlSerialName("Categories", "http://www.w3.org/2001/XMLSchema", "ty")
data class CategoriesTachiyomi(val value: String = "")
@Serializable
@XmlSerialName("SourceMihon", "http://www.w3.org/2001/XMLSchema", "mh")
data class SourceMihon(val value: String = "")
}
enum class ComicInfoPublishingStatus(
val comicInfoValue: String,
val sMangaModelValue: Int,
) {
ONGOING("Ongoing", SManga.ONGOING),
COMPLETED("Completed", SManga.COMPLETED),
LICENSED("Licensed", SManga.LICENSED),
PUBLISHING_FINISHED("Publishing finished", SManga.PUBLISHING_FINISHED),
CANCELLED("Cancelled", SManga.CANCELLED),
ON_HIATUS("On hiatus", SManga.ON_HIATUS),
UNKNOWN("Unknown", SManga.UNKNOWN),
;
companion object {
fun toComicInfoValue(value: Long): String {
return entries.firstOrNull { it.sMangaModelValue == value.toInt() }?.comicInfoValue
?: UNKNOWN.comicInfoValue
}
fun toSMangaValue(value: String?): Int {
return entries.firstOrNull { it.comicInfoValue == value }?.sMangaModelValue
?: UNKNOWN.sMangaModelValue
}
}
}