From e6cb339ff5614b8d85001d4d9d3d12c2e9a6bd85 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Sat, 10 Jul 2021 17:27:21 -0400 Subject: [PATCH] Mangadex fixes --- app/src/main/java/exh/md/dto/ChapterDto.kt | 10 +++++----- app/src/main/java/exh/md/dto/MangaDto.kt | 7 ++++--- app/src/main/java/exh/md/handlers/ApiMangaParser.kt | 7 ++++--- app/src/main/java/exh/md/utils/MdExtensions.kt | 10 ++++++++++ app/src/main/java/exh/md/utils/MdUtil.kt | 2 +- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/exh/md/dto/ChapterDto.kt b/app/src/main/java/exh/md/dto/ChapterDto.kt index 5f40b2885..35cce670d 100644 --- a/app/src/main/java/exh/md/dto/ChapterDto.kt +++ b/app/src/main/java/exh/md/dto/ChapterDto.kt @@ -38,11 +38,11 @@ data class ChapterAttributesDto( @Serializable data class GroupListDto( - val limit: Int, - val offset: Int, - val total: Int, - val results: List, -) + override val limit: Int, + override val offset: Int, + override val total: Int, + override val results: List, +) : ListCallDto @Serializable data class GroupDto( diff --git a/app/src/main/java/exh/md/dto/MangaDto.kt b/app/src/main/java/exh/md/dto/MangaDto.kt index 165a8b412..fc51aca21 100644 --- a/app/src/main/java/exh/md/dto/MangaDto.kt +++ b/app/src/main/java/exh/md/dto/MangaDto.kt @@ -1,6 +1,7 @@ package exh.md.dto import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonElement @Serializable data class MangaListDto( @@ -22,10 +23,10 @@ data class MangaDataDto(val id: String, val type: String, val attributes: MangaA @Serializable data class MangaAttributesDto( - val title: Map, + val title: JsonElement, val altTitles: List>, - val description: Map, - val links: Map?, + val description: JsonElement, + val links: JsonElement?, val originalLanguage: String, val lastVolume: String?, val lastChapter: String?, diff --git a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt index 1461e0884..4c082721c 100644 --- a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt +++ b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt @@ -7,6 +7,7 @@ import exh.md.dto.ChapterDto import exh.md.dto.MangaDto import exh.md.utils.MdConstants import exh.md.utils.MdUtil +import exh.md.utils.asMdMap import exh.metadata.metadata.MangaDexSearchMetadata import exh.metadata.metadata.base.RaisedTag import exh.metadata.metadata.base.getFlatMetadataForManga @@ -55,7 +56,7 @@ class ApiMangaParser( try { val mangaAttributesDto = mangaDto.data.attributes mdUuid = mangaDto.data.id - title = MdUtil.cleanString(mangaAttributesDto.title[lang] ?: mangaAttributesDto.title["en"]!!) + title = MdUtil.cleanString(mangaAttributesDto.title.asMdMap().let { it[lang] ?: it["en"]!! }) altTitles = mangaAttributesDto.altTitles.mapNotNull { it[lang] }.nullIfEmpty() mangaDto.relationships @@ -66,7 +67,7 @@ class ApiMangaParser( cover = MdUtil.cdnCoverUrl(mangaDto.data.id, coverFileName) } - description = MdUtil.cleanDescription(mangaAttributesDto.description[lang] ?: mangaAttributesDto.description["en"]!!) + description = MdUtil.cleanDescription(mangaAttributesDto.description.asMdMap().let { it[lang] ?: it["en"].orEmpty() }) authors = mangaDto.relationships.filter { relationshipDto -> relationshipDto.type.equals(MdConstants.Types.author, true) @@ -85,7 +86,7 @@ class ApiMangaParser( manga.users = it.users }*/ - mangaAttributesDto.links?.let { links -> + mangaAttributesDto.links?.asMdMap()?.let { links -> links["al"]?.let { anilistId = it } links["kt"]?.let { kitsuId = it } links["mal"]?.let { myAnimeListId = it } diff --git a/app/src/main/java/exh/md/utils/MdExtensions.kt b/app/src/main/java/exh/md/utils/MdExtensions.kt index f7bb417a0..c4fa85ff2 100644 --- a/app/src/main/java/exh/md/utils/MdExtensions.kt +++ b/app/src/main/java/exh/md/utils/MdExtensions.kt @@ -2,6 +2,10 @@ package exh.md.utils import exh.md.dto.ListCallDto import exh.util.under +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.contentOrNull +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive suspend fun mdListCall(request: suspend (offset: Int) -> ListCallDto): List { val results = mutableListOf() @@ -15,3 +19,9 @@ suspend fun mdListCall(request: suspend (offset: Int) -> ListCallDto): Li return results } + +fun JsonElement.asMdMap(): Map { + return runCatching { + jsonObject.map { it.key to it.value.jsonPrimitive.contentOrNull.orEmpty() }.toMap() + }.getOrElse { emptyMap() } +} diff --git a/app/src/main/java/exh/md/utils/MdUtil.kt b/app/src/main/java/exh/md/utils/MdUtil.kt index 12e34053c..0aeb0d9ca 100644 --- a/app/src/main/java/exh/md/utils/MdUtil.kt +++ b/app/src/main/java/exh/md/utils/MdUtil.kt @@ -265,7 +265,7 @@ class MdUtil { fun createMangaEntry(json: MangaDto, lang: String): MangaInfo { return MangaInfo( key = buildMangaUrl(json.data.id), - title = cleanString(json.data.attributes.title[lang] ?: json.data.attributes.title["en"]!!), + title = cleanString(json.data.attributes.title.asMdMap().let { it[lang] ?: it["en"]!! }), cover = json.relationships .firstOrNull { relationshipDto -> relationshipDto.type == MdConstants.Types.coverArt } ?.attributes