From 39bbf479f09ca3df5ef1dcae6eb3b5c707d56e24 Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Sat, 16 Mar 2024 00:48:56 +0000 Subject: [PATCH] feat(src/en): Add slothanime (#3055) --- src/en/slothanime/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4660 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2519 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6608 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12644 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 20546 bytes .../animeextension/en/slothanime/Filters.kt | 122 +++++++++++ .../en/slothanime/SlothAnime.kt | 197 ++++++++++++++++++ 8 files changed, 326 insertions(+) create mode 100644 src/en/slothanime/build.gradle create mode 100644 src/en/slothanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/slothanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/slothanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/slothanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/slothanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/slothanime/src/eu/kanade/tachiyomi/animeextension/en/slothanime/Filters.kt create mode 100644 src/en/slothanime/src/eu/kanade/tachiyomi/animeextension/en/slothanime/SlothAnime.kt diff --git a/src/en/slothanime/build.gradle b/src/en/slothanime/build.gradle new file mode 100644 index 0000000000..43dd0c29a1 --- /dev/null +++ b/src/en/slothanime/build.gradle @@ -0,0 +1,7 @@ +ext { + extName = 'SlothAnime' + extClass = '.SlothAnime' + extVersionCode = 1 +} + +apply from: "$rootDir/common.gradle" \ No newline at end of file diff --git a/src/en/slothanime/res/mipmap-hdpi/ic_launcher.png b/src/en/slothanime/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..69936bbfc761eaac3e9caba078e164005848d606 GIT binary patch literal 4660 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 literal 0 HcmV?d00001 diff --git a/src/en/slothanime/res/mipmap-mdpi/ic_launcher.png b/src/en/slothanime/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c67325c1b4f918fd0b7387e4f48f59f75e76d343 GIT binary patch literal 2519 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
  • H8&F$mw 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, + defaultValue: String? = null, +) : AnimeFilter.Select( + name, + vals.map { it.first }.toTypedArray(), + vals.indexOfFirst { it.second == defaultValue }.takeIf { it != -1 } ?: 0, +) { + fun getValue(): String { + return vals[state].second + } +} + +open class UriMultiSelectOption(name: String, val value: String) : AnimeFilter.CheckBox(name) + +open class UriMultiSelectFilter( + name: String, + private val vals: Array>, +) : AnimeFilter.Group(name, vals.map { UriMultiSelectOption(it.first, it.second) }) { + fun getValues(): List { + return state.filter { it.state }.map { it.value } + } +} + +open class UriMultiTriSelectOption(name: String, val value: String) : AnimeFilter.TriState(name) + +open class UriMultiTriSelectFilter( + name: String, + private val vals: Array>, +) : AnimeFilter.Group(name, vals.map { UriMultiTriSelectOption(it.first, it.second) }) { + fun getIncluded(): List { + return state.filter { it.state == TriState.STATE_INCLUDE }.map { it.value } + } + + fun getExcluded(): List { + return state.filter { it.state == TriState.STATE_EXCLUDE }.map { it.value } + } +} + +class GenreFilter : UriMultiTriSelectFilter( + "Genre", + arrayOf( + Pair("Action", "action"), + Pair("Adventure", "adventure"), + Pair("Fantasy", "fantasy"), + Pair("Martial Arts", "martial_arts"), + Pair("Comedy", "comedy"), + Pair("School", "school"), + Pair("Slice of Life", "slice_of_life"), + Pair("Military", "military"), + Pair("Sci-Fi", "scifi"), + Pair("Isekai", "isekai"), + Pair("Kids", "kids"), + Pair("Iyashikei", "iyashikei"), + Pair("Horror", "horror"), + Pair("Supernatural", "supernatural"), + Pair("Avant Garde", "avant_garde"), + Pair("Demons", "demons"), + Pair("Gourmet", "gourmet"), + Pair("Music", "music"), + Pair("Drama", "drama"), + Pair("Seinen", "seinen"), + Pair("Ecchi", "ecchi"), + Pair("Harem", "harem"), + Pair("Romance", "romance"), + Pair("Magic", "magic"), + Pair("Mystery", "mystery"), + Pair("Suspense", "suspense"), + Pair("Parody", "parody"), + Pair("Psychological", "psychological"), + Pair("Super Power", "super_power"), + Pair("Vampire", "vampire"), + Pair("Shounen", "shounen"), + Pair("Space", "space"), + Pair("Mecha", "mecha"), + Pair("Sports", "sports"), + Pair("Shoujo", "shoujo"), + Pair("Girls Love", "girls_love"), + Pair("Josei", "josei"), + Pair("Mahou Shoujo", "mahou_shoujo"), + Pair("Thriller", "thriller"), + Pair("Reverse Harem", "reverse_harem"), + Pair("Boys Love", "boys_love"), + Pair("Uncategorized", "uncategorized"), + ), +) + +class TypeFilter : UriMultiSelectFilter( + "Type", + arrayOf( + Pair("ONA", "ona"), + Pair("TV", "tv"), + Pair("MOVIE", "movie"), + Pair("SPECIAL", "special"), + Pair("OVA", "ova"), + Pair("MUSIC", "music"), + ), +) + +class StatusFilter : UriPartFilter( + "Status", + arrayOf( + Pair("All", "2"), + Pair("Completed", "1"), + Pair("Releasing", "0"), + ), +) + +class SortFilter : UriPartFilter( + "Sort", + arrayOf( + Pair("Most Watched", "viewed"), + Pair("Scored", "scored"), + Pair("Newest", "created_at"), + Pair("Latest Update", "updated_at"), + ), +) diff --git a/src/en/slothanime/src/eu/kanade/tachiyomi/animeextension/en/slothanime/SlothAnime.kt b/src/en/slothanime/src/eu/kanade/tachiyomi/animeextension/en/slothanime/SlothAnime.kt new file mode 100644 index 0000000000..dff7fdeab2 --- /dev/null +++ b/src/en/slothanime/src/eu/kanade/tachiyomi/animeextension/en/slothanime/SlothAnime.kt @@ -0,0 +1,197 @@ +package eu.kanade.tachiyomi.animeextension.en.slothanime + +import android.util.Base64 +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +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 okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import javax.crypto.Cipher +import javax.crypto.spec.IvParameterSpec +import javax.crypto.spec.SecretKeySpec +import kotlin.math.floor + +class SlothAnime : ParsedAnimeHttpSource() { + + override val name = "SlothAnime" + + override val baseUrl = "https://slothanime.com" + + override val lang = "en" + + override val supportsLatest = true + + // ============================== Popular =============================== + + override fun popularAnimeRequest(page: Int): Request { + val url = if (page > 1) { + "$baseUrl/list/viewed?page=$page" + } else { + "$baseUrl/list/viewed" + } + + return GET(url, headers) + } + + override fun popularAnimeSelector(): String = ".row > div > .anime-card-md" + + override fun popularAnimeFromElement(element: Element): SAnime = SAnime.create().apply { + thumbnail_url = element.selectFirst("img")!!.imgAttr() + with(element.selectFirst("a[href~=/anime]")!!) { + title = text() + setUrlWithoutDomain(attr("abs:href")) + } + } + + override fun popularAnimeNextPageSelector(): String = ".pagination > .active ~ li:has(a)" + + // =============================== Latest =============================== + + override fun latestUpdatesRequest(page: Int): Request { + val url = if (page > 1) { + "$baseUrl/list/latest?page=$page" + } else { + "$baseUrl/list/latest" + } + + return GET(url, headers) + } + override fun latestUpdatesSelector(): String = popularAnimeSelector() + + override fun latestUpdatesFromElement(element: Element): SAnime = popularAnimeFromElement(element) + + override fun latestUpdatesNextPageSelector(): String = popularAnimeNextPageSelector() + + // =============================== Search =============================== + + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { + val genreFilter = filters.filterIsInstance().first() + val typeFilter = filters.filterIsInstance().first() + val statusFilter = filters.filterIsInstance().first() + val sortFilter = filters.filterIsInstance().first() + + val url = baseUrl.toHttpUrl().newBuilder().apply { + addPathSegment("search") + addQueryParameter("q", query) + genreFilter.getIncluded().forEachIndexed { idx, value -> + addQueryParameter("genre[$idx]", value) + } + typeFilter.getValues().forEachIndexed { idx, value -> + addQueryParameter("type[$idx]", value) + } + addQueryParameter("status", statusFilter.getValue()) + addQueryParameter("sort", sortFilter.getValue()) + genreFilter.getExcluded().forEachIndexed { idx, value -> + addQueryParameter("ignore_genre[$idx]", value) + } + + if (page > 1) { + addQueryParameter("page", page.toString()) + } + }.build() + + return GET(url, headers) + } + + override fun searchAnimeSelector(): String = popularAnimeSelector() + + override fun searchAnimeFromElement(element: Element): SAnime = popularAnimeFromElement(element) + + override fun searchAnimeNextPageSelector(): String = popularAnimeNextPageSelector() + + // ============================== Filters =============================== + + override fun getFilterList(): AnimeFilterList = AnimeFilterList( + GenreFilter(), + TypeFilter(), + StatusFilter(), + SortFilter(), + ) + + // =========================== Anime Details ============================ + + override fun animeDetailsParse(document: Document): SAnime = SAnime.create().apply { + title = document.selectFirst(".single-title > h5")!!.text() + thumbnail_url = document.selectFirst(".single-cover > img")!!.imgAttr() + description = document.selectFirst(".single-detail:has(span:contains(Description)) .more-content")?.text() + genre = document.select(".single-tag > a.tag").joinToString { it.text() } + author = document.select(".single-detail:has(span:contains(Studios)) .value a").joinToString { it.text() } + } + + // ============================== Episodes ============================== + + override fun episodeListSelector() = ".list-episodes-container > a[class~=episode]" + + override fun episodeFromElement(element: Element): SEpisode = SEpisode.create().apply { + setUrlWithoutDomain(element.attr("abs:href")) + name = element.text() + .replace(Regex("""^EP """), "Episode ") + .replace(Regex("""^\d+""")) { m -> "Episode ${m.value}" } + } + + // ============================ Video Links ============================= + + fun encryptAES(input: String, key: ByteArray, iv: ByteArray): String { + val cipher = Cipher.getInstance("AES/CBC/NoPadding") + val secretKey = SecretKeySpec(key, "AES") + val ivParameterSpec = IvParameterSpec(iv) + + cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec) + val paddedInput = zeroPad(input) + val encryptedBytes = cipher.doFinal(paddedInput.toByteArray(Charsets.UTF_8)) + return Base64.encodeToString(encryptedBytes, Base64.NO_WRAP) + } + + fun zeroPad(input: String): String { + val blockSize = 16 + val padLength = blockSize - input.length % blockSize + return input.padEnd(input.length + padLength, '\u0000') + } + + override suspend fun getVideoList(episode: SEpisode): List