diff --git a/app/src/main/java/exh/md/dto/ChapterDto.kt b/app/src/main/java/exh/md/dto/ChapterDto.kt index 35cce670d..be0b3938c 100644 --- a/app/src/main/java/exh/md/dto/ChapterDto.kt +++ b/app/src/main/java/exh/md/dto/ChapterDto.kt @@ -14,7 +14,6 @@ data class ChapterListDto( data class ChapterDto( val result: String, val data: ChapterDataDto, - val relationships: List, ) @Serializable @@ -22,6 +21,7 @@ data class ChapterDataDto( val id: String, val type: String, val attributes: ChapterAttributesDto, + val relationships: List, ) @Serializable diff --git a/app/src/main/java/exh/md/dto/MangaDto.kt b/app/src/main/java/exh/md/dto/MangaDto.kt index fc51aca21..51bb6d0dd 100644 --- a/app/src/main/java/exh/md/dto/MangaDto.kt +++ b/app/src/main/java/exh/md/dto/MangaDto.kt @@ -15,11 +15,15 @@ data class MangaListDto( data class MangaDto( val result: String, val data: MangaDataDto, - val relationships: List, ) @Serializable -data class MangaDataDto(val id: String, val type: String, val attributes: MangaAttributesDto) +data class MangaDataDto( + val id: String, + val type: String, + val attributes: MangaAttributesDto, + val relationships: List, +) @Serializable data class MangaAttributesDto( @@ -106,12 +110,12 @@ data class CoverListDto( @Serializable data class CoverDto( val data: CoverDataDto, - val relationships: List, ) @Serializable data class CoverDataDto( val attributes: CoverAttributesDto, + val relationships: List, ) @Serializable diff --git a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt index c9146f7a8..c408bdd5b 100644 --- a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt +++ b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt @@ -59,7 +59,8 @@ class ApiMangaParser( title = MdUtil.cleanString(mangaAttributesDto.title.asMdMap().let { it[lang] ?: it["en"].orEmpty() }) altTitles = mangaAttributesDto.altTitles.mapNotNull { it[lang] }.nullIfEmpty() - mangaDto.relationships + val mangaRelationshipsDto = mangaDto.data.relationships + mangaRelationshipsDto .firstOrNull { relationshipDto -> relationshipDto.type == MdConstants.Types.coverArt } ?.attributes ?.fileName @@ -69,11 +70,11 @@ class ApiMangaParser( description = MdUtil.cleanDescription(mangaAttributesDto.description.asMdMap().let { it[lang] ?: it["en"].orEmpty() }) - authors = mangaDto.relationships.filter { relationshipDto -> + authors = mangaRelationshipsDto.filter { relationshipDto -> relationshipDto.type.equals(MdConstants.Types.author, true) }.mapNotNull { it.attributes!!.name }.distinct() - artists = mangaDto.relationships.filter { relationshipDto -> + artists = mangaRelationshipsDto.filter { relationshipDto -> relationshipDto.type.equals(MdConstants.Types.artist, true) }.mapNotNull { it.attributes!!.name }.distinct() @@ -200,7 +201,7 @@ class ApiMangaParser( } fun chapterParseForMangaId(chapterDto: ChapterDto): String? { - return chapterDto.relationships.find { it.type.equals("manga", true) }?.id + return chapterDto.data.relationships.find { it.type.equals("manga", true) }?.id } fun StringBuilder.appends(string: String): StringBuilder = append("$string ") @@ -252,7 +253,7 @@ class ApiMangaParser( // Convert from unix time val dateUpload = MdUtil.parseDate(attributes.publishAt) - val scanlatorName = networkChapter.relationships + val scanlatorName = networkChapter.data.relationships .filter { it.type == MdConstants.Types.scanlator } diff --git a/app/src/main/java/exh/md/handlers/MangaHandler.kt b/app/src/main/java/exh/md/handlers/MangaHandler.kt index d677c0253..86ef6db11 100644 --- a/app/src/main/java/exh/md/handlers/MangaHandler.kt +++ b/app/src/main/java/exh/md/handlers/MangaHandler.kt @@ -53,7 +53,7 @@ class MangaHandler( } private fun getGroupMap(results: List): Map { - return results.map { chapter -> chapter.relationships } + return results.map { chapter -> chapter.data.relationships } .flatten() .filter { it.type == MdConstants.Types.scanlator } .map { it.id to it.attributes!!.name!! } diff --git a/app/src/main/java/exh/md/service/MangaDexService.kt b/app/src/main/java/exh/md/service/MangaDexService.kt index b503ab7e2..a14cfb4f0 100644 --- a/app/src/main/java/exh/md/service/MangaDexService.kt +++ b/app/src/main/java/exh/md/service/MangaDexService.kt @@ -28,13 +28,17 @@ class MangaDexService( ): MangaListDto { return client.newCall( GET( - MdApi.manga.toHttpUrl().newBuilder().apply { - addQueryParameter("includes[]", MdConstants.Types.coverArt) - addQueryParameter("limit", ids.size.toString()) - ids.forEach { - addQueryParameter("ids[]", it) + MdApi.manga.toHttpUrl() + .newBuilder() + .apply { + addQueryParameter("includes[]", MdConstants.Types.coverArt) + addQueryParameter("limit", ids.size.toString()) + ids.forEach { + addQueryParameter("ids[]", it) + } } - }.build().toString(), + .build() + .toString(), cache = CacheControl.FORCE_NETWORK ) ).await().parseAs(MdUtil.jsonParser) @@ -45,7 +49,16 @@ class MangaDexService( ): MangaDto { return client.newCall( GET( - "${MdApi.manga}/$id?includes[]=${MdConstants.Types.coverArt}&includes[]=${MdConstants.Types.author}&includes[]=${MdConstants.Types.artist}", + MdApi.manga.toHttpUrl() + .newBuilder() + .apply { + addPathSegment(id) + addQueryParameter("includes[]", MdConstants.Types.coverArt) + addQueryParameter("includes[]", MdConstants.Types.author) + addQueryParameter("includes[]", MdConstants.Types.artist) + } + .build() + .toString(), cache = CacheControl.FORCE_NETWORK ) ).await().parseAs(MdUtil.jsonParser) @@ -56,12 +69,23 @@ class MangaDexService( translatedLanguage: String, offset: Int, ): ChapterListDto { - val url = "${MdApi.manga}/$id/feed?limit=500&includes[]=${MdConstants.Types.scanlator}&order[volume]=desc&order[chapter]=desc".toHttpUrl() + val url = MdApi.manga.toHttpUrl() .newBuilder() .apply { + addPathSegment(id) + addPathSegment("feed") + addQueryParameter("limit", "500") + addQueryParameter("includes[]", MdConstants.Types.scanlator) + addQueryParameter("order[volume]", "desc") + addQueryParameter("order[chapter]", "desc") + addQueryParameter("contentRating[]", "safe") + addQueryParameter("contentRating[]", "suggestive") + addQueryParameter("contentRating[]", "erotica") + addQueryParameter("contentRating[]", "pornographic") addQueryParameter("translatedLanguage[]", translatedLanguage) addQueryParameter("offset", offset.toString()) - }.build() + } + .build() .toString() return client.newCall( diff --git a/app/src/main/java/exh/md/utils/MdUtil.kt b/app/src/main/java/exh/md/utils/MdUtil.kt index f3eb64a06..5fd33fa33 100644 --- a/app/src/main/java/exh/md/utils/MdUtil.kt +++ b/app/src/main/java/exh/md/utils/MdUtil.kt @@ -266,7 +266,7 @@ class MdUtil { return MangaInfo( key = buildMangaUrl(json.data.id), title = cleanString(json.data.attributes.title.asMdMap().let { it[lang] ?: it["en"].orEmpty() }), - cover = json.relationships + cover = json.data.relationships .firstOrNull { relationshipDto -> relationshipDto.type == MdConstants.Types.coverArt } ?.attributes ?.fileName @@ -280,14 +280,17 @@ class MdUtil { return "$cdnUrl/covers/$dexId/$fileName" } - fun getLoginBody(preferences: PreferencesHelper, mdList: MdList) = preferences.trackToken(mdList).get().nullIfBlank()?.let { - try { - jsonParser.decodeFromString(it) - } catch (e: SerializationException) { - xLogD("Unable to load login body") - null + fun getLoginBody(preferences: PreferencesHelper, mdList: MdList) = preferences.trackToken(mdList) + .get() + .nullIfBlank() + ?.let { + try { + jsonParser.decodeFromString(it) + } catch (e: SerializationException) { + xLogD("Unable to load login body") + null + } } - } fun sessionToken(preferences: PreferencesHelper, mdList: MdList) = getLoginBody(preferences, mdList)?.session @@ -300,7 +303,10 @@ class MdUtil { } fun getAuthHeaders(headers: Headers, preferences: PreferencesHelper, mdList: MdList) = - headers.newBuilder().add("Authorization", "Bearer ${sessionToken(preferences, mdList) ?: throw NoSessionException()}").build() + headers.newBuilder().add( + "Authorization", + "Bearer " + (sessionToken(preferences, mdList) ?: throw NoSessionException()) + ).build() fun getEnabledMangaDex(preferences: PreferencesHelper, sourceManager: SourceManager = Injekt.get()): MangaDex? { return getEnabledMangaDexs(preferences, sourceManager).let { mangadexs ->