From 522498826523bbbbacb8923b115335c6f2ec9856 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Sat, 22 Jan 2022 22:22:53 -0500 Subject: [PATCH] Full-proof way of getting a mangadex manga title, update crashlytics --- app/build.gradle.kts | 2 +- .../java/exh/md/handlers/ApiMangaParser.kt | 10 ++++-- app/src/main/java/exh/md/utils/MdUtil.kt | 35 ++++++++++++++----- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3173c6977..d421373d3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -280,7 +280,7 @@ dependencies { // Firebase (EH) implementation("com.google.firebase:firebase-analytics-ktx:20.0.2") - implementation("com.google.firebase:firebase-crashlytics-ktx:18.2.6") + implementation("com.google.firebase:firebase-crashlytics-ktx:18.2.7") // Better logging (EH) implementation("com.elvishew:xlog:1.11.0") diff --git a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt index 3eeafc653..cf5e80814 100644 --- a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt +++ b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt @@ -69,7 +69,7 @@ class ApiMangaParser( try { val mangaAttributesDto = mangaDto.data.attributes mdUuid = mangaDto.data.id - title = MdUtil.cleanString(MdUtil.getFromLangMap(mangaAttributesDto.title.asMdMap(), lang, mangaAttributesDto.originalLanguage)) + title = MdUtil.cleanString(MdUtil.getTitleFromManga(mangaAttributesDto, lang,)) altTitles = mangaAttributesDto.altTitles.mapNotNull { it[lang] }.nullIfEmpty() val mangaRelationshipsDto = mangaDto.data.relationships @@ -81,7 +81,13 @@ class ApiMangaParser( cover = MdUtil.cdnCoverUrl(mangaDto.data.id, coverFileName) } - description = MdUtil.cleanDescription(MdUtil.getFromLangMap(mangaAttributesDto.description.asMdMap(), lang, mangaAttributesDto.originalLanguage)) + description = MdUtil.cleanDescription( + MdUtil.getFromLangMap( + langMap = mangaAttributesDto.description.asMdMap(), + currentLang = lang, + originalLanguage = mangaAttributesDto.originalLanguage + ).orEmpty() + ) authors = mangaRelationshipsDto.filter { relationshipDto -> relationshipDto.type.equals(MdConstants.Types.author, true) diff --git a/app/src/main/java/exh/md/utils/MdUtil.kt b/app/src/main/java/exh/md/utils/MdUtil.kt index 1798b3b7e..e779b57f0 100644 --- a/app/src/main/java/exh/md/utils/MdUtil.kt +++ b/app/src/main/java/exh/md/utils/MdUtil.kt @@ -8,6 +8,7 @@ import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.all.MangaDex import exh.log.xLogD import exh.md.dto.LoginBodyTokenDto +import exh.md.dto.MangaAttributesDto import exh.md.dto.MangaDataDto import exh.md.network.NoSessionException import exh.source.getMainSource @@ -266,7 +267,7 @@ class MdUtil { fun createMangaEntry(json: MangaDataDto, lang: String): MangaInfo { return MangaInfo( key = buildMangaUrl(json.id), - title = cleanString(getFromLangMap(json.attributes.title.asMdMap(), lang, json.attributes.originalLanguage)), + title = cleanString(getTitleFromManga(json.attributes, lang)), cover = json.relationships .firstOrNull { relationshipDto -> relationshipDto.type == MdConstants.Types.coverArt } ?.attributes @@ -277,14 +278,30 @@ class MdUtil { ) } - fun getFromLangMap(langMap: Map, currentLang: String, originalLanguage: String): String { - return langMap[currentLang] ?: langMap["en"] ?: langMap[originalLanguage].let { - if (it == null && originalLanguage == "ja") { - langMap["jp"] - } else { - it - }.orEmpty() - } + fun getTitleFromManga(json: MangaAttributesDto, lang: String): String { + return getFromLangMap(json.title.asMdMap(), lang, json.originalLanguage) + ?: getAltTitle(json.altTitles, lang, json.originalLanguage) + ?: json.title.asMdMap()[json.originalLanguage] + ?: json.altTitles.firstNotNullOfOrNull { it[json.originalLanguage] } + .orEmpty() + } + + fun getFromLangMap(langMap: Map, currentLang: String, originalLanguage: String): String? { + return langMap[currentLang] + ?: langMap["en"] + ?: if (originalLanguage == "ja") { + langMap["ja-ro"] + ?: langMap["jp-ro"] + } else null + } + + fun getAltTitle(langMaps: List>, currentLang: String, originalLanguage: String): String? { + return langMaps.firstNotNullOfOrNull { it[currentLang] } + ?: langMaps.firstNotNullOfOrNull { it["en"] } + ?: if (originalLanguage == "ja") { + langMaps.firstNotNullOfOrNull { it["ja-ro"] } + ?: langMaps.firstNotNullOfOrNull { it["jp-ro"] } + } else null } fun cdnCoverUrl(dexId: String, fileName: String): String {