Add artist parsing, fix possibly broken author parsing
This commit is contained in:
parent
c3be087472
commit
dd81e5f2b9
@ -3,6 +3,7 @@ package exh.md.handlers
|
||||
import com.elvishew.xlog.XLog
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.await
|
||||
import eu.kanade.tachiyomi.network.parseAs
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
@ -61,11 +62,11 @@ class ApiMangaParser(val client: OkHttpClient, private val lang: String) {
|
||||
/**
|
||||
* Parse the manga details json into metadata object
|
||||
*/
|
||||
fun parseIntoMetadata(metadata: MangaDexSearchMetadata, input: Response, coverUrls: List<String>) {
|
||||
suspend fun parseIntoMetadata(metadata: MangaDexSearchMetadata, input: Response, coverUrls: List<String>) {
|
||||
parseIntoMetadata(metadata, input.parseAs<MangaResponse>(MdUtil.jsonParser), coverUrls)
|
||||
}
|
||||
|
||||
fun parseIntoMetadata(metadata: MangaDexSearchMetadata, networkApiManga: MangaResponse, coverUrls: List<String>) {
|
||||
suspend fun parseIntoMetadata(metadata: MangaDexSearchMetadata, networkApiManga: MangaResponse, coverUrls: List<String>) {
|
||||
with(metadata) {
|
||||
try {
|
||||
val networkManga = networkApiManga.data.attributes
|
||||
@ -80,16 +81,29 @@ class ApiMangaParser(val client: OkHttpClient, private val lang: String) {
|
||||
// networkManga.mainCover
|
||||
}
|
||||
|
||||
description = MdUtil.cleanDescription(networkManga.description["en"]!!)
|
||||
description = MdUtil.cleanDescription(networkManga.description[lang] ?: networkManga.description["en"]!!)
|
||||
|
||||
val authorIds = networkApiManga.relationships.filter { it.type.equals("author", true) }.distinct()
|
||||
// get authors ignore if they error, artists are labelled as authors currently
|
||||
val authorIds = networkApiManga.relationships.filter { relationship ->
|
||||
relationship.type.equals("author", true)
|
||||
}.map { relationship -> relationship.id }
|
||||
.distinct()
|
||||
val artistIds = networkApiManga.relationships.filter { relationship ->
|
||||
relationship.type.equals("artist", true)
|
||||
}.map { relationship -> relationship.id }
|
||||
.distinct()
|
||||
|
||||
authors = runCatching {
|
||||
val ids = authorIds.joinToString("&ids[]=", "?ids[]=")
|
||||
val response = client.newCall(GET("${MdUtil.authorUrl}$ids")).execute()
|
||||
val json = response.parseAs<AuthorResponseList>(MdUtil.jsonParser)
|
||||
json.results.map { MdUtil.cleanString(it.data.attributes.name) }.takeUnless { it.isEmpty() }
|
||||
}.getOrNull()
|
||||
val authorMap = runCatching {
|
||||
val ids = (authorIds + artistIds).distinct().joinToString("&ids[]=", "?ids[]=")
|
||||
val response = client.newCall(GET("${MdUtil.authorUrl}$ids")).await()
|
||||
.parseAs<AuthorResponseList>()
|
||||
response.results.map {
|
||||
it.data.id to MdUtil.cleanString(it.data.attributes.name)
|
||||
}.toMap()
|
||||
}.getOrNull() ?: emptyMap()
|
||||
|
||||
authors = authorIds.mapNotNull { authorMap[it] }.takeUnless { it.isEmpty() }
|
||||
artists = artistIds.mapNotNull { authorMap[it] }.takeUnless { it.isEmpty() }
|
||||
|
||||
langFlag = networkManga.originalLanguage
|
||||
val lastChapter = networkManga.lastChapter.toFloatOrNull()
|
||||
|
@ -22,6 +22,7 @@ class MangaDexSearchMetadata : RaisedSearchMetadata() {
|
||||
var description: String? = null
|
||||
|
||||
var authors: List<String>? = null
|
||||
var artists: List<String>? = null
|
||||
|
||||
var langFlag: String? = null
|
||||
|
||||
@ -52,6 +53,8 @@ class MangaDexSearchMetadata : RaisedSearchMetadata() {
|
||||
|
||||
val author = authors?.joinToString()?.let { MdUtil.cleanString(it) }
|
||||
|
||||
val artist = artists?.joinToString()?.let { MdUtil.cleanString(it) }
|
||||
|
||||
val status = status
|
||||
|
||||
val genres = tagsToGenreList()
|
||||
@ -63,6 +66,7 @@ class MangaDexSearchMetadata : RaisedSearchMetadata() {
|
||||
title = title ?: manga.title,
|
||||
cover = cover ?: manga.cover,
|
||||
author = author ?: manga.author,
|
||||
artist = artist ?: manga.artist,
|
||||
status = status ?: manga.status,
|
||||
genres = genres,
|
||||
description = description ?: manga.description
|
||||
@ -76,7 +80,7 @@ class MangaDexSearchMetadata : RaisedSearchMetadata() {
|
||||
cover?.let { pairs += context.getString(R.string.thumbnail_url) to it }
|
||||
title?.let { pairs += context.getString(R.string.title) to it }
|
||||
authors?.let { pairs += context.getString(R.string.author) to it.joinToString() }
|
||||
// artist?.let { pairs += context.getString(R.string.artist) to it }
|
||||
artists?.let { pairs += context.getString(R.string.artist) to it.joinToString() }
|
||||
langFlag?.let { pairs += context.getString(R.string.language) to it }
|
||||
lastChapterNumber?.let { pairs += context.getString(R.string.last_chapter_number) to it.toString() }
|
||||
// rating?.let { pairs += context.getString(R.string.average_rating) to it }
|
||||
|
Loading…
x
Reference in New Issue
Block a user