From 411c1a87ddd9d95db31b64258cade5385c1511bf Mon Sep 17 00:00:00 2001 From: mobi2002 <48650614+mobi2002@users.noreply.github.com> Date: Tue, 4 Apr 2023 20:38:52 +0500 Subject: [PATCH] AllAnime: refactor repetitive code (#15947) * AllAnime: refactor repetitive code * move some stuff --- src/en/allanime/build.gradle | 2 +- .../extension/en/allanime/AllAnime.kt | 135 +++++++----------- .../extension/en/allanime/AllAnimeDto.kt | 60 +++----- 3 files changed, 70 insertions(+), 127 deletions(-) diff --git a/src/en/allanime/build.gradle b/src/en/allanime/build.gradle index 8ba4b84d4..1661c165a 100644 --- a/src/en/allanime/build.gradle +++ b/src/en/allanime/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'AllAnime' pkgNameSuffix = 'en.allanime' extClass = '.AllAnime' - extVersionCode = 1 + extVersionCode = 2 } apply from: "$rootDir/common.gradle" diff --git a/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllAnime.kt b/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllAnime.kt index 3b5f40949..80b1f5244 100644 --- a/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllAnime.kt +++ b/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllAnime.kt @@ -22,6 +22,7 @@ import eu.kanade.tachiyomi.util.asJsoup import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.put @@ -81,33 +82,16 @@ class AllAnime : ConfigurableSource, HttpSource() { put("query", POPULAR_QUERY) } - val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .add("Content-Length", body.contentLength().toString()) - .add("Content-Type", body.contentType().toString()) - .build() - - return POST(apiUrl, newHeaders, body) + return apiRequest(payload) } override fun popularMangaParse(response: Response): MangasPage { val result = json.decodeFromString(response.body.string()) - val titleStyle = preferences.getString(TITLE_PREF, "romaji")!! - val mangaList = result.data.queryPopular.recommendations .mapNotNull { it.anyCard } .map { manga -> - SManga.create().apply { - title = when (titleStyle) { - "romaji" -> manga.name - "eng" -> manga.englishName ?: manga.name - else -> manga.nativeName ?: manga.name - } - url = "/manga/${manga._id}/${manga.name.titleToSlug()}" - thumbnail_url = manga.thumbnail.parseThumbnailUrl() - } + toSManga(manga) } return MangasPage(mangaList, mangaList.size == limit) @@ -173,32 +157,15 @@ class AllAnime : ConfigurableSource, HttpSource() { put("query", SEARCH_QUERY) } - val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .add("Content-Length", body.contentLength().toString()) - .add("Content-Type", body.contentType().toString()) - .build() - - return POST(apiUrl, newHeaders, body) + return apiRequest(payload) } override fun searchMangaParse(response: Response): MangasPage { val result = json.decodeFromString(response.body.string()) - val titleStyle = preferences.getString(TITLE_PREF, "romaji")!! - val mangaList = result.data.mangas.edges .map { manga -> - SManga.create().apply { - title = when (titleStyle) { - "romaji" -> manga.name - "eng" -> manga.englishName ?: manga.name - else -> manga.nativeName ?: manga.name - } - url = "/manga/${manga._id}/${manga.name.titleToSlug()}" - thumbnail_url = manga.thumbnail.parseThumbnailUrl() - } + toSManga(manga) } return MangasPage(mangaList, mangaList.size == limit) @@ -217,45 +184,14 @@ class AllAnime : ConfigurableSource, HttpSource() { put("query", DETAILS_QUERY) } - val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .add("Content-Length", body.contentLength().toString()) - .add("Content-Type", body.contentType().toString()) - .build() - - return POST(apiUrl, newHeaders, body) + return apiRequest(payload) } override fun mangaDetailsParse(response: Response): SManga { val result = json.decodeFromString(response.body.string()) val manga = result.data.manga - val titleStyle = preferences.getString(TITLE_PREF, "romaji")!! - - return SManga.create().apply { - title = when (titleStyle) { - "romaji" -> manga.name - "eng" -> manga.englishName ?: manga.name - else -> manga.nativeName ?: manga.name - } - url = "/manga/${manga._id}/${manga.name.titleToSlug()}" - thumbnail_url = manga.thumbnail.parseThumbnailUrl() - description = Jsoup.parse( - manga.description?.replace("
", "br2n") ?: "", - ).text().replace("br2n", "\n") - description += if (manga.altNames != null) { - "\n\nAlternative Names: ${manga.altNames.joinToString { it.trim() }}" - } else { - "" - } - if (manga.authors?.isNotEmpty() == true) { - author = manga.authors.first().trim() - artist = author - } - genre = "${manga.genres?.joinToString { it.trim() }}, ${manga.tags?.joinToString { it.trim() }}" - status = manga.status.parseStatus() - } + return toSManga(manga) } override fun getMangaUrl(manga: SManga): String { @@ -281,14 +217,7 @@ class AllAnime : ConfigurableSource, HttpSource() { put("query", CHAPTERS_QUERY) } - val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .add("Content-Length", body.contentLength().toString()) - .add("Content-Type", body.contentType().toString()) - .build() - - return POST(apiUrl, newHeaders, body) + return apiRequest(payload) } private fun chapterListParse(response: Response, manga: SManga): List { @@ -337,14 +266,7 @@ class AllAnime : ConfigurableSource, HttpSource() { put("query", PAGE_QUERY) } - val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) - - val newHeaders = headersBuilder() - .add("Content-Length", body.contentLength().toString()) - .add("Content-Type", body.contentType().toString()) - .build() - - return POST(apiUrl, newHeaders, body) + return apiRequest(payload) } private fun pageListParse(response: Response, chapter: SChapter): List { @@ -393,6 +315,45 @@ class AllAnime : ConfigurableSource, HttpSource() { } /* Helpers */ + private fun apiRequest(payload: JsonObject): Request { + val body = payload.toString().toRequestBody(JSON_MEDIA_TYPE) + + val newHeaders = headersBuilder() + .add("Content-Length", body.contentLength().toString()) + .add("Content-Type", body.contentType().toString()) + .build() + + return POST(apiUrl, newHeaders, body) + } + + private fun toSManga(manga: Manga): SManga { + val titleStyle = preferences.getString(TITLE_PREF, "romaji")!! + + return SManga.create().apply { + title = when (titleStyle) { + "romaji" -> manga.name + "eng" -> manga.englishName ?: manga.name + else -> manga.nativeName ?: manga.name + } + url = "/manga/${manga._id}/${manga.name.titleToSlug()}" + thumbnail_url = manga.thumbnail.parseThumbnailUrl() + description = Jsoup.parse( + manga.description?.replace("
", "br2n") ?: "", + ).text().replace("br2n", "\n") + description += if (manga.altNames != null) { + "\n\nAlternative Names: ${manga.altNames.joinToString { it.trim() }}" + } else { + "" + } + if (manga.authors?.isNotEmpty() == true) { + author = manga.authors.first().trim() + artist = author + } + genre = "${manga.genres?.joinToString { it.trim() }}, ${manga.tags?.joinToString { it.trim() }}" + status = manga.status.parseStatus() + } + } + private fun String.parseThumbnailUrl(): String { return if (this.matches(urlRegex)) { this diff --git a/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllAnimeDto.kt b/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllAnimeDto.kt index 6d04f6ad1..10652be5f 100644 --- a/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllAnimeDto.kt +++ b/src/en/allanime/src/eu/kanade/tachiyomi/extension/en/allanime/AllAnimeDto.kt @@ -16,17 +16,8 @@ data class ApiPopularResponse( ) { @Serializable data class Recommendation( - val anyCard: Card? = null, - ) { - @Serializable - data class Card( - val _id: String, - val name: String, - val thumbnail: String, - val englishName: String? = null, - val nativeName: String? = null, - ) - } + val anyCard: Manga? = null, + ) } } } @@ -41,17 +32,8 @@ data class ApiSearchResponse( ) { @Serializable data class SearchResultMangas( - val edges: List, - ) { - @Serializable - data class SearchResultEdge( - val _id: String, - val name: String, - val thumbnail: String, - val englishName: String? = null, - val nativeName: String? = null, - ) - } + val edges: List, + ) } } @@ -61,25 +43,25 @@ data class ApiMangaDetailsResponse( ) { @Serializable data class MangaDetailsData( - val manga: MangaDetails, - ) { - @Serializable - data class MangaDetails( - val _id: String, - val name: String, - val thumbnail: String, - val description: String?, - val authors: List?, - val genres: List?, - val tags: List?, - val status: String?, - val altNames: List?, - val englishName: String? = null, - val nativeName: String? = null, - ) - } + val manga: Manga, + ) } +@Serializable +data class Manga( + val _id: String, + val name: String, + val thumbnail: String, + val description: String?, + val authors: List?, + val genres: List?, + val tags: List?, + val status: String?, + val altNames: List?, + val englishName: String? = null, + val nativeName: String? = null, +) + @Serializable data class ApiChapterListResponse( val data: ChapterListData,