mirror of
https://github.com/mihonapp/mihon.git
synced 2025-07-01 13:37:50 +02:00
More work on Hitomi.la
This commit is contained in:
@ -44,9 +44,7 @@ open class HitomiGalleryMetadata : RealmObject(), SearchableGalleryMetadata {
|
||||
override var tags: RealmList<Tag> = RealmList()
|
||||
|
||||
// Sites does not show uploader
|
||||
override var uploader: String?
|
||||
get() = "admin"
|
||||
set(value) {}
|
||||
override var uploader: String? = "admin"
|
||||
|
||||
var url get() = hlId?.let { urlFromHlId(it) }
|
||||
set(a) {
|
||||
@ -148,6 +146,6 @@ open class HitomiGalleryMetadata : RealmObject(), SearchableGalleryMetadata {
|
||||
= url.split('/').last().substringBeforeLast('.')
|
||||
|
||||
fun urlFromHlId(id: String)
|
||||
= "$BASE_URL/galleries/$id"
|
||||
= "$BASE_URL/galleries/$id.html"
|
||||
}
|
||||
}
|
||||
|
14
app/src/main/java/exh/metadata/models/HitomiPage.kt
Normal file
14
app/src/main/java/exh/metadata/models/HitomiPage.kt
Normal file
@ -0,0 +1,14 @@
|
||||
package exh.metadata.models
|
||||
|
||||
import io.realm.RealmObject
|
||||
import io.realm.annotations.Index
|
||||
import io.realm.annotations.RealmClass
|
||||
|
||||
@RealmClass
|
||||
open class HitomiPage: RealmObject() {
|
||||
@Index lateinit var gallery: String
|
||||
|
||||
@Index var index: Int = -1
|
||||
|
||||
lateinit var url: String
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package exh.metadata.models
|
||||
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import exh.metadata.models.HitomiGalleryMetadata.Companion.hlIdFromUrl
|
||||
import exh.metadata.models.HitomiGalleryMetadata.Companion.urlFromHlId
|
||||
import io.realm.RealmList
|
||||
import io.realm.RealmObject
|
||||
import io.realm.annotations.Ignore
|
||||
import io.realm.annotations.Index
|
||||
import io.realm.annotations.RealmClass
|
||||
|
||||
@RealmClass
|
||||
open class HitomiSkeletonGalleryMetadata : RealmObject(), SearchableGalleryMetadata {
|
||||
override var uuid: String
|
||||
set(value) {}
|
||||
get() = throw UnsupportedOperationException()
|
||||
|
||||
var hlId: String? = null
|
||||
|
||||
var thumbnailUrl: String? = null
|
||||
|
||||
var artist: String? = null
|
||||
|
||||
var group: String? = null
|
||||
|
||||
var type: String? = null
|
||||
|
||||
var language: String? = null
|
||||
|
||||
var languageSimple: String? = null
|
||||
|
||||
var series: RealmList<String> = RealmList()
|
||||
|
||||
var characters: RealmList<String> = RealmList()
|
||||
|
||||
var buyLink: String? = null
|
||||
|
||||
var uploadDate: Long? = null
|
||||
|
||||
override var tags: RealmList<Tag> = RealmList()
|
||||
|
||||
// Sites does not show uploader
|
||||
override var uploader: String? = "admin"
|
||||
|
||||
var url get() = hlId?.let { urlFromHlId(it) }
|
||||
set(a) {
|
||||
a?.let {
|
||||
hlId = hlIdFromUrl(a)
|
||||
}
|
||||
}
|
||||
|
||||
override var mangaId: Long? = null
|
||||
|
||||
@Index
|
||||
var title: String? = null
|
||||
|
||||
override fun getTitles() = listOfNotNull(title)
|
||||
|
||||
@Ignore
|
||||
override val titleFields = listOf(
|
||||
::title.name
|
||||
)
|
||||
override fun copyTo(manga: SManga) {
|
||||
throw UnsupportedOperationException("This operation cannot be performed on skeleton galleries!")
|
||||
}
|
||||
}
|
||||
|
66
app/src/main/java/exh/util/JsonReaderObjectReader.kt
Normal file
66
app/src/main/java/exh/util/JsonReaderObjectReader.kt
Normal file
@ -0,0 +1,66 @@
|
||||
package exh.util
|
||||
|
||||
/**
|
||||
* Reads entire `JsonObject`s and `JsonArray`s from `JsonReader`s
|
||||
*
|
||||
* @author nulldev
|
||||
*/
|
||||
|
||||
import com.google.gson.JsonArray
|
||||
import com.google.gson.JsonNull
|
||||
import com.google.gson.JsonObject
|
||||
import com.google.gson.stream.JsonReader
|
||||
import com.google.gson.stream.JsonToken
|
||||
import java.math.BigDecimal
|
||||
|
||||
fun JsonReader.nextJsonObject(): JsonObject {
|
||||
beginObject()
|
||||
|
||||
val obj = JsonObject()
|
||||
|
||||
while(hasNext()) {
|
||||
val name = nextName()
|
||||
|
||||
when(peek()) {
|
||||
JsonToken.BEGIN_ARRAY -> obj.add(name, nextJsonArray())
|
||||
JsonToken.BEGIN_OBJECT -> obj.add(name, nextJsonObject())
|
||||
JsonToken.NULL -> {
|
||||
nextNull()
|
||||
obj.add(name, JsonNull.INSTANCE)
|
||||
}
|
||||
JsonToken.BOOLEAN -> obj.addProperty(name, nextBoolean())
|
||||
JsonToken.NUMBER -> obj.addProperty(name, BigDecimal(nextString()))
|
||||
JsonToken.STRING -> obj.addProperty(name, nextString())
|
||||
else -> skipValue()
|
||||
}
|
||||
}
|
||||
|
||||
endObject()
|
||||
|
||||
return obj
|
||||
}
|
||||
|
||||
fun JsonReader.nextJsonArray(): JsonArray {
|
||||
beginArray()
|
||||
|
||||
val arr = JsonArray()
|
||||
|
||||
while(hasNext()) {
|
||||
when(peek()) {
|
||||
JsonToken.BEGIN_ARRAY -> arr.add(nextJsonArray())
|
||||
JsonToken.BEGIN_OBJECT -> arr.add(nextJsonObject())
|
||||
JsonToken.NULL -> {
|
||||
nextNull()
|
||||
arr.add(JsonNull.INSTANCE)
|
||||
}
|
||||
JsonToken.BOOLEAN -> arr.add(nextBoolean())
|
||||
JsonToken.NUMBER -> arr.add(BigDecimal(nextString()))
|
||||
JsonToken.STRING -> arr.add(nextString())
|
||||
else -> skipValue()
|
||||
}
|
||||
}
|
||||
|
||||
endArray()
|
||||
|
||||
return arr
|
||||
}
|
@ -41,5 +41,17 @@ inline fun <T> Realm.trans(block: () -> T): T {
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <T> Realm.useTrans(block: (Realm) -> T): T {
|
||||
return use {
|
||||
trans {
|
||||
block(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun <T : RealmModel> Realm.createUUIDObj(clazz: Class<T>)
|
||||
= createObject(clazz, UUID.randomUUID().toString())!!
|
||||
|
||||
inline fun <reified T : RealmModel> Realm.createUUIDObj()
|
||||
= createUUIDObj(T::class.java)
|
||||
|
||||
|
Reference in New Issue
Block a user