From 6efbfc5428a24585b49c9e3370e725763f86a518 Mon Sep 17 00:00:00 2001 From: Quriz <75581292+Quriz@users.noreply.github.com> Date: Mon, 2 May 2022 20:28:18 +0000 Subject: [PATCH] New source: FireAnime (#532) --- src/de/fireanime/AndroidManifest.xml | 2 + src/de/fireanime/build.gradle | 17 + .../fireanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6514 bytes .../fireanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3536 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 10481 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 18992 bytes .../de/fireanime/FAConstants.kt | 21 ++ .../animeextension/de/fireanime/FireAnime.kt | 309 ++++++++++++++++++ .../de/fireanime/dto/FireAnimeDto.kt | 161 +++++++++ .../de/fireanime/extractors/DoodExtractor.kt | 40 +++ .../fireanime/extractors/FireCdnExtractor.kt | 29 ++ 11 files changed, 579 insertions(+) create mode 100644 src/de/fireanime/AndroidManifest.xml create mode 100644 src/de/fireanime/build.gradle create mode 100644 src/de/fireanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/fireanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/fireanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/fireanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/fireanime/src/eu/kanade/tachiyomi/animeextension/de/fireanime/FAConstants.kt create mode 100644 src/de/fireanime/src/eu/kanade/tachiyomi/animeextension/de/fireanime/FireAnime.kt create mode 100644 src/de/fireanime/src/eu/kanade/tachiyomi/animeextension/de/fireanime/dto/FireAnimeDto.kt create mode 100644 src/de/fireanime/src/eu/kanade/tachiyomi/animeextension/de/fireanime/extractors/DoodExtractor.kt create mode 100644 src/de/fireanime/src/eu/kanade/tachiyomi/animeextension/de/fireanime/extractors/FireCdnExtractor.kt diff --git a/src/de/fireanime/AndroidManifest.xml b/src/de/fireanime/AndroidManifest.xml new file mode 100644 index 000000000..acb4de356 --- /dev/null +++ b/src/de/fireanime/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/de/fireanime/build.gradle b/src/de/fireanime/build.gradle new file mode 100644 index 000000000..f06afd22f --- /dev/null +++ b/src/de/fireanime/build.gradle @@ -0,0 +1,17 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' + +ext { + extName = 'FireAnime' + pkgNameSuffix = 'de.fireanime' + extClass = '.FireAnime' + extVersionCode = 1 + libVersion = '12' + containsNsfw = true +} +dependencies { + implementation project(':lib-ratelimit') +} + +apply from: "$rootDir/common.gradle" diff --git a/src/de/fireanime/res/mipmap-hdpi/ic_launcher.png b/src/de/fireanime/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..93a6dac6005397acefa18748b1d8c34dc639db55 GIT binary patch literal 6514 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�HmGCz}5WhKuU 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 literal 0 HcmV?d00001 diff --git a/src/de/fireanime/res/mipmap-xxhdpi/ic_launcher.png b/src/de/fireanime/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b2afec9a94ed495436a92071f63ea6292e183f39 GIT binary patch literal 18992 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.getSharedPreferences("source_$id", 0x0000) + } + + // ===== POPULAR ANIME ===== + override fun popularAnimeRequest(page: Int): Request = POST( + "$baseUrl/api/public/airing", + body = FormBody.Builder() + .add("langs[0]", "de-DE") + .build() + ) + + override fun popularAnimeParse(response: Response): AnimesPage = parseAnimeListJson(response, true) + + // ===== LATEST ANIME ===== + override fun latestUpdatesRequest(page: Int): Request = POST( + "$baseUrl/api/public/new", + body = FormBody.Builder() + .add("langs[0]", "de-DE") + .add("limit", "30") + .add("offset", (page - 1).toString()) + .build() + ) + + override fun latestUpdatesParse(response: Response): AnimesPage = parseAnimeListJson(response) + + // ===== ANIME SEARCH ===== + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request = POST( + "$baseUrl/api/public/search", + body = FormBody.Builder() + .add("q", query) + .build() + ) + + override fun searchAnimeParse(response: Response): AnimesPage = parseAnimeListJson(response, true) + + // ===== ANIME LIST PARSING ===== + private fun parseAnimeListJson(response: Response, singlePage: Boolean = false): AnimesPage { + val animes = json.decodeFromString(ListSerializer(AnimeBaseDto.serializer()), response.body!!.string()) + .distinctBy { it.url } + return AnimesPage(animes.map { createAnime(it) }, animes.count() > 0 && !singlePage) + } + + // ===== ANIME DETAILS ===== + override fun animeDetailsRequest(anime: SAnime): Request = POST( + "$baseUrl/api/public/anime", + body = FormBody.Builder() + .add("url", anime.url) + .build() + ) + + override fun fetchAnimeDetails(anime: SAnime): Observable { + return client.newCall(animeDetailsRequest(anime)) + .asObservableSuccess() + .map { response -> + animeDetailsParse(response, anime).apply { initialized = true } + } + } + + override fun animeDetailsParse(response: Response): SAnime = throw UnsupportedOperationException("Not used") + + private fun animeDetailsParse(response: Response, baseAnime: SAnime): SAnime { + val anime = json.decodeFromString(AnimeDetailsWrapperDto.serializer(), response.body!!.string()).response + return createAnime(baseAnime, anime) + } + + // ===== CREATE ANIME ===== + private fun createAnime(anime: AnimeBaseDto): SAnime { + return SAnime.create().apply { + title = anime.title + url = anime.url + thumbnail_url = "$baseUrl/api/get/img/" + anime.imgPoster + "-normal-poster.webp" + status = SAnime.UNKNOWN + } + } + + private fun createAnime(baseAnime: SAnime, details: AnimeDetailsDto): SAnime { + return baseAnime.apply { + description = details.description + genre = "FSK ${details.fsk}, " + (if (details.votingDouble != null) "%.1f/5 ⭐, ".format(details.votingDouble) else "") + details.genres.joinToString(", ") { it.genre } + } + } + + // ===== EPISODE ===== + override fun episodeListRequest(anime: SAnime): Request = POST( + "$baseUrl/api/public/episodes", + body = FormBody.Builder() + .add("url", anime.url) + .build() + ) + + override fun fetchEpisodeList(anime: SAnime): Observable> { + return if (anime.status != SAnime.LICENSED) { + client.newCall(episodeListRequest(anime)) + .asObservableSuccess() + .map { response -> + episodeListParse(response, anime.url) + } + } else { + Observable.error(Exception("Licensed - No episodes to show")) + } + } + + override fun episodeListParse(response: Response): List = throw UnsupportedOperationException("Not used") + + private fun episodeListParse(response: Response, animeUrl: String): List { + val episodes = json.decodeFromString(EpisodeListingWrapperDto.serializer(), response.body!!.string()).response + return episodes.mapIndexed { i, ep -> + SEpisode.create().apply { + episode_number = ep.episode.toFloat() + name = if (ep.title.startsWith("Episode")) ep.title else "Episode ${i + 1}: ${ep.title}" + url = animeUrl + (-1..i).joinToString("") { " " } // Add some spaces so that all episodes are shown + date_upload = System.currentTimeMillis() + } + }.reversed() + } + + // ===== VIDEO SOURCES ===== + override fun videoListRequest(episode: SEpisode): Request = POST( + "$baseUrl/api/public/episode", + body = FormBody.Builder() + .add("url", episode.url.trim()) + .add("ep", "%.0f".format(episode.episode_number)) + .build() + ) + + override fun videoListParse(response: Response): List