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 com.elvishew.xlog.XLog
|
||||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
|
import eu.kanade.tachiyomi.network.await
|
||||||
import eu.kanade.tachiyomi.network.parseAs
|
import eu.kanade.tachiyomi.network.parseAs
|
||||||
import eu.kanade.tachiyomi.source.model.SChapter
|
import eu.kanade.tachiyomi.source.model.SChapter
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
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
|
* 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)
|
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) {
|
with(metadata) {
|
||||||
try {
|
try {
|
||||||
val networkManga = networkApiManga.data.attributes
|
val networkManga = networkApiManga.data.attributes
|
||||||
@ -80,16 +81,29 @@ class ApiMangaParser(val client: OkHttpClient, private val lang: String) {
|
|||||||
// networkManga.mainCover
|
// 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 authorMap = runCatching {
|
||||||
val ids = authorIds.joinToString("&ids[]=", "?ids[]=")
|
val ids = (authorIds + artistIds).distinct().joinToString("&ids[]=", "?ids[]=")
|
||||||
val response = client.newCall(GET("${MdUtil.authorUrl}$ids")).execute()
|
val response = client.newCall(GET("${MdUtil.authorUrl}$ids")).await()
|
||||||
val json = response.parseAs<AuthorResponseList>(MdUtil.jsonParser)
|
.parseAs<AuthorResponseList>()
|
||||||
json.results.map { MdUtil.cleanString(it.data.attributes.name) }.takeUnless { it.isEmpty() }
|
response.results.map {
|
||||||
}.getOrNull()
|
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
|
langFlag = networkManga.originalLanguage
|
||||||
val lastChapter = networkManga.lastChapter.toFloatOrNull()
|
val lastChapter = networkManga.lastChapter.toFloatOrNull()
|
||||||
|
@ -22,6 +22,7 @@ class MangaDexSearchMetadata : RaisedSearchMetadata() {
|
|||||||
var description: String? = null
|
var description: String? = null
|
||||||
|
|
||||||
var authors: List<String>? = null
|
var authors: List<String>? = null
|
||||||
|
var artists: List<String>? = null
|
||||||
|
|
||||||
var langFlag: String? = null
|
var langFlag: String? = null
|
||||||
|
|
||||||
@ -52,6 +53,8 @@ class MangaDexSearchMetadata : RaisedSearchMetadata() {
|
|||||||
|
|
||||||
val author = authors?.joinToString()?.let { MdUtil.cleanString(it) }
|
val author = authors?.joinToString()?.let { MdUtil.cleanString(it) }
|
||||||
|
|
||||||
|
val artist = artists?.joinToString()?.let { MdUtil.cleanString(it) }
|
||||||
|
|
||||||
val status = status
|
val status = status
|
||||||
|
|
||||||
val genres = tagsToGenreList()
|
val genres = tagsToGenreList()
|
||||||
@ -63,6 +66,7 @@ class MangaDexSearchMetadata : RaisedSearchMetadata() {
|
|||||||
title = title ?: manga.title,
|
title = title ?: manga.title,
|
||||||
cover = cover ?: manga.cover,
|
cover = cover ?: manga.cover,
|
||||||
author = author ?: manga.author,
|
author = author ?: manga.author,
|
||||||
|
artist = artist ?: manga.artist,
|
||||||
status = status ?: manga.status,
|
status = status ?: manga.status,
|
||||||
genres = genres,
|
genres = genres,
|
||||||
description = description ?: manga.description
|
description = description ?: manga.description
|
||||||
@ -76,7 +80,7 @@ class MangaDexSearchMetadata : RaisedSearchMetadata() {
|
|||||||
cover?.let { pairs += context.getString(R.string.thumbnail_url) to it }
|
cover?.let { pairs += context.getString(R.string.thumbnail_url) to it }
|
||||||
title?.let { pairs += context.getString(R.string.title) to it }
|
title?.let { pairs += context.getString(R.string.title) to it }
|
||||||
authors?.let { pairs += context.getString(R.string.author) to it.joinToString() }
|
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 }
|
langFlag?.let { pairs += context.getString(R.string.language) to it }
|
||||||
lastChapterNumber?.let { pairs += context.getString(R.string.last_chapter_number) to it.toString() }
|
lastChapterNumber?.let { pairs += context.getString(R.string.last_chapter_number) to it.toString() }
|
||||||
// rating?.let { pairs += context.getString(R.string.average_rating) to it }
|
// rating?.let { pairs += context.getString(R.string.average_rating) to it }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user