From a59119a6c7cde267ebf777dd740f11d558782c4d Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Mon, 6 May 2024 09:10:29 +0000 Subject: [PATCH 1/4] feat(all/jellyfin): Add support for collections (#3217) --- src/all/jellyfin/build.gradle | 2 +- .../animeextension/all/jellyfin/Jellyfin.kt | 119 ++++++++++++++++-- .../all/jellyfin/JellyfinDto.kt | 14 ++- 3 files changed, 120 insertions(+), 15 deletions(-) diff --git a/src/all/jellyfin/build.gradle b/src/all/jellyfin/build.gradle index c2c343eff8..17f12e14f4 100644 --- a/src/all/jellyfin/build.gradle +++ b/src/all/jellyfin/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Jellyfin' extClass = '.JellyfinFactory' - extVersionCode = 13 + extVersionCode = 14 } apply from: "$rootDir/common.gradle" diff --git a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt index 658da36a2b..8bfeb1b9f0 100644 --- a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt +++ b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt @@ -142,7 +142,7 @@ class Jellyfin(private val suffix: String) : ConfigurableAnimeSource, AnimeHttpS addQueryParameter("Recursive", "true") addQueryParameter("SortBy", "SortName") addQueryParameter("SortOrder", "Ascending") - addQueryParameter("IncludeItemTypes", "Movie,Season") + addQueryParameter("IncludeItemTypes", "Movie,Season,BoxSet") addQueryParameter("ImageTypeLimit", "1") addQueryParameter("ParentId", parentId) addQueryParameter("EnableImageTypes", "Primary") @@ -152,9 +152,22 @@ class Jellyfin(private val suffix: String) : ConfigurableAnimeSource, AnimeHttpS } override fun popularAnimeParse(response: Response): AnimesPage { + val splitCollections = preferences.getSplitCol val page = response.request.url.queryParameter("StartIndex")!!.toInt() / SEASONS_LIMIT + 1 val data = response.parseAs() - val animeList = data.items.map { it.toSAnime(baseUrl, userId!!, apiKey!!) } + val animeList = data.items.flatMap { + if (it.type == "BoxSet" && splitCollections) { + val url = popularAnimeRequest(page).url.newBuilder().apply { + setQueryParameter("ParentId", it.id) + }.build() + + popularAnimeParse( + client.newCall(GET(url)).execute(), + ).animes + } else { + listOf(it.toSAnime(baseUrl, userId!!, apiKey!!)) + } + } return AnimesPage(animeList, SEASONS_LIMIT * page < data.itemCount) } @@ -258,6 +271,26 @@ class Jellyfin(private val suffix: String) : ConfigurableAnimeSource, AnimeHttpS }.build() } else if (fragment.startsWith("movie")) { httpUrl.newBuilder().fragment(null).build() + } else if (fragment.startsWith("boxSet")) { + val itemId = httpUrl.pathSegments[3] + httpUrl.newBuilder().apply { + removePathSegment(3) + addQueryParameter("Recursive", "true") + addQueryParameter("SortBy", "SortName") + addQueryParameter("SortOrder", "Ascending") + addQueryParameter("IncludeItemTypes", "Movie,Season,BoxSet,Series") + addQueryParameter("ParentId", itemId) + }.build() + } else if (fragment.startsWith("series")) { + val itemId = httpUrl.pathSegments[3] + httpUrl.newBuilder().apply { + encodedPath("/") + encodedQuery(null) + addPathSegment("Shows") + addPathSegment(itemId) + addPathSegment("Episodes") + addQueryParameter("api_key", apiKey) + }.build() } else { httpUrl } @@ -266,19 +299,48 @@ class Jellyfin(private val suffix: String) : ConfigurableAnimeSource, AnimeHttpS } override fun episodeListParse(response: Response): List { - val epDetails = preferences.getEpDetails + val httpUrl = response.request.url + val episodeList = if (httpUrl.fragment == "boxSet") { + val data = response.parseAs() + val animeList = data.items.map { + it.toSAnime(baseUrl, userId!!, apiKey!!) + }.sortedByDescending { it.title } + animeList.flatMap { + client.newCall(episodeListRequest(it)) + .execute() + .let { res -> + episodeListParse(res, "${it.title} - ") + } + } + } else { + episodeListParse(response, "") + } - val episodeList = if (response.request.url.toString().startsWith("$baseUrl/Users/")) { + return if (preferences.sortEp) { + episodeList.sortedByDescending { it.date_upload } + } else { + episodeList + } + } + + private fun episodeListParse(response: Response, prefix: String): List { + val httpUrl = response.request.url + val epDetails = preferences.getEpDetails + return if (response.request.url.toString().startsWith("$baseUrl/Users/")) { val data = response.parseAs() - listOf(data.toSEpisode(baseUrl, userId!!, apiKey!!, epDetails, EpisodeType.MOVIE)) + listOf(data.toSEpisode(baseUrl, userId!!, apiKey!!, epDetails, EpisodeType.MOVIE, prefix)) + } else if (httpUrl.fragment == "series") { + val data = response.parseAs() + data.items.map { + val name = prefix + (it.seasonName?.let { "$it - " } ?: "") + it.toSEpisode(baseUrl, userId!!, apiKey!!, epDetails, EpisodeType.EPISODE, name) + } } else { val data = response.parseAs() data.items.map { - it.toSEpisode(baseUrl, userId!!, apiKey!!, epDetails, EpisodeType.EPISODE) + it.toSEpisode(baseUrl, userId!!, apiKey!!, epDetails, EpisodeType.EPISODE, prefix) } - } - - return episodeList.reversed() + }.reversed() } enum class EpisodeType { @@ -441,6 +503,12 @@ class Jellyfin(private val suffix: String) : ConfigurableAnimeSource, AnimeHttpS private const val PREF_TRUST_CERT_KEY = "preferred_trust_all_certs" private const val PREF_TRUST_CERT_DEFAULT = false + + private const val PREF_SPLIT_COLLECTIONS_KEY = "preferred_split_col" + private const val PREF_SPLIT_COLLECTIONS_DEFAULT = false + + private const val PREF_SORT_EPISODES_KEY = "preferred_sort_ep" + private const val PREF_SORT_EPISODES_DEFAULT = false } private fun getCustomLabel(): String = @@ -592,6 +660,30 @@ class Jellyfin(private val suffix: String) : ConfigurableAnimeSource, AnimeHttpS preferences.edit().putBoolean(key, new).commit() } }.also(screen::addPreference) + + SwitchPreferenceCompat(screen.context).apply { + key = PREF_SPLIT_COLLECTIONS_KEY + title = "Split collections" + summary = "Split each item in a collection into its own entry" + setDefaultValue(PREF_SPLIT_COLLECTIONS_DEFAULT) + + setOnPreferenceChangeListener { _, newValue -> + val new = newValue as Boolean + preferences.edit().putBoolean(key, new).commit() + } + }.also(screen::addPreference) + + SwitchPreferenceCompat(screen.context).apply { + key = PREF_SORT_EPISODES_KEY + title = "Sort episodes by release date" + summary = "Useful for collections, otherwise items in a collection are grouped by name." + setDefaultValue(PREF_SORT_EPISODES_DEFAULT) + + setOnPreferenceChangeListener { _, newValue -> + val new = newValue as Boolean + preferences.edit().putBoolean(key, new).commit() + } + }.also(screen::addPreference) } private val SharedPreferences.getApiKey @@ -600,9 +692,6 @@ class Jellyfin(private val suffix: String) : ConfigurableAnimeSource, AnimeHttpS private val SharedPreferences.getUserId get() = getString(USERID_KEY, null) - private val SharedPreferences.getHostUrl - get() = getString(HOSTURL_KEY, HOSTURL_DEFAULT)!! - private val SharedPreferences.getUserName get() = getString(USERNAME_KEY, USERNAME_DEFAULT)!! @@ -627,6 +716,12 @@ class Jellyfin(private val suffix: String) : ConfigurableAnimeSource, AnimeHttpS private val SharedPreferences.getTrustCert get() = getBoolean(PREF_TRUST_CERT_KEY, PREF_TRUST_CERT_DEFAULT) + private val SharedPreferences.getSplitCol + get() = getBoolean(PREF_SPLIT_COLLECTIONS_KEY, PREF_SPLIT_COLLECTIONS_DEFAULT) + + private val SharedPreferences.sortEp + get() = getBoolean(PREF_SORT_EPISODES_KEY, PREF_SORT_EPISODES_DEFAULT) + private abstract class MediaLibPreference(context: Context) : ListPreference(context) { abstract fun reload() } diff --git a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JellyfinDto.kt b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JellyfinDto.kt index 71fa498b97..1536107c01 100644 --- a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JellyfinDto.kt +++ b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JellyfinDto.kt @@ -44,6 +44,7 @@ data class ItemDto( // Only for series, not season @SerialName("Status") val seriesStatus: String? = null, + @SerialName("SeasonName") val seasonName: String? = null, // Episode @SerialName("PremiereDate") val premiereData: String? = null, @@ -93,6 +94,14 @@ data class ItemDto( httpUrl.fragment("movie") title = name } + "BoxSet" -> { + httpUrl.fragment("boxSet") + title = name + } + "Series" -> { + httpUrl.fragment("series") + title = name + } } url = httpUrl.build().toString() @@ -122,15 +131,16 @@ data class ItemDto( apiKey: String, epDetails: Set, epType: EpisodeType, + prefix: String, ): SEpisode = SEpisode.create().apply { when (epType) { EpisodeType.MOVIE -> { episode_number = 1F - name = "Movie" + name = "${prefix}Movie" } EpisodeType.EPISODE -> { episode_number = indexNumber?.toFloat() ?: 1F - name = "Ep. $indexNumber - ${this@ItemDto.name}" + name = "${prefix}Ep. $indexNumber - ${this@ItemDto.name}" } } From 653a8c63be7ce723bb1e0b21e6a8776ec4dfafdb Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Mon, 6 May 2024 09:10:55 +0000 Subject: [PATCH 2/4] feat(en/edytjedhgmdhm): Update url(s) (#3218) --- src/en/edytjedhgmdhm/build.gradle | 2 +- .../en/edytjedhgmdhm/Edytjedhgmdhm.kt | 71 ++++++++++++++++++- 2 files changed, 69 insertions(+), 4 deletions(-) diff --git a/src/en/edytjedhgmdhm/build.gradle b/src/en/edytjedhgmdhm/build.gradle index 5adc2b53e7..5896ad4cbf 100644 --- a/src/en/edytjedhgmdhm/build.gradle +++ b/src/en/edytjedhgmdhm/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'edytjedhgmdhm' extClass = '.Edytjedhgmdhm' - extVersionCode = 4 + extVersionCode = 5 } apply from: "$rootDir/common.gradle" diff --git a/src/en/edytjedhgmdhm/src/eu/kanade/tachiyomi/animeextension/en/edytjedhgmdhm/Edytjedhgmdhm.kt b/src/en/edytjedhgmdhm/src/eu/kanade/tachiyomi/animeextension/en/edytjedhgmdhm/Edytjedhgmdhm.kt index dfe6e588b2..7e1c720acd 100644 --- a/src/en/edytjedhgmdhm/src/eu/kanade/tachiyomi/animeextension/en/edytjedhgmdhm/Edytjedhgmdhm.kt +++ b/src/en/edytjedhgmdhm/src/eu/kanade/tachiyomi/animeextension/en/edytjedhgmdhm/Edytjedhgmdhm.kt @@ -1,5 +1,10 @@ package eu.kanade.tachiyomi.animeextension.en.edytjedhgmdhm +import android.app.Application +import android.content.SharedPreferences +import androidx.preference.ListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilterList import eu.kanade.tachiyomi.animesource.model.AnimesPage @@ -14,14 +19,16 @@ import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get import java.net.URI import java.net.URISyntaxException -class Edytjedhgmdhm : ParsedAnimeHttpSource() { +class Edytjedhgmdhm : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override val name = "edytjedhgmdhm" - override val baseUrl = "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev" + override val baseUrl by lazy { getBaseUrlPref() } private val videoFormats = arrayOf(".mkv", ".mp4", ".avi") @@ -29,8 +36,24 @@ class Edytjedhgmdhm : ParsedAnimeHttpSource() { override val supportsLatest = false + private val preferences: SharedPreferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + // ============================ Initializers ============================ + private val asiandramaList by lazy { + client.newCall(GET("$baseUrl/asiandrama/")).execute() + .asJsoup() + .select(LINK_SELECTOR) + } + + private val kdramaList by lazy { + client.newCall(GET("$baseUrl/kdrama/")).execute() + .asJsoup() + .select(LINK_SELECTOR) + } + private val miscList by lazy { client.newCall(GET("$baseUrl/misc/")).execute() .asJsoup() @@ -104,6 +127,8 @@ class Edytjedhgmdhm : ParsedAnimeHttpSource() { "/tvs/" -> tvsList "/movies/" -> moviesList "/misc/" -> miscList + "/kdrama/" -> kdramaList + "/asiandrama/" -> asiandramaList else -> emptyList() } @@ -149,7 +174,9 @@ class Edytjedhgmdhm : ParsedAnimeHttpSource() { arrayOf( Pair("TVs", "/tvs/"), Pair("Movies", "/movies/"), - Pair("misc", "/misc/"), + Pair("Misc", "/misc/"), + Pair("K-drama", "/kdrama/"), + Pair("Asian drama", "/asiandrama/"), ), ) @@ -278,5 +305,43 @@ class Edytjedhgmdhm : ParsedAnimeHttpSource() { companion object { private const val CHUNKED_SIZE = 30 private const val LINK_SELECTOR = "table tbody a:not([href=..])" + + private const val PREF_DOMAIN_KEY = "preferred_domain" + private const val PREF_DOMAIN_TITLE = "Preferred domain (requires app restart)" + private val PREF_DOMAIN_ENTRY_VALUES = arrayOf( + "https://edytjedhgmdhm.abfhaqrhbnf.workers.dev", + "https://odd-bird-1319.zwuhygoaqe.workers.dev", + "https://hello-world-flat-violet-6291.wstnjewyeaykmdg.workers.dev", + "https://worker-mute-fog-66ae.ihrqljobdq.workers.dev", + "https://worker-square-heart-580a.uieafpvtgl.workers.dev", + "https://worker-little-bread-2c2f.wqwmiuvxws.workers.dev", + ) + private val PREF_DOMAIN_ENTRIES = PREF_DOMAIN_ENTRY_VALUES.map { + it.substringAfter("//").substringBefore(".") + }.toTypedArray() + private val PREF_DOMAIN_DEFAULT = PREF_DOMAIN_ENTRY_VALUES.first() + } + + private fun getBaseUrlPref(): String = + preferences.getString(PREF_DOMAIN_KEY, PREF_DOMAIN_DEFAULT)!! + + // ============================== Settings ============================== + + override fun setupPreferenceScreen(screen: PreferenceScreen) { + ListPreference(screen.context).apply { + key = PREF_DOMAIN_KEY + title = PREF_DOMAIN_TITLE + entries = PREF_DOMAIN_ENTRIES + entryValues = PREF_DOMAIN_ENTRY_VALUES + setDefaultValue(PREF_DOMAIN_DEFAULT) + summary = "%s" + + setOnPreferenceChangeListener { _, newValue -> + val selected = newValue as String + val index = findIndexOfValue(selected) + val entry = entryValues[index] as String + preferences.edit().putString(key, entry).commit() + } + }.also(screen::addPreference) } } From 470f6f7ef752e55bb6da3184ec7b504434e212b8 Mon Sep 17 00:00:00 2001 From: kaoru2 <120291360+kaoru2@users.noreply.github.com> Date: Fri, 10 May 2024 05:50:47 +0800 Subject: [PATCH 3/4] chore: Add 2024 to English Extensions (#3221) Co-authored-by: Secozzi <49240133+Secozzi@users.noreply.github.com> --- lib-multisrc/dopeflix/build.gradle.kts | 2 +- .../eu/kanade/tachiyomi/multisrc/dopeflix/DopeFlixFilters.kt | 1 + lib-multisrc/zorotheme/build.gradle.kts | 2 +- .../eu/kanade/tachiyomi/multisrc/zorotheme/ZoroThemeFilters.kt | 2 +- src/all/animeworldindia/build.gradle | 2 +- .../all/animeworldindia/AnimeWorldIndiaFilters.kt | 1 + src/en/fmovies/build.gradle | 2 +- .../tachiyomi/animeextension/en/fmovies/FMoviesFilters.kt | 1 + src/en/gogoanime/build.gradle | 2 +- .../tachiyomi/animeextension/en/gogoanime/GogoAnimeFilters.kt | 3 +++ src/en/kawaiifu/build.gradle | 2 +- .../tachiyomi/animeextension/en/kawaiifu/KawaiifuFilters.kt | 3 +++ src/en/kickassanime/build.gradle | 2 +- .../animeextension/en/kickassanime/KickAssAnimeFilters.kt | 1 + src/en/nineanime/build.gradle | 2 +- .../tachiyomi/animeextension/en/nineanime/AniwaveFilters.kt | 1 + src/en/uniquestream/build.gradle | 2 +- .../tachiyomi/animeextension/en/uniquestream/UniqueStream.kt | 1 + src/es/animeonlineninja/build.gradle | 2 +- .../es/animeonlineninja/AnimeOnlineNinjaFilters.kt | 2 +- src/es/latanime/build.gradle | 2 +- .../eu/kanade/tachiyomi/animeextension/es/latanime/Latanime.kt | 1 + src/fr/jetanime/build.gradle | 2 +- .../eu/kanade/tachiyomi/animeextension/fr/jetanime/JetAnime.kt | 1 + src/fr/voircartoon/build.gradle | 2 +- .../animeextension/fr/voircartoon/VoirCartoonFilters.kt | 1 + src/hi/yomovies/build.gradle | 2 +- .../eu/kanade/tachiyomi/animeextension/hi/yomovies/YoMovies.kt | 2 ++ src/id/minioppai/build.gradle | 2 +- .../tachiyomi/animeextension/id/minioppai/MiniOppaiFilters.kt | 2 +- src/id/oploverz/build.gradle | 2 +- .../tachiyomi/animeextension/id/oploverz/OploverzFilters.kt | 1 + src/ko/aniweek/build.gradle | 2 +- .../eu/kanade/tachiyomi/animeextension/ko/aniweek/Aniweek.kt | 1 + src/pt/animeszone/build.gradle | 2 +- .../animeextension/pt/animeszone/AnimesZoneFilters.kt | 2 +- src/sr/animesrbija/build.gradle | 2 +- .../animeextension/sr/animesrbija/AnimeSrbijaFilters.kt | 2 +- src/tr/hdfilmcehennemi/build.gradle | 2 +- .../tr/hdfilmcehennemi/HDFilmCehennemiFilters.kt | 1 + src/uk/uakino/build.gradle | 2 +- .../src/eu/kanade/tachiyomi/animeextension/uk/uakino/UAKino.kt | 2 +- 42 files changed, 47 insertions(+), 27 deletions(-) diff --git a/lib-multisrc/dopeflix/build.gradle.kts b/lib-multisrc/dopeflix/build.gradle.kts index 4de813223c..cb98bc7d73 100644 --- a/lib-multisrc/dopeflix/build.gradle.kts +++ b/lib-multisrc/dopeflix/build.gradle.kts @@ -2,7 +2,7 @@ plugins { id("lib-multisrc") } -baseVersionCode = 19 +baseVersionCode = 20 dependencies { api(project(":lib:dood-extractor")) diff --git a/lib-multisrc/dopeflix/src/eu/kanade/tachiyomi/multisrc/dopeflix/DopeFlixFilters.kt b/lib-multisrc/dopeflix/src/eu/kanade/tachiyomi/multisrc/dopeflix/DopeFlixFilters.kt index b972e4f4e5..b69690dbce 100644 --- a/lib-multisrc/dopeflix/src/eu/kanade/tachiyomi/multisrc/dopeflix/DopeFlixFilters.kt +++ b/lib-multisrc/dopeflix/src/eu/kanade/tachiyomi/multisrc/dopeflix/DopeFlixFilters.kt @@ -95,6 +95,7 @@ object DopeFlixFilters { val YEARS = arrayOf( ALL, + Pair("2024", "2024"), Pair("2023", "2023"), Pair("2022", "2022"), Pair("2021", "2021"), diff --git a/lib-multisrc/zorotheme/build.gradle.kts b/lib-multisrc/zorotheme/build.gradle.kts index a5b25fc7fc..d4500e7555 100644 --- a/lib-multisrc/zorotheme/build.gradle.kts +++ b/lib-multisrc/zorotheme/build.gradle.kts @@ -2,7 +2,7 @@ plugins { id("lib-multisrc") } -baseVersionCode = 2 +baseVersionCode = 3 dependencies { api(project(":lib:megacloud-extractor")) diff --git a/lib-multisrc/zorotheme/src/eu/kanade/tachiyomi/multisrc/zorotheme/ZoroThemeFilters.kt b/lib-multisrc/zorotheme/src/eu/kanade/tachiyomi/multisrc/zorotheme/ZoroThemeFilters.kt index 465ed5cbc0..07dd3b22de 100644 --- a/lib-multisrc/zorotheme/src/eu/kanade/tachiyomi/multisrc/zorotheme/ZoroThemeFilters.kt +++ b/lib-multisrc/zorotheme/src/eu/kanade/tachiyomi/multisrc/zorotheme/ZoroThemeFilters.kt @@ -183,7 +183,7 @@ object ZoroThemeFilters { Pair("Most Watched", "most_watched"), ) - val YEARS = arrayOf(ALL) + (1917..2023).map { + val YEARS = arrayOf(ALL) + (1917..2024).map { Pair(it.toString(), it.toString()) }.reversed().toTypedArray() diff --git a/src/all/animeworldindia/build.gradle b/src/all/animeworldindia/build.gradle index dc209513ed..361885d1f3 100644 --- a/src/all/animeworldindia/build.gradle +++ b/src/all/animeworldindia/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'AnimeWorld India' extClass = '.AnimeWorldIndiaFactory' - extVersionCode = 11 + extVersionCode = 12 } apply from: "$rootDir/common.gradle" diff --git a/src/all/animeworldindia/src/eu/kanade/tachiyomi/animeextension/all/animeworldindia/AnimeWorldIndiaFilters.kt b/src/all/animeworldindia/src/eu/kanade/tachiyomi/animeextension/all/animeworldindia/AnimeWorldIndiaFilters.kt index a20456fb63..5baf406294 100644 --- a/src/all/animeworldindia/src/eu/kanade/tachiyomi/animeextension/all/animeworldindia/AnimeWorldIndiaFilters.kt +++ b/src/all/animeworldindia/src/eu/kanade/tachiyomi/animeextension/all/animeworldindia/AnimeWorldIndiaFilters.kt @@ -47,6 +47,7 @@ class AnimeWorldIndiaFilters { private fun getYearList() = listOf( StringQuery("Any", "all"), + StringQuery("2024", "2024"), StringQuery("2023", "2023"), StringQuery("2022", "2022"), StringQuery("2021", "2021"), diff --git a/src/en/fmovies/build.gradle b/src/en/fmovies/build.gradle index 7192fd2eda..f5484c707c 100644 --- a/src/en/fmovies/build.gradle +++ b/src/en/fmovies/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'FMovies' extClass = '.FMovies' - extVersionCode = 23 + extVersionCode = 24 } apply from: "$rootDir/common.gradle" diff --git a/src/en/fmovies/src/eu/kanade/tachiyomi/animeextension/en/fmovies/FMoviesFilters.kt b/src/en/fmovies/src/eu/kanade/tachiyomi/animeextension/en/fmovies/FMoviesFilters.kt index 1f6c0f1014..19c3a03636 100644 --- a/src/en/fmovies/src/eu/kanade/tachiyomi/animeextension/en/fmovies/FMoviesFilters.kt +++ b/src/en/fmovies/src/eu/kanade/tachiyomi/animeextension/en/fmovies/FMoviesFilters.kt @@ -215,6 +215,7 @@ object FMoviesFilters { ) val YEARS = arrayOf( + Pair("2024", "2024"), Pair("2023", "2023"), Pair("2022", "2022"), Pair("2021", "2021"), diff --git a/src/en/gogoanime/build.gradle b/src/en/gogoanime/build.gradle index dfb1b71f8a..cd11ff2b9c 100644 --- a/src/en/gogoanime/build.gradle +++ b/src/en/gogoanime/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Gogoanime' extClass = '.GogoAnime' - extVersionCode = 82 + extVersionCode = 83 } apply from: "$rootDir/common.gradle" diff --git a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnimeFilters.kt b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnimeFilters.kt index abef72d77e..a72b81a373 100644 --- a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnimeFilters.kt +++ b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnimeFilters.kt @@ -367,6 +367,9 @@ object GogoAnimeFilters { val SEASON_LIST = arrayOf( Pair("", ""), + Pair("2024", "2024"), Pair("2023", "2023"), Pair("2022", "2022"), Pair("2021", "2021"), diff --git a/src/es/animeonlineninja/build.gradle b/src/es/animeonlineninja/build.gradle index 837a0e36c3..bd3244cf41 100644 --- a/src/es/animeonlineninja/build.gradle +++ b/src/es/animeonlineninja/build.gradle @@ -3,7 +3,7 @@ ext { extClass = '.AnimeOnlineNinja' themePkg = 'dooplay' baseUrl = 'https://ww3.animeonline.ninja' - overrideVersionCode = 37 + overrideVersionCode = 38 } apply from: "$rootDir/common.gradle" diff --git a/src/es/animeonlineninja/src/eu/kanade/tachiyomi/animeextension/es/animeonlineninja/AnimeOnlineNinjaFilters.kt b/src/es/animeonlineninja/src/eu/kanade/tachiyomi/animeextension/es/animeonlineninja/AnimeOnlineNinjaFilters.kt index 043f7dd525..f68389962a 100644 --- a/src/es/animeonlineninja/src/eu/kanade/tachiyomi/animeextension/es/animeonlineninja/AnimeOnlineNinjaFilters.kt +++ b/src/es/animeonlineninja/src/eu/kanade/tachiyomi/animeextension/es/animeonlineninja/AnimeOnlineNinjaFilters.kt @@ -114,7 +114,7 @@ object AnimeOnlineNinjaFilters { Pair("Audio Castellano \uD83C\uDDEA\uD83C\uDDF8", "anime-castellano"), ) - val YEARS = arrayOf(EVERY) + (2023 downTo 1979).map { + val YEARS = arrayOf(EVERY) + (2024 downTo 1979).map { Pair(it.toString(), it.toString()) }.toTypedArray() diff --git a/src/es/latanime/build.gradle b/src/es/latanime/build.gradle index c0c630fe16..8057a7297e 100644 --- a/src/es/latanime/build.gradle +++ b/src/es/latanime/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Latanime' extClass = '.Latanime' - extVersionCode = 15 + extVersionCode = 16 } apply from: "$rootDir/common.gradle" diff --git a/src/es/latanime/src/eu/kanade/tachiyomi/animeextension/es/latanime/Latanime.kt b/src/es/latanime/src/eu/kanade/tachiyomi/animeextension/es/latanime/Latanime.kt index 6473e0a7d7..affdb7ce0f 100644 --- a/src/es/latanime/src/eu/kanade/tachiyomi/animeextension/es/latanime/Latanime.kt +++ b/src/es/latanime/src/eu/kanade/tachiyomi/animeextension/es/latanime/Latanime.kt @@ -107,6 +107,7 @@ class Latanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { "Año", arrayOf( Pair("Seleccionar", "false"), + Pair("2024", "2024"), Pair("2023", "2023"), Pair("2022", "2022"), Pair("2021", "2021"), diff --git a/src/fr/jetanime/build.gradle b/src/fr/jetanime/build.gradle index 3cb2f44ae2..74079c35bb 100644 --- a/src/fr/jetanime/build.gradle +++ b/src/fr/jetanime/build.gradle @@ -3,7 +3,7 @@ ext { extClass = '.JetAnime' themePkg = 'dooplay' baseUrl = 'https://ssl.jetanimes.com' - overrideVersionCode = 6 + overrideVersionCode = 7 } apply from: "$rootDir/common.gradle" diff --git a/src/fr/jetanime/src/eu/kanade/tachiyomi/animeextension/fr/jetanime/JetAnime.kt b/src/fr/jetanime/src/eu/kanade/tachiyomi/animeextension/fr/jetanime/JetAnime.kt index c87a2f82a5..5f9b623b1b 100644 --- a/src/fr/jetanime/src/eu/kanade/tachiyomi/animeextension/fr/jetanime/JetAnime.kt +++ b/src/fr/jetanime/src/eu/kanade/tachiyomi/animeextension/fr/jetanime/JetAnime.kt @@ -98,6 +98,7 @@ class JetAnime : DooPlay( "Year", arrayOf( Pair("", ""), Pair("Bollywood", "/genre/bollywood/"), Pair("Trending", "/genre/top-rated/"), + Pair("Bollywood (2024)", "/account/?ptype=post&tax_category%5B%5D=bollywood&tax_release-year=2024&wpas=1"), Pair("Bollywood (2023)", "/account/?ptype=post&tax_category%5B%5D=bollywood&tax_release-year=2023&wpas=1"), Pair("Bollywood (2022)", "/account/?ptype=post&tax_category%5B%5D=bollywood&tax_release-year=2022&wpas=1"), Pair("Bollywood (2021)", "/account/?ptype=post&tax_category%5B%5D=bollywood&tax_release-year=2021&wpas=1"), @@ -283,6 +284,7 @@ class YoMovies : ConfigurableAnimeSource, ParsedAnimeHttpSource() { arrayOf( Pair("