From 3a145058eba41351a89b9275203fcdd02e31bc8a Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Tue, 5 Apr 2022 20:25:11 -0300 Subject: [PATCH] New source: BetterAnime (#463) * New source: BetterAnime * BetterAnime: update serialization version --- src/pt/betteranime/AndroidManifest.xml | 2 + src/pt/betteranime/build.gradle | 17 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5344 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3482 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7773 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 14676 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15441 bytes .../pt/betteranime/BAFilters.kt | 130 +++++++ .../animeextension/pt/betteranime/BAUtils.kt | 12 + .../pt/betteranime/BetterAnime.kt | 319 ++++++++++++++++++ .../pt/betteranime/dto/BetterAnimeDto.kt | 51 +++ .../extractors/BetterAnimeExtractor.kt | 69 ++++ 12 files changed, 600 insertions(+) create mode 100644 src/pt/betteranime/AndroidManifest.xml create mode 100644 src/pt/betteranime/build.gradle create mode 100644 src/pt/betteranime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/betteranime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/betteranime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/betteranime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/betteranime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BAFilters.kt create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BAUtils.kt create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BetterAnime.kt create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/dto/BetterAnimeDto.kt create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/extractors/BetterAnimeExtractor.kt diff --git a/src/pt/betteranime/AndroidManifest.xml b/src/pt/betteranime/AndroidManifest.xml new file mode 100644 index 000000000..94339ee7a --- /dev/null +++ b/src/pt/betteranime/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/src/pt/betteranime/build.gradle b/src/pt/betteranime/build.gradle new file mode 100644 index 000000000..d0952c558 --- /dev/null +++ b/src/pt/betteranime/build.gradle @@ -0,0 +1,17 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' + +ext { + extName = 'Better Anime' + pkgNameSuffix = 'pt.betteranime' + extClass = '.BetterAnime' + extVersionCode = 1 + libVersion = '12' +} + +dependencies { + compileOnly 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2' +} + +apply from: "$rootDir/common.gradle" diff --git a/src/pt/betteranime/res/mipmap-hdpi/ic_launcher.png b/src/pt/betteranime/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4f2f2aecc6d60d15470fb2c7a8961288b7859ebe GIT binary patch literal 5344 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 O0f3U6DzXw``u2YkK>rN@ literal 0 HcmV?d00001 diff --git a/src/pt/betteranime/res/mipmap-mdpi/ic_launcher.png b/src/pt/betteranime/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9160b10a47a21a434be7e7405fad24952c46c47f GIT binary patch literal 3482 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 literal 0 HcmV?d00001 diff --git a/src/pt/betteranime/res/mipmap-xhdpi/ic_launcher.png b/src/pt/betteranime/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..78c2ef2a8589f08a91f66f336da3ff6ee6ee5f18 GIT binary patch literal 7773 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 literal 0 HcmV?d00001 diff --git a/src/pt/betteranime/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/betteranime/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..474fdb69a2b7dfcc68e32b0aca4c942c4a55170a GIT binary patch literal 15441 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 N$;&Fslu8-<{|`9YY_> + ) : AnimeFilter.Select( + displayName, + vals.map { it.first }.toTypedArray() + ) { + + fun toQueryPart() = vals[state].second + } + + open class CheckBoxFilterList(name: String, values: List) : AnimeFilter.Group(name, values) + private class CheckBoxVal(name: String, state: Boolean = false) : AnimeFilter.CheckBox(name, state) + + private inline fun AnimeFilterList.getFirst(): R { + return this.filterIsInstance().first() + } + + private inline fun AnimeFilterList.asQueryPart(): String { + return this.filterIsInstance().joinToString("") { + (it as QueryPartFilter).toQueryPart() + } + } + + class LanguageFilter : QueryPartFilter("Idioma", BAFiltersData.languages) + class YearFilter : QueryPartFilter("Ano", BAFiltersData.years) + + class GenresFilter : CheckBoxFilterList( + "Gêneros", + BAFiltersData.genres.map { CheckBoxVal(it.first, false) } + ) + + val filterList = AnimeFilterList( + LanguageFilter(), + YearFilter(), + GenresFilter() + ) + + data class FilterSearchParams( + val language: String = "", + val year: String = "", + val genres: List = emptyList() + ) + + internal fun getSearchParameters(filters: AnimeFilterList): FilterSearchParams { + val genres = listOf("") + filters.getFirst().state + .mapNotNull { genre -> + if (genre.state) { + BAFiltersData.genres.find { it.first == genre.name }!!.second + } else { null } + }.toList() + + return FilterSearchParams( + filters.asQueryPart(), + filters.asQueryPart(), + genres + ) + } + + private object BAFiltersData { + val every = Pair("Qualquer um", "") + + val languages = arrayOf( + every, + Pair("Legendado", "legendado"), + Pair("Dublado", "dublado") + ) + + val years = arrayOf(every) + (2022 downTo 1976).map { + Pair(it.toString(), it.toString()) + }.toTypedArray() + + val genres = arrayOf( + Pair("Ação", "acao"), + Pair("Artes Marciais", "artes-marciais"), + Pair("Aventura", "aventura"), + Pair("Comédia", "comedia"), + Pair("Cotidiano", "cotidiano"), + Pair("Demência", "demencia"), + Pair("Demônios", "demonios"), + Pair("Drama", "drama"), + Pair("Ecchi", "ecchi"), + Pair("Escolar", "escolar"), + Pair("Espacial", "espacial"), + Pair("Esportes", "esportes"), + Pair("Fantasia", "fantasia"), + Pair("Ficção Científica", "ficcao-cientifica"), + Pair("Game", "game"), + Pair("Harém", "harem"), + Pair("Histórico", "historico"), + Pair("Horror", "horror"), + Pair("Infantil", "infantil"), + Pair("Josei", "josei"), + Pair("Magia", "magia"), + Pair("Mecha", "mecha"), + Pair("Militar", "militar"), + Pair("Mistério", "misterio"), + Pair("Musical", "musical"), + Pair("Paródia", "parodia"), + Pair("Policial", "policial"), + Pair("Psicológico", "psicologico"), + Pair("Romance", "romance"), + Pair("Samurai", "samurai"), + Pair("Sci-Fi", "sci-fi"), + Pair("Seinen", "seinen"), + Pair("Shoujo-Ai", "shoujo-ai"), + Pair("Shoujo", "shoujo"), + Pair("Shounen-Ai", "shounen-ai"), + Pair("Shounen", "shounen"), + Pair("Slice of Life", "slice-of-life"), + Pair("Sobrenatural", "sobrenatural"), + Pair("Super Poderes", "super-poderes"), + Pair("Suspense", "suspense"), + Pair("Terror", "terror"), + Pair("Thriller", "thriller"), + Pair("Tragédia", "tragedia"), + Pair("Vampiros", "vampiros"), + Pair("Vida Escolar", "vida-escolar"), + Pair("Yaoi", "yaoi"), + Pair("Yuri", "yuri"), + ) + } +} diff --git a/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BAUtils.kt b/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BAUtils.kt new file mode 100644 index 000000000..bb0d3b200 --- /dev/null +++ b/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BAUtils.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.animeextension.pt.betteranime + +// Terrible way to reinvent the wheel, i just didnt wanted to use apache commons. +fun String.unescape(): String { + return UNICODE_REGEX.replace(this) { + it.groupValues[1] + .toInt(16) + .toChar() + .toString() + }.replace("\\", "") +} +private val UNICODE_REGEX = "\\\\u(\\d+)".toRegex() diff --git a/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BetterAnime.kt b/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BetterAnime.kt new file mode 100644 index 000000000..1eb79671d --- /dev/null +++ b/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BetterAnime.kt @@ -0,0 +1,319 @@ +package eu.kanade.tachiyomi.animeextension.pt.betteranime + +import android.app.Application +import android.content.SharedPreferences +import android.util.Log +import androidx.preference.ListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animeextension.pt.betteranime.dto.LivewireResponseDto +import eu.kanade.tachiyomi.animeextension.pt.betteranime.dto.PayloadData +import eu.kanade.tachiyomi.animeextension.pt.betteranime.dto.PayloadItem +import eu.kanade.tachiyomi.animeextension.pt.betteranime.extractors.BetterAnimeExtractor +import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.SEpisode +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonPrimitive +import okhttp3.Headers +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.Response +import org.jsoup.Jsoup +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import rx.Observable +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import java.lang.Exception + +class BetterAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { + + override val name = "Better Anime" + + override val baseUrl = "https://betteranime.net" + + override val lang = "pt-BR" + + override val supportsLatest = true + + override val client: OkHttpClient = network.cloudflareClient + + private val json = Json { + ignoreUnknownKeys = true + } + + private val preferences: SharedPreferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + override fun headersBuilder(): Headers.Builder = Headers.Builder() + .add("Referer", baseUrl) + .add("Accept-Language", ACCEPT_LANGUAGE) + + // ============================== Popular =============================== + private fun nextPageSelector(): String = "ul.pagination li.page-item:contains(›)" + override fun popularAnimeNextPageSelector() = throw Exception("not used") + override fun popularAnimeSelector(): String = "div.list-animes article" + + override fun popularAnimeFromElement(element: Element): SAnime { + val anime = SAnime.create() + val img = element.selectFirst("img")!! + val url = element.selectFirst("a")?.attr("href")!! + anime.setUrlWithoutDomain(url) + anime.title = element.selectFirst("h3")?.text()!! + anime.thumbnail_url = "https:" + img.attr("src") + return anime + } + + // The site doesn't have a popular anime tab, so we use the latest anime page instead. + override fun popularAnimeRequest(page: Int): Request = + GET("$baseUrl/ultimosAdicionados?page=$page") + + override fun popularAnimeParse(response: Response): AnimesPage { + val document = response.asJsoup() + val animes = document.select(popularAnimeSelector()).map { element -> + popularAnimeFromElement(element) + } + val hasNextPage = hasNextPage(document) + return AnimesPage(animes, hasNextPage) + } + + // ============================== Episodes ============================== + override fun episodeListSelector(): String = "ul#episodesList > li.list-group-item-action > a" + + override fun episodeListParse(response: Response): List { + val document = response.asJsoup() + val episodes = document.select(episodeListSelector()).map { element -> + episodeFromElement(element) + } + return episodes.reversed() + } + + override fun episodeFromElement(element: Element): SEpisode { + val episode = SEpisode.create() + val episodeName = element.text() + episode.setUrlWithoutDomain(element.attr("href")) + episode.name = episodeName + episode.episode_number = try { + episodeName.substringAfterLast(" ").toFloat() + } catch (e: NumberFormatException) { 0F } + return episode + } + + // ============================ Video Links ============================= + override fun videoListParse(response: Response): List