From ee14b97b8abaaf355a6ba1eaf6b2f0b6f14734e3 Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Sun, 18 Jun 2023 21:15:02 +0200 Subject: [PATCH] fix(it/aniplay): update baseurl, refactor, and fix open in webview (#1758) --- src/it/aniplay/build.gradle | 2 +- .../animeextension/it/aniplay/AniPlay.kt | 225 ++++++++---------- .../animeextension/it/aniplay/AniPlayDto.kt | 55 +++++ 3 files changed, 157 insertions(+), 125 deletions(-) create mode 100644 src/it/aniplay/src/eu/kanade/tachiyomi/animeextension/it/aniplay/AniPlayDto.kt diff --git a/src/it/aniplay/build.gradle b/src/it/aniplay/build.gradle index e01051ef2..8c61d1b6d 100644 --- a/src/it/aniplay/build.gradle +++ b/src/it/aniplay/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'AniPlay' pkgNameSuffix = 'it.aniplay' extClass = '.AniPlay' - extVersionCode = 4 + extVersionCode = 5 libVersion = '13' } diff --git a/src/it/aniplay/src/eu/kanade/tachiyomi/animeextension/it/aniplay/AniPlay.kt b/src/it/aniplay/src/eu/kanade/tachiyomi/animeextension/it/aniplay/AniPlay.kt index 3f0f03d5b..599b0e564 100644 --- a/src/it/aniplay/src/eu/kanade/tachiyomi/animeextension/it/aniplay/AniPlay.kt +++ b/src/it/aniplay/src/eu/kanade/tachiyomi/animeextension/it/aniplay/AniPlay.kt @@ -2,8 +2,11 @@ package eu.kanade.tachiyomi.animeextension.it.aniplay import android.app.Application import android.content.SharedPreferences +import android.widget.Toast +import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.AppInfo import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilterList import eu.kanade.tachiyomi.animesource.model.AnimesPage @@ -13,8 +16,6 @@ import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.asObservableSuccess -import kotlinx.serialization.Serializable -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import okhttp3.Headers import okhttp3.HttpUrl @@ -34,7 +35,7 @@ class AniPlay : ConfigurableAnimeSource, AnimeHttpSource() { override val name = "AniPlay" - override val baseUrl = "https://aniplay.it" + override val baseUrl by lazy { preferences.getString(PREF_DOMAIN_KEY, PREF_DOMAIN_DEFAULT)!! } override val lang = "it" @@ -50,11 +51,10 @@ class AniPlay : ConfigurableAnimeSource, AnimeHttpSource() { // ============================== Popular =============================== - override fun popularAnimeParse(response: Response): AnimesPage { - return searchAnimeParse(response) - } + override fun popularAnimeParse(response: Response): AnimesPage = searchAnimeParse(response) - override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/api/anime/advanced-similar-search?page=${page - 1}&size=36&sort=views,desc&sort=id") + override fun popularAnimeRequest(page: Int): Request = + GET("$baseUrl/api/anime/advanced-similar-search?page=${page - 1}&size=36&sort=views,desc&sort=id") // =============================== Latest =============================== @@ -125,38 +125,44 @@ class AniPlay : ConfigurableAnimeSource, AnimeHttpSource() { return AnimesPage(animeList, animeList.size == 36) } + // ============================== Filters =============================== + override fun getFilterList(): AnimeFilterList = AniPlayFilters.FILTER_LIST // =========================== Anime Details ============================ - override fun animeDetailsRequest(anime: SAnime): Request { - return GET("$baseUrl/api/anime/${anime.url}") + override fun animeDetailsRequest(anime: SAnime): Request = GET("$baseUrl/anime/${anime.url}") + + override fun fetchAnimeDetails(anime: SAnime): Observable { + return client.newCall(animeDetailsRequestInternal(anime)) + .asObservableSuccess() + .map { response -> + animeDetailsParse(response).apply { initialized = true } + } } + private fun animeDetailsRequestInternal(anime: SAnime): Request = GET("$baseUrl/api/anime/${anime.url}") + override fun animeDetailsParse(response: Response): SAnime { val detailsJson = json.decodeFromString(response.body.string()) - val anime = SAnime.create() - anime.title = detailsJson.title - anime.author = detailsJson.studio - anime.status = parseStatus(detailsJson.status) - - var description = detailsJson.storyline + "\n" - description += "\nTipologia: ${detailsJson.type}" - description += "\nOrigine: ${detailsJson.origin}" - if (detailsJson.startDate != null) description += "\nData di inizio: ${detailsJson.startDate}" - description += "\nStato: ${detailsJson.status}" - - anime.description = description - - return anime + return SAnime.create().apply { + title = detailsJson.title + author = detailsJson.studio + status = parseStatus(detailsJson.status) + description = buildString { + append(detailsJson.storyline) + append("\n\nTipologia: ${detailsJson.type}") + append("\nOrigine: ${detailsJson.origin}") + if (detailsJson.startDate != null) append("\nData di inizio: ${detailsJson.startDate}") + append("\nStato: ${detailsJson.status}") + } + } } // ============================== Episodes ============================== - override fun episodeListRequest(anime: SAnime): Request { - return GET("$baseUrl/api/anime/${anime.url}") - } + override fun episodeListRequest(anime: SAnime): Request = GET("$baseUrl/api/anime/${anime.url}") override fun episodeListParse(response: Response): List { val animeJson = json.decodeFromString(response.body.string()) @@ -169,41 +175,36 @@ class AniPlay : ConfigurableAnimeSource, AnimeHttpSource() { ).execute() val episodesJson = json.decodeFromString>(episodesResponse.body.string()) - for (ep in episodesJson) { - val episode = SEpisode.create() - - episode.name = "Episode ${ep.episodeNumber.toIntOrNull() ?: (ep.episodeNumber.toFloatOrNull() ?: 1)} ${ep.title ?: ""}" - episode.episode_number = ep.episodeNumber.toFloatOrNull() ?: 0F - - if (ep.airingDate != null) episode.date_upload = SimpleDateFormat("yyyy-MM-dd", Locale.ITALY).parse(ep.airingDate)!!.time - - episode.url = ep.id.toString() - - episodeList.add(episode) - } + episodeList.addAll( + episodesJson.map { ep -> + SEpisode.create().apply { + name = "Episode ${ep.episodeNumber.toIntOrNull() ?: (ep.episodeNumber.toFloatOrNull() ?: 1)} ${ep.title ?: ""}" + episode_number = ep.episodeNumber.toFloatOrNull() ?: 0F + if (ep.airingDate != null) date_upload = SimpleDateFormat("yyyy-MM-dd", Locale.ITALY).parse(ep.airingDate)!!.time + url = ep.id.toString() + } + }, + ) } } else if (animeJson.episodes.isNotEmpty()) { - for (ep in animeJson.episodes) { - val episode = SEpisode.create() - episode.name = "Episode ${ep.episodeNumber.toIntOrNull() ?: (ep.episodeNumber.toFloatOrNull() ?: 1)} ${ep.title ?: ""}" - episode.episode_number = ep.episodeNumber.toFloatOrNull() ?: 0F - - if (ep.airingDate != null) episode.date_upload = SimpleDateFormat("yyyy-MM-dd", Locale.ITALY).parse(ep.airingDate)!!.time - - episode.url = ep.id.toString() - - episodeList.add(episode) - } - } else {} + episodeList.addAll( + animeJson.episodes.map { ep -> + SEpisode.create().apply { + name = "Episode ${ep.episodeNumber.toIntOrNull() ?: (ep.episodeNumber.toFloatOrNull() ?: 1)} ${ep.title ?: ""}" + episode_number = ep.episodeNumber.toFloatOrNull() ?: 0F + if (ep.airingDate != null) date_upload = SimpleDateFormat("yyyy-MM-dd", Locale.ITALY).parse(ep.airingDate)!!.time + url = ep.id.toString() + } + }, + ) + } return episodeList.sortedBy { it.episode_number }.reversed() } // ============================ Video Links ============================= - override fun videoListRequest(episode: SEpisode): Request { - return GET("$baseUrl/api/episode/${episode.url}") - } + override fun videoListRequest(episode: SEpisode): Request = GET("$baseUrl/api/episode/${episode.url}") override fun videoListParse(response: Response): List