From 46b362c6ec4f9c3b79c36c0b8d34d40a198751b5 Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Sat, 10 Jun 2023 21:46:43 +0200 Subject: [PATCH] fix(en/marinmoe): Sort video qualities (#1709) --- src/en/marinmoe/build.gradle | 2 +- .../animeextension/en/marinmoe/MarinMoe.kt | 197 +++++++++--------- 2 files changed, 105 insertions(+), 94 deletions(-) diff --git a/src/en/marinmoe/build.gradle b/src/en/marinmoe/build.gradle index c5b02b65b..a7c614307 100644 --- a/src/en/marinmoe/build.gradle +++ b/src/en/marinmoe/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'marin.moe' pkgNameSuffix = 'en.marinmoe' extClass = '.MarinMoe' - extVersionCode = 7 + extVersionCode = 8 libVersion = '13' } diff --git a/src/en/marinmoe/src/eu/kanade/tachiyomi/animeextension/en/marinmoe/MarinMoe.kt b/src/en/marinmoe/src/eu/kanade/tachiyomi/animeextension/en/marinmoe/MarinMoe.kt index 656e74b6e..6e5ddd2c6 100644 --- a/src/en/marinmoe/src/eu/kanade/tachiyomi/animeextension/en/marinmoe/MarinMoe.kt +++ b/src/en/marinmoe/src/eu/kanade/tachiyomi/animeextension/en/marinmoe/MarinMoe.kt @@ -18,7 +18,7 @@ import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.util.asJsoup import kotlinx.serialization.json.Json -import okhttp3.HttpUrl.Companion.toHttpUrlOrNull +import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request @@ -32,7 +32,6 @@ import uy.kohesive.injekt.injectLazy import java.lang.Exception import java.text.SimpleDateFormat import java.util.Date -import kotlin.collections.ArrayList class MarinMoe : ConfigurableAnimeSource, AnimeHttpSource() { @@ -59,24 +58,20 @@ class MarinMoe : ConfigurableAnimeSource, AnimeHttpSource() { // ============================== Popular =============================== - override fun popularAnimeParse(response: Response): AnimesPage { - return parseAnime(response) - } + override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/anime?sort=vwk-d&page=$page", headers) - override fun popularAnimeRequest(page: Int): Request { - return GET("$baseUrl/anime?sort=vwk-d&page=$page", headers = headers) - } + override fun popularAnimeParse(response: Response): AnimesPage = parseAnime(response) // =============================== Latest =============================== - override fun latestUpdatesParse(response: Response): AnimesPage { - return parseAnime(response) - } + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/anime?sort=rel-d&page=$page", headers) - override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/anime?sort=rel-d&page=$page") + override fun latestUpdatesParse(response: Response): AnimesPage = parseAnime(response) // =============================== Search =============================== + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request = throw Exception("Not used") + override fun fetchSearchAnime(page: Int, query: String, filters: AnimeFilterList): Observable { val params = MarinMoeFilters.getSearchParameters(filters) return client.newCall(searchAnimeRequest(page, query, params)) @@ -86,10 +81,8 @@ class MarinMoe : ConfigurableAnimeSource, AnimeHttpSource() { } } - override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request = throw Exception("Not used") - private fun searchAnimeRequest(page: Int, query: String, filters: MarinMoeFilters.FilterSearchParams): Request { - var url = "$baseUrl/anime".toHttpUrlOrNull()!!.newBuilder() + var url = "$baseUrl/anime".toHttpUrl().newBuilder() .addQueryParameter("sort", filters.sort) .addQueryParameter("search", query) .addQueryParameter("page", page.toString()) @@ -103,12 +96,12 @@ class MarinMoe : ConfigurableAnimeSource, AnimeHttpSource() { if (filters.group.isNotBlank()) url += "&filter[group][0][id]=${filters.group}&filter[group][0][opr]=include" if (filters.studio.isNotBlank()) url += "&filter[production][0][id]=${filters.studio}&filter[production][0][opr]=include" - return GET(url, headers = headers) + return GET(url, headers) } - override fun searchAnimeParse(response: Response): AnimesPage { - return parseAnime(response) - } + override fun searchAnimeParse(response: Response): AnimesPage = parseAnime(response) + + // ============================== Filters =============================== override fun getFilterList(): AnimeFilterList = MarinMoeFilters.FILTER_LIST @@ -116,27 +109,26 @@ class MarinMoe : ConfigurableAnimeSource, AnimeHttpSource() { override fun animeDetailsParse(response: Response): SAnime { val document = response.asJsoup() - val anime = SAnime.create() val dataPage = document.select("div#app").attr("data-page").replace(""", "\"") val details = json.decodeFromString(dataPage).props.anime - anime.thumbnail_url = details.cover - anime.title = details.title - anime.genre = details.genre_list.joinToString(", ") { it.name } - anime.author = details.production_list.joinToString(", ") { it.name } - anime.status = parseStatus(details.status.name) - - var description = Jsoup.parse( + var desc = Jsoup.parse( details.description.replace("
", "br2n"), ).text().replace("br2n", "\n") + "\n" - description += "\nContent Rating: ${details.content_rating.name}" - description += "\nRelease Date: ${details.release_date}" - description += "\nType: ${details.type.name}" - description += "\nSource: ${details.source_list.joinToString(separator = ", ") { it.name }}" - anime.description = description + desc += "\nContent Rating: ${details.content_rating.name}" + desc += "\nRelease Date: ${details.release_date}" + desc += "\nType: ${details.type.name}" + desc += "\nSource: ${details.source_list.joinToString(separator = ", ") { it.name }}" - return anime + return SAnime.create().apply { + title = details.title + thumbnail_url = details.cover + genre = details.genre_list.joinToString(", ") { it.name } + author = details.production_list.joinToString(", ") { it.name } + status = parseStatus(details.status.name) + description = desc + } } // ============================== Episodes ============================== @@ -147,19 +139,20 @@ class MarinMoe : ConfigurableAnimeSource, AnimeHttpSource() { val dataPage = document.select("div#app").attr("data-page").replace(""", "\"") val dataJson = json.decodeFromString(dataPage) - val includeSpecial = preferences.getBoolean("preferred_special", true) + val includeSpecial = preferences.getBoolean(PREF_SPECIAL_KEY, PREF_SPECIAL_DEFAULT) dataJson.props.episode_list.data.forEach { - val episode = SEpisode.create() + val episode = SEpisode.create().apply { + name = "Episode ${it.slug} ${it.title}" + episode_number = it.sort + url = "${response.request.url}/${it.slug}" + val parsedDate = parseDate(it.release_date) + if (parsedDate.time != -1L) date_upload = parsedDate.time + } - episode.name = "Episode ${it.slug} ${it.title}" - episode.episode_number = it.sort - episode.url = "${response.request.url}/${it.slug}" - - val parsedDate = parseDate(it.release_date) - if (parsedDate.time != -1L) episode.date_upload = parsedDate.time - - if (includeSpecial || it.type != 2) episodes.add(episode) + if (includeSpecial || it.type != 2) { + episodes.add(episode) + } } var next = dataJson.props.episode_list.links.next @@ -170,14 +163,13 @@ class MarinMoe : ConfigurableAnimeSource, AnimeHttpSource() { val nextDataJson = json.decodeFromString(nextDataPage) nextDataJson.props.episode_list.data.forEach { - val episode = SEpisode.create() - - episode.name = "Episode ${it.slug} ${it.title}" - episode.episode_number = it.sort - episode.url = "${response.request.url}/${it.slug}" - - val parsedDate = parseDate(it.release_date) - if (parsedDate.time != -1L) episode.date_upload = parsedDate.time + val episode = SEpisode.create().apply { + name = "Episode ${it.slug} ${it.title}" + episode_number = it.sort + url = "${response.request.url}/${it.slug}" + val parsedDate = parseDate(it.release_date) + if (parsedDate.time != -1L) date_upload = parsedDate.time + } episodes.add(episode) } @@ -190,9 +182,7 @@ class MarinMoe : ConfigurableAnimeSource, AnimeHttpSource() { // ============================ Video Links ============================= - override fun videoListRequest(episode: SEpisode): Request { - return GET(episode.url, headers = headers) - } + override fun videoListRequest(episode: SEpisode): Request = GET(episode.url, headers) override fun videoListParse(response: Response): List