From ed2006b83f42c84769bc6e93446e02e40e3a23af Mon Sep 17 00:00:00 2001
From: imper1aldev <23511335+imper1aldev@users.noreply.github.com>
Date: Sun, 18 Aug 2024 19:25:45 -0600
Subject: [PATCH] fix(src): Multiple updates

Closes #93
Closes #1
Closes #133
Closes #142 (Yeah, this extension had a bug but someone closed it before fixing it.)
---
 .../lib/voeextractor/VoeExtractor.kt          |  12 +-
 src/all/chineseanime/build.gradle             |   2 +-
 src/all/javguru/build.gradle                  |   2 +-
 src/all/lmanime/build.gradle                  |   2 +-
 src/all/supjav/build.gradle                   |   2 +-
 src/ar/anime4up/build.gradle                  |   2 +-
 src/ar/animerco/build.gradle                  |   2 +-
 src/ar/arabseed/build.gradle                  |   2 +-
 src/ar/asia2tv/build.gradle                   |   2 +-
 src/ar/egydead/build.gradle                   |   2 +-
 src/ar/okanime/build.gradle                   |   2 +-
 src/de/animebase/build.gradle                 |   2 +-
 src/de/animeloads/build.gradle                |   2 +-
 src/de/animetoast/build.gradle                |   2 +-
 src/de/aniworld/build.gradle                  |   2 +-
 src/de/cineclix/build.gradle                  |   2 +-
 src/de/cinemathek/build.gradle                |   2 +-
 src/de/einfach/build.gradle                   |   2 +-
 src/de/filmpalast/build.gradle                |   2 +-
 src/de/kinoking/build.gradle                  |   2 +-
 src/de/kool/build.gradle                      |   2 +-
 src/de/moflixstream/build.gradle              |   2 +-
 src/de/movie4k/build.gradle                   |   2 +-
 src/de/serienstream/build.gradle              |   2 +-
 src/en/allanimechi/build.gradle               |   2 +-
 src/en/animegg/build.gradle                   |   7 +
 .../animegg/res/mipmap-hdpi/ic_launcher.png   | Bin 0 -> 893 bytes
 .../animegg/res/mipmap-mdpi/ic_launcher.png   | Bin 0 -> 586 bytes
 .../animegg/res/mipmap-xhdpi/ic_launcher.png  | Bin 0 -> 1057 bytes
 .../animegg/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1550 bytes
 .../res/mipmap-xxxhdpi/ic_launcher.png        | Bin 0 -> 2119 bytes
 .../animeextension/en/animegg/AnimeGG.kt      | 279 ++++++++++++++++++
 src/en/animekhor/build.gradle                 |   2 +-
 src/en/animenosub/build.gradle                |   2 +-
 src/en/asiaflix/build.gradle                  |   2 +-
 src/en/asianload/build.gradle                 |   2 +-
 src/en/dramacool/build.gradle                 |   2 +-
 src/en/gogoanime/build.gradle                 |   2 +-
 src/en/multimovies/build.gradle               |   2 +-
 src/es/animefenix/build.gradle                |   2 +-
 src/es/animeflv/build.gradle                  |   2 +-
 src/es/animeid/build.gradle                   |   1 +
 .../animeextension/es/animeid/AnimeID.kt      |  21 +-
 src/es/animelatinohd/build.gradle             |   2 +-
 src/es/animemovil/build.gradle                |   2 +-
 src/es/asialiveaction/build.gradle            |   2 +-
 src/es/cine24h/build.gradle                   |  14 +
 .../cine24h/res/mipmap-hdpi/ic_launcher.png   | Bin 0 -> 5366 bytes
 .../cine24h/res/mipmap-mdpi/ic_launcher.png   | Bin 0 -> 2510 bytes
 .../cine24h/res/mipmap-xhdpi/ic_launcher.png  | Bin 0 -> 7849 bytes
 .../cine24h/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 15918 bytes
 .../res/mipmap-xxxhdpi/ic_launcher.png        | Bin 0 -> 26476 bytes
 .../animeextension/es/cine24h/Cine24h.kt      | 272 +++++++++++++++++
 src/es/cinecalidad/build.gradle               |   2 +-
 src/es/cineplus123/build.gradle               |   2 +-
 src/es/cuevana/build.gradle                   |   2 +-
 src/es/doramasflix/build.gradle               |   2 +-
 src/es/ennovelas/build.gradle                 |   2 +-
 src/es/gnula/build.gradle                     |   2 +-
 src/es/hackstore/build.gradle                 |   2 +-
 src/es/hentaila/build.gradle                  |   2 +-
 src/es/hentaitk/build.gradle                  |   2 +-
 src/es/jkanime/build.gradle                   |   2 +-
 src/es/lacartoons/build.gradle                |   2 +-
 src/es/legionanime/build.gradle               |   2 +-
 src/es/metroseries/build.gradle               |   2 +-
 src/es/mundodonghua/build.gradle              |   2 +-
 src/es/pelisforte/build.gradle                |   2 +-
 src/es/pelisplushd/build.gradle               |   2 +-
 src/es/tioanimeh/build.gradle                 |   2 +-
 src/es/tiodonghua/build.gradle                |   2 +-
 src/es/veranimes/build.gradle                 |   2 +-
 src/fr/anisama/build.gradle                   |   2 +-
 src/fr/empirestreaming/build.gradle           |   2 +-
 src/fr/otakufr/build.gradle                   |   2 +-
 src/fr/wiflix/build.gradle                    |   2 +-
 src/id/otakudesu/build.gradle                 |   2 +-
 src/it/toonitalia/build.gradle                |   2 +-
 src/pt/animesgratis/build.gradle              |   2 +-
 src/pt/pobreflix/build.gradle                 |   2 +-
 src/tr/animeler/build.gradle                  |   2 +-
 src/tr/anizm/build.gradle                     |   2 +-
 src/tr/tranimeizle/build.gradle               |   2 +-
 src/tr/turkanime/build.gradle                 |   2 +-
 84 files changed, 665 insertions(+), 75 deletions(-)
 create mode 100644 src/en/animegg/build.gradle
 create mode 100644 src/en/animegg/res/mipmap-hdpi/ic_launcher.png
 create mode 100644 src/en/animegg/res/mipmap-mdpi/ic_launcher.png
 create mode 100644 src/en/animegg/res/mipmap-xhdpi/ic_launcher.png
 create mode 100644 src/en/animegg/res/mipmap-xxhdpi/ic_launcher.png
 create mode 100644 src/en/animegg/res/mipmap-xxxhdpi/ic_launcher.png
 create mode 100644 src/en/animegg/src/eu/kanade/tachiyomi/animeextension/en/animegg/AnimeGG.kt
 create mode 100644 src/es/cine24h/build.gradle
 create mode 100644 src/es/cine24h/res/mipmap-hdpi/ic_launcher.png
 create mode 100644 src/es/cine24h/res/mipmap-mdpi/ic_launcher.png
 create mode 100644 src/es/cine24h/res/mipmap-xhdpi/ic_launcher.png
 create mode 100644 src/es/cine24h/res/mipmap-xxhdpi/ic_launcher.png
 create mode 100644 src/es/cine24h/res/mipmap-xxxhdpi/ic_launcher.png
 create mode 100644 src/es/cine24h/src/eu/kanade/tachiyomi/animeextension/es/cine24h/Cine24h.kt

diff --git a/lib/voe-extractor/src/main/java/eu/kanade/tachiyomi/lib/voeextractor/VoeExtractor.kt b/lib/voe-extractor/src/main/java/eu/kanade/tachiyomi/lib/voeextractor/VoeExtractor.kt
index 40878ebc..1e30fb57 100644
--- a/lib/voe-extractor/src/main/java/eu/kanade/tachiyomi/lib/voeextractor/VoeExtractor.kt
+++ b/lib/voe-extractor/src/main/java/eu/kanade/tachiyomi/lib/voeextractor/VoeExtractor.kt
@@ -22,6 +22,8 @@ class VoeExtractor(private val client: OkHttpClient) {
 
     private val base64Regex = Regex("'.*'")
 
+    private val scriptBase64Regex = "(let|var)\\s+\\w+\\s*=\\s*'(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)';".toRegex()
+
     @Serializable
     data class VideoLinkDTO(val file: String)
 
@@ -36,8 +38,9 @@ class VoeExtractor(private val client: OkHttpClient) {
             document = clientDdos.newCall(GET(originalUrl)).execute().asJsoup()
         }
 
-        val script = document.selectFirst("script:containsData(const sources), script:containsData(var sources), script:containsData(wc0)")
-            ?.data()
+        val alternativeScript = document.select("script").find { scriptBase64Regex.containsMatchIn(it.data()) }?.data()
+        val script = document.selectFirst("script:containsData(const sources), script:containsData(var sources), script:containsData(wc0)")?.data()
+            ?: alternativeScript
             ?: return emptyList()
         val playlistUrl = when {
             // Layout 1
@@ -46,10 +49,11 @@ class VoeExtractor(private val client: OkHttpClient) {
                 if (linkRegex.matches(link)) link else String(Base64.decode(link, Base64.DEFAULT))
             }
             // Layout 2
-            script.contains("wc0") -> {
+            script.contains("wc0") || alternativeScript != null -> {
                 val base64 = base64Regex.find(script)!!.value
                 val decoded = Base64.decode(base64, Base64.DEFAULT).let(::String)
-                json.decodeFromString<VideoLinkDTO>(decoded).file
+
+                json.decodeFromString<VideoLinkDTO>(if (alternativeScript != null) decoded.reversed() else decoded).file
             }
             else -> return emptyList()
         }
diff --git a/src/all/chineseanime/build.gradle b/src/all/chineseanime/build.gradle
index 70141c43..0ef78665 100644
--- a/src/all/chineseanime/build.gradle
+++ b/src/all/chineseanime/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.ChineseAnime'
     themePkg = 'animestream'
     baseUrl = 'https://www.chineseanime.vip'
-    overrideVersionCode = 8
+    overrideVersionCode = 9
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/all/javguru/build.gradle b/src/all/javguru/build.gradle
index 4d328596..7da90918 100644
--- a/src/all/javguru/build.gradle
+++ b/src/all/javguru/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Jav Guru'
     extClass = '.JavGuru'
-    extVersionCode = 15
+    extVersionCode = 16
     isNsfw = true
 }
 
diff --git a/src/all/lmanime/build.gradle b/src/all/lmanime/build.gradle
index 4710fec1..bafe69d0 100644
--- a/src/all/lmanime/build.gradle
+++ b/src/all/lmanime/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.LMAnime'
     themePkg = 'animestream'
     baseUrl = 'https://lmanime.com'
-    overrideVersionCode = 6
+    overrideVersionCode = 7
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/all/supjav/build.gradle b/src/all/supjav/build.gradle
index b3bad3c1..beb008ea 100644
--- a/src/all/supjav/build.gradle
+++ b/src/all/supjav/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'SupJav'
     extClass = '.SupJavFactory'
-    extVersionCode = 9
+    extVersionCode = 10
     isNsfw = true
 }
 
diff --git a/src/ar/anime4up/build.gradle b/src/ar/anime4up/build.gradle
index 54b07aca..c78aef15 100644
--- a/src/ar/anime4up/build.gradle
+++ b/src/ar/anime4up/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Anime4up'
     extClass = '.Anime4Up'
-    extVersionCode = 57
+    extVersionCode = 58
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ar/animerco/build.gradle b/src/ar/animerco/build.gradle
index dad3de1c..7676a28e 100644
--- a/src/ar/animerco/build.gradle
+++ b/src/ar/animerco/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Animerco'
     extClass = '.Animerco'
-    extVersionCode = 37
+    extVersionCode = 38
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ar/arabseed/build.gradle b/src/ar/arabseed/build.gradle
index 7f6ac620..cc4d4962 100644
--- a/src/ar/arabseed/build.gradle
+++ b/src/ar/arabseed/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Arab Seed'
     extClass = '.ArabSeed'
-    extVersionCode = 13
+    extVersionCode = 14
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ar/asia2tv/build.gradle b/src/ar/asia2tv/build.gradle
index 14987244..eea0e809 100644
--- a/src/ar/asia2tv/build.gradle
+++ b/src/ar/asia2tv/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'asia2tv'
     extClass = '.Asia2TV'
-    extVersionCode = 18
+    extVersionCode = 19
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ar/egydead/build.gradle b/src/ar/egydead/build.gradle
index f55a495f..2ad2e37e 100644
--- a/src/ar/egydead/build.gradle
+++ b/src/ar/egydead/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Egy Dead'
     extClass = '.EgyDead'
-    extVersionCode = 12
+    extVersionCode = 13
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/ar/okanime/build.gradle b/src/ar/okanime/build.gradle
index 6fa1f114..a574966d 100644
--- a/src/ar/okanime/build.gradle
+++ b/src/ar/okanime/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Okanime'
     extClass = '.Okanime'
-    extVersionCode = 10
+    extVersionCode = 11
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/de/animebase/build.gradle b/src/de/animebase/build.gradle
index 5feedbe2..2a1a3e80 100644
--- a/src/de/animebase/build.gradle
+++ b/src/de/animebase/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Anime-Base'
     extClass = '.AnimeBase'
-    extVersionCode = 24
+    extVersionCode = 25
     isNsfw = true
 }
 
diff --git a/src/de/animeloads/build.gradle b/src/de/animeloads/build.gradle
index 69a8bb45..443c1111 100644
--- a/src/de/animeloads/build.gradle
+++ b/src/de/animeloads/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Anime-Loads'
     extClass = '.AnimeLoads'
-    extVersionCode = 15
+    extVersionCode = 16
     isNsfw = true
 }
 
diff --git a/src/de/animetoast/build.gradle b/src/de/animetoast/build.gradle
index e3f402e4..b753c5ca 100644
--- a/src/de/animetoast/build.gradle
+++ b/src/de/animetoast/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AnimeToast'
     extClass = '.AnimeToast'
-    extVersionCode = 14
+    extVersionCode = 15
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/de/aniworld/build.gradle b/src/de/aniworld/build.gradle
index 6734fb8a..c7486c8e 100644
--- a/src/de/aniworld/build.gradle
+++ b/src/de/aniworld/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AniWorld'
     extClass = '.AniWorld'
-    extVersionCode = 23
+    extVersionCode = 24
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/de/cineclix/build.gradle b/src/de/cineclix/build.gradle
index 2854333f..069ad729 100644
--- a/src/de/cineclix/build.gradle
+++ b/src/de/cineclix/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'CineClix'
     extClass = '.CineClix'
-    extVersionCode = 14
+    extVersionCode = 15
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/de/cinemathek/build.gradle b/src/de/cinemathek/build.gradle
index 31a467a6..84230da7 100644
--- a/src/de/cinemathek/build.gradle
+++ b/src/de/cinemathek/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Cinemathek'
     themePkg = 'dooplay'
     baseUrl = 'https://cinemathek.net'
-    overrideVersionCode = 20
+    overrideVersionCode = 21
     isNsfw = true
 }
 
diff --git a/src/de/einfach/build.gradle b/src/de/einfach/build.gradle
index 1ad2b145..868eeabd 100644
--- a/src/de/einfach/build.gradle
+++ b/src/de/einfach/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Einfach'
     extClass = '.Einfach'
-    extVersionCode = 10
+    extVersionCode = 11
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/de/filmpalast/build.gradle b/src/de/filmpalast/build.gradle
index 58ba652a..1b8b6531 100644
--- a/src/de/filmpalast/build.gradle
+++ b/src/de/filmpalast/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'FilmPalast'
     extClass = '.FilmPalast'
-    extVersionCode = 17
+    extVersionCode = 18
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/de/kinoking/build.gradle b/src/de/kinoking/build.gradle
index 12567fbb..be32a930 100644
--- a/src/de/kinoking/build.gradle
+++ b/src/de/kinoking/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Kinoking'
     themePkg = 'dooplay'
     baseUrl = 'https://kinoking.cc'
-    overrideVersionCode = 21
+    overrideVersionCode = 22
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/de/kool/build.gradle b/src/de/kool/build.gradle
index 2fd2a972..c8735707 100644
--- a/src/de/kool/build.gradle
+++ b/src/de/kool/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Kool'
     extClass = '.Kool'
-    extVersionCode = 11
+    extVersionCode = 12
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/de/moflixstream/build.gradle b/src/de/moflixstream/build.gradle
index 50b1262d..4d8ddf91 100644
--- a/src/de/moflixstream/build.gradle
+++ b/src/de/moflixstream/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Moflix-Stream'
     extClass = '.MoflixStream'
-    extVersionCode = 8
+    extVersionCode = 9
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/de/movie4k/build.gradle b/src/de/movie4k/build.gradle
index 46b5a639..f77bcc76 100644
--- a/src/de/movie4k/build.gradle
+++ b/src/de/movie4k/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Movie4k'
     extClass = '.Movie4k'
-    extVersionCode = 10
+    extVersionCode = 11
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/de/serienstream/build.gradle b/src/de/serienstream/build.gradle
index 2cdfacc9..dc4557e5 100644
--- a/src/de/serienstream/build.gradle
+++ b/src/de/serienstream/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Serienstream'
     extClass = '.Serienstream'
-    extVersionCode = 18
+    extVersionCode = 19
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/allanimechi/build.gradle b/src/en/allanimechi/build.gradle
index de36a8a8..9880bacb 100644
--- a/src/en/allanimechi/build.gradle
+++ b/src/en/allanimechi/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AllAnimeChi'
     extClass = '.AllAnimeChi'
-    extVersionCode = 7
+    extVersionCode = 8
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/animegg/build.gradle b/src/en/animegg/build.gradle
new file mode 100644
index 00000000..e86f9ede
--- /dev/null
+++ b/src/en/animegg/build.gradle
@@ -0,0 +1,7 @@
+ext {
+    extName = 'AnimeGG'
+    extClass = '.AnimeGG'
+    extVersionCode = 1
+}
+
+apply from: "$rootDir/common.gradle"
diff --git a/src/en/animegg/res/mipmap-hdpi/ic_launcher.png b/src/en/animegg/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..c11322d30785103a8310819258bc8b72507d0729
GIT binary patch
literal 893
zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2V0Q6zaSW-5dpqN__MSkQ_P@Fs
zUZ>hxizHJV6BErgZI&rB6S{dKRWUVFQ=5C|o17EJ4k>U?FVfy_|M<m<`zD`jW>~(z
zvOcZmeDHavd*^S@T<)`e`!Y45P8X$#_J^N8PrtS4jbcqrjm7Cr?FSl7Z#q9XFzbzC
zL4xl$0gDZ4)f_SrlWke})|`}MV!xKc-^iRzj<N|ycJH<}x3hb<Yu7FzOMCnHg8ARS
zmv7&*=S@{r)stIE-@bm`xqZ92Ww;Q~euXQ`m#dqbn?KLW&K911GKK5i*4?{b&ze2^
z>8>C%6O)j<1+A^E@0mYcP<+OI>;C=nw{PDT`F8a7_D+>N@!xaHmMte5ozL={*xKsu
z=ij=B`RC!k))}#}bERcuc*+V34a?V`JbAK-|L(<$ir4=?J8{CJl;u->*7N7j-#vPy
zbmI2y+jsU#WF#j$uls-Y^l5L)=pc}jj?8D;yKmpAQbnT+*RD;A`D~xc-`FgWyg;ap
z<<ouMf0gM82@k@7Zf<6hm617NcE7We^JdE_V3;Wa71;l7eqLX(Ys(f9k&No<=xslL
zvHRpX!Av;jpvuGfWPfv7dU|Yqef_y>*RE}10{Thxj`~!u(0YaUU%zg(wzfWPX>1%E
zwxGSez3I1%oZP=&hmzFPrE46n*sC0Ka9y*@;a~m6ix&f@`z`N&_5Zw<=!)&z!^=uC
zGFI$jn)=$m@zlmgOqGALyNd3!SMJ`u8|eFqw{PAo%+1aH^gCeotXX$ny;?O#KLi-*
z9A96(It2{Pla0=6*029xx9#KoXnlSCyxQ8>b)2PHS+9Oy)juz;1xy(#AD=xt#>>yY
z``o#634e{x+`2XE&S`t5AK%aH**D`~?T^o&H{a3j1SX~lS8~i=_x1NT+uGWe_V@P}
z&Hw$oy1b}J>ALu3`}B`?p1`mmFJTc%rpn-S{^}`r^OYMau{@nMz--0f>FVdQ&MBb@
E0Pvi%LI3~&

literal 0
HcmV?d00001

diff --git a/src/en/animegg/res/mipmap-mdpi/ic_launcher.png b/src/en/animegg/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..973ed6b926ee64fadac40c397020a64bf94d0b6c
GIT binary patch
literal 586
zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(FbR6PIEGZjy`5&b`eUNRvGeH@
zgQhqo8k|sB?a0-flpr`chi$UaPlHVn9&Fq}lUi$fpZ6A(o-4KQ|NM>bT<xC!tLsiz
z)|JMG&;9(qrl#WKqo=h+d*jaLH&iR@WVMn-?6Q#SPcxfso4Wn>LHoIWkLKRY+y1DJ
z`(5vbjK?*0vz-<u)Y#n*c3XV$?*16PWkD-D%F_%aI->P<m>*iyo3~xN?{)>xi|@Z5
zojrD%?Mczj-;Vq5=O22wVe-d{n(v=~{)zv2_+h}EqJw({#d2-fQZ`3^OnYpoFxRhp
zdp*d#w<>Nko=v-a<nc%SEw^)@H~1}A{^Pb-@!ib__c*%EVwg`o-Sp$|nyXpo7{6A<
z{#Y91d1o`&s6B5RjwU6lO+Gm{K;z5XhNnfG_ENq7{xqDwW7mD3_lJ+t#EQQS9x6#u
zYo|?hP*7mI<F@g;f&|aLJco@DBKvpi<;Bm++NxFe?vZNz!mm}iNgHQaoJ%p1EVht2
zleXFLWJ=H;<CP(&-h8hvJkR#sEuzG5uAlGv>(!^Swl>xO&YygL=Fb|vcRN6ijCx2e
f5x3{h`Jc?~i}svT=3<)<Od|}Qu6{1-oD!M<O(h$&

literal 0
HcmV?d00001

diff --git a/src/en/animegg/res/mipmap-xhdpi/ic_launcher.png b/src/en/animegg/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..a04ead970f5e1f8b0c1b7b2405b452175820934b
GIT binary patch
literal 1057
zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V1D80;uum9_jZ=GerljZ+h4Ki
z91~XruJ+(q8(kta-DPD0SF4|TiPgeO9d6!>f-?jPZT}scr=zZBe15zCzMHRacb=U2
z-E&^v-05HUo#?E!vT6}<;!p$<f22*MdgV9S-CTeA_;Gi|*OUM5GH^JSvR{v9g5k~e
z+{`IH-(DYLkfghCgH=ssrRKZ$@15;zY-ZfikB^T(`%`9Sbo-m@t&D;5=gsTt?Ce~$
ze7X9Q6DK-O`t94hS9J5{&ChB=+1c2-zJD*DEI$?K6NRM37d56$o7Q#i+_??T&dzG~
zJ2!4jJooIz{rmUpnBTm4Go$-il-YrU2OTe7y_yOXFJqRGmlwZ#_wKVrJBu1VfBw8^
z`}XT|PH%n777-tBKE3Az<F@VF&(7?SIuOVlvL&bC=+UE(K7BGe{rdH5`%kCYX3U#s
zw*GhY`gQBh$iA8Ya=`UXjMuJRJF_$9G@D1hd*!>`slcE;5z1_WLT`P=ATBO`^x3m#
z@iYIWh07}Z?M?U7zWn{r_2;MRVkIVIUuFFE{rlOUVREvvp>hwNJUKEa|LMJZ^D1lC
zfx=^FR>Ly9beQaeFJHFIm_OhA+t;r%=geWeWG$Vh&d$#6d#>KnLA$-Z-Pi9N!&;!<
z%`K%Kn43B*lUktpyEM^ZT`KdMHEU|@9M&gIWlT#;JM-H1__1R?ez*B1$jN_7+@Wqf
zX)W7{lls+5Zf;|~lDeAl)h1mwkLeGNzB1UW>-)dQTY1XgFK)j3MPF7Lzn`oPHu9yi
z=IPU?pEU^vKLlF5f1lg0^Qz}vfMIT0-gyG(TY-;1f9{+yXO7AAGo{(tulxUe;VI9{
zJ2&TaX=&-#&+P5rJHV>Ge*5<Ab8zmSoKSHwF)#U9%lmcu`ub*l4xKw|)~`Pts-G8c
ziWg_Q^6>0g-@>vou}>dAUVKtF)9u;MRrl`Roq5M<;L|uFTS4+7hvL4@`Sx$F-fcNh
R4k`c`JYD@<);T3K0RZ%>4Q~Jd

literal 0
HcmV?d00001

diff --git a/src/en/animegg/res/mipmap-xxhdpi/ic_launcher.png b/src/en/animegg/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..68181b55da80077c01a0a5c40311001ff4b62bd7
GIT binary patch
literal 1550
zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$farf%U4Vi(^Pd+}k;)SNqn=wExx3
zd%5Gfr{a`G#xAE*KAuKNE+<d)H1aIr@p%$<>VbiBt5LDG>dtAW=Wo1Mx4Ufpy!UDA
zzZYM7|NKjxy}zw;b?r5)*EXeP-%>9sCHEK}lRzc@u-5(gaq(u&CT2;#+cLwM-2UbC
zbp5**7rXDCYh4~zo|mULXMWx9Z)>efUxip~YrDQKmiu|WruBq}1={=T|KFQyQMf32
zPeq|{{=Get>l)|T*W1a2pXL_VYx%r=itLGk9aF{i<K9fui4@Aq(Ou43^7`7^yqlX+
zAMS{<T2NW>{oUQXpP!ySTz2h?Kcj8kpB>SAt4b}FE#vd}^78WXySKJxALd>A_B~V8
z=V!j#D?dN`@Z*-1!oltN_sgQU=kc0vZk^2Z>&wgF?dj*|eYhb8lv*9WzD@e(DNjb*
ziVq4l>!$K~6f9&d`Ty_lhaF*73Xbew)&oVN9N78g-kh6f8+{b0vGw&#u?y>BcON<z
zFwK7co_W(iv3tEF%3->GJm2vvKt}qxIh@D;#HX+u$*fz+9AyDkaD`D<=4K;Ld-kga
zvA#DBZHG-u9k|`g6b?U}#U~n2srvtLJO3tm`#PDoJdy!7pH%+qewzL$%@?f2D#YRG
z*VUn`!%B^fjVEp1ym|3=C0@}B*Vo7I=9M;U`TS+;A07SpeLTBOQ$cpV3}D<__qQr8
zpH*}JhK0;go6~$P_N{-KUitBn>y5SGxbT&|kRlu4PYl`4_2TpM^LKlt&Huev<~#e)
zzZ(mgwd6ha6hHUd(H4JqZ*}<%`PU6qKsVOj*_iBpL*BZ?q1LA6M*&#)Rl_68F1{7Z
z`84J&e$h~c#<kL2@F}ykonM~s(YD;%K%@6D%37D{yjk_`_ICX@{iP1JbHxI*f3scj
zV!sm1ZW0M2FMo<jINBxpkZoJp`+IvA|F_l4SB~AD7yIM;HBf5#vM=M_`dQ#$|8{Ds
z_U9_u?0tE6b`*Yzy7i;#-QC^S|D0Y|x3y;D)yeAqhiX^pf>LMh>E-->^X+8wQn<s{
z#oV;5`l1nYd8zmGe_mIfYJbhUzfX4E@>Wp1>FTVHlea3-xN~8aUhJ+dyMZCSV_H(@
zuO}xbKb&!En*P@(TenOCr(~ehUT@34FPE34dw#C9__~MTrzgMq`}=$Q<E+X*KR#ak
zY!K(J4T|9CUw?jn&ini8>tcI(Q`@2^9_!<;{m}kV@#n&{^;fmy*B^)GjjikB_Db1y
zuF0(YFL3_1wYQ5+UB><W_44O#M*$O3;%w*PNPY&UK4!D|Zw{apu@cEX{{I-Syv|aI
U(U<xGEaw?KUHx3vIVCg!0OI)2IsgCw

literal 0
HcmV?d00001

diff --git a/src/en/animegg/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/animegg/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f9ac33bdbe8ed60217591fc19751dbcd16f5f8b
GIT binary patch
literal 2119
zcmeH}Sx{3~7{_mhmf(_TsiKk)V89g=Efv|qR*=PYf=GZ87CQt&0Am6~AR$^QB|s@S
zBby~GDy>AsAwUsH7&M?&4ABA#2}>d|2w^d-2}|#doj&xz>Gau$d+wb1&hnf8cmCfw
zS*K5WBi0+Q2LJ%!>*I+7|83A`pbxe<2^kIm21s8|_cL^YN-D~Jt~KqLQ8$HKZ}c)g
zcXLbe=|7I{wJ^fr{DO{Kc-z_GHHY-mFOfSev%lPMe9wkMhLJhxaw?y*cWAP9!JgCH
zESVZl<%?=CEyY^RpNv)onyM&rT{XM1*~7s6Bh7o8E}2ZmaoZ=Y!4B~mv8*%q15<gM
zeJWEMyf<93{M7kB8u&9-mz$euV>s&S^3uE7(3Z2#VTD4WFp5OFO}}G&fbigzwYBvY
zQIXFADbHvZsngcM;Wan7VP89+p=A>%zQSUq8xe@DcLN^YI#GI!U#_&>^`f=EDkCdi
z^1GNDRDX+Z5j(a3L=lOlBO@cSMA8V5QkfAG6%|#IINrN8A@alux=sC7R4NvWWrs;J
zDC(<FC`$74^JNHb+)eoOq_ic9Oy({w_uI3|q9fQ#OG{CGwV}e&!tkB&>CvZ!ipTjD
z!neDIp}Fh&j}X(+9?<1Dnu(h>bH1J^GU60o)>CE~_4fWmjEt<Lzbt@4s^>Rcc~;2s
z-NE>QtGiD{@<SIb)@T67g+a25m*CS*8h(gXdFPe%)C6uz2rfu>WaXK<b};(<C;(R6
z4&n^u=@#yQEi=(>r+9UZOl0`O9}vgZ_}FOpCX98NwuOl-U$JMX++Q`uq2SY4a5ukA
z<ts&C^y@GI^Nt4x8Z!K@r$#uAWV<9or#l!Q;tHRh9(gEJ$Bw@Rn2Kt@wIL-z1#Jn;
z>f~*p0Lq)t!H<;#-N&HZ^mf3?3nzOp`?<M#ZZ^7AP;eFjvPE5^JG$)`r{of=z*@Yt
zH8pvx0ZsuHCZ$%I^d8kfQ+C;B{|p1g&hFC&bmp0crKrGZPp<CH?$ZP~B~MzX82-(`
zibt~!1>;fh?p(ctM<Im!6rdwIA`b0#1lhJ7B2ad~wpV3<lu~=(9Iws}S&o8-=RlA&
zIgq2%?q7?b9>FGt1cD#|bA`>FO`xORz^=P6?$e)}2DK!`iCfS}vqxsg;T7$|v2?21
zkC*;AJIRLlGrT)VNnL&Xn}0QXaP&N2u1^70qSs<7q)&Iefz8UF72A4EU9e|uMzglT
zyT5?Yre%O*C4@#myLm%sZP|LtA0ae41u)TRY=bPf_>ic?k@gHl@0}1q&%A0NdvJ95
z8H~5)6{wXU(e|fj4`k{Yh($2VrD8pwcG#6+;N39baUMtnIqX@E;I4PW1o4gJ*SH7n
zPx`-aO<Q{ZLfs@VXHE^a3OjE&QDmMo1j}y7F6%%;tXA{c7^fs|5FWocr54a<DtDNe
z>~}fPQ-)2w#`HKll&MS8LE+qZU*K~6;^BrcRUt|QDx$NN{3S25AH#J?Uk@d}D3U_C
zS6o!IXRyvPq$xg*z)uTu)+YP=`-{CL80EwSc}C((yE`8pQ7|8P5#vbvl`c2rtu+N`
zL-x%TgD1<`!67Iu{&Gb{g+kF)DzvQ@L!2>#e8#}Ut9w;+y;!gqV6maj;}`lZFs7z9
zgsNNfn^dZZM)++}=}}#|NYTv3)L&F9WVzf?Ni&s^OJp*cV*@!F#|E@Z8hxxKKyy7y
z2XTA8(1SO$gCx-O(q@%nj<E<duC4~m>Bo`D<T10kCEOTff$ykPYL~n-uSPRH^3BY*
zR&$_rWOMqeuF@ky>du!Cq?;k6fPtls_*3UU3Zmu|2%tOl<F_yvUAwl7KswP9oKhA#
Q!3P51>vhtz)+7A#Us-?x&j0`b

literal 0
HcmV?d00001

diff --git a/src/en/animegg/src/eu/kanade/tachiyomi/animeextension/en/animegg/AnimeGG.kt b/src/en/animegg/src/eu/kanade/tachiyomi/animeextension/en/animegg/AnimeGG.kt
new file mode 100644
index 00000000..463c226c
--- /dev/null
+++ b/src/en/animegg/src/eu/kanade/tachiyomi/animeextension/en/animegg/AnimeGG.kt
@@ -0,0 +1,279 @@
+package eu.kanade.tachiyomi.animeextension.en.animegg
+
+import android.annotation.SuppressLint
+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
+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.AnimeHttpSource
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.util.asJsoup
+import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.json.Json
+import okhttp3.HttpUrl.Companion.toHttpUrl
+import okhttp3.Request
+import okhttp3.Response
+import org.jsoup.nodes.Element
+import uy.kohesive.injekt.Injekt
+import uy.kohesive.injekt.api.get
+import uy.kohesive.injekt.injectLazy
+import java.util.Locale
+
+class AnimeGG : ConfigurableAnimeSource, AnimeHttpSource() {
+
+    override val name = "AnimeGG"
+
+    override val baseUrl = "https://www.animegg.org"
+
+    override val lang = "en"
+
+    override val supportsLatest = true
+
+    private val json: Json by injectLazy()
+
+    private val preferences: SharedPreferences by lazy {
+        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    }
+
+    companion object {
+        private const val PREF_LANGUAGE_KEY = "preferred_language"
+        private const val PREF_LANGUAGE_DEFAULT = "[SUBBED]"
+        private val LANGUAGE_LIST = arrayOf("[SUBBED]", "[DUBBED]", "[RAW]")
+
+        private const val PREF_QUALITY_KEY = "preferred_quality"
+        private const val PREF_QUALITY_DEFAULT = "1080"
+        private val QUALITY_LIST = arrayOf("1080", "720", "480", "360")
+
+        private const val PREF_SERVER_KEY = "preferred_server"
+        private const val PREF_SERVER_DEFAULT = "AnimeGG"
+        private val SERVER_LIST = arrayOf("AnimeGG")
+    }
+
+    override fun animeDetailsParse(response: Response): SAnime {
+        val document = response.asJsoup()
+        val animeDetails = SAnime.create().apply {
+            title = document.selectFirst(".media-body h1")?.text()?.trim() ?: ""
+            status = if (document.location().contains("/series/")) SAnime.UNKNOWN else SAnime.COMPLETED
+            description = document.selectFirst(".ptext")?.text()
+            genre = document.select(".tagscat a").joinToString { it.text() }
+            thumbnail_url = document.selectFirst(".media .media-object")?.attr("abs:src")
+            document.select(".infoami span").map { it.text() }.map { textContent ->
+                when {
+                    "Status" in textContent -> status = parseStatus(textContent)
+                }
+            }
+        }
+        return animeDetails
+    }
+
+    private fun parseStatus(span: String): Int {
+        val status = span.substringAfter("Status:").trim()
+        return when {
+            "Completed" in status -> SAnime.COMPLETED
+            "Ongoing" in status -> SAnime.ONGOING
+            else -> SAnime.UNKNOWN
+        }
+    }
+
+    override fun popularAnimeRequest(page: Int) = GET("$baseUrl/popular-series?sortBy=hits&sortDirection=DESC&ongoing&limit=50&start=0", headers)
+
+    override fun popularAnimeParse(response: Response): AnimesPage {
+        val document = response.asJsoup()
+        val elements = document.select(".fea")
+        val animeList = elements.map { element ->
+            SAnime.create().apply {
+                title = element.selectFirst(".rightpop a")?.text()?.trim() ?: ""
+                thumbnail_url = element.selectFirst("img")?.attr("abs:src")
+                setUrlWithoutDomain(element.select(".rightpop a").attr("abs:href"))
+            }
+        }
+        return AnimesPage(animeList, false)
+    }
+
+    override fun latestUpdatesParse(response: Response) = popularAnimeParse(response)
+
+    override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/popular-series?sortBy=createdAt&sortDirection=DESC&ongoing&limit=50&start=0", headers)
+
+    override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
+        val filterList = if (filters.isEmpty()) getFilterList() else filters
+        val genreFilter = filterList.find { it is GenreFilter } as GenreFilter
+
+        return when {
+            query.isNotBlank() -> GET("$baseUrl/search/?q=$query", headers)
+            genreFilter.state != 0 -> GET("$baseUrl/${genreFilter.toUriPart()}/page/$page", headers)
+            else -> popularAnimeRequest(page)
+        }
+    }
+
+    override fun searchAnimeParse(response: Response): AnimesPage {
+        val document = response.asJsoup()
+        val elements = document.select(".mse")
+        val animeList = elements.map { element ->
+            SAnime.create().apply {
+                title = element.selectFirst(".first h2")?.text()?.trim() ?: ""
+                thumbnail_url = element.selectFirst("img")?.attr("abs:src")
+                setUrlWithoutDomain(element.attr("abs:href"))
+            }
+        }
+        return AnimesPage(animeList, false)
+    }
+
+    override fun episodeListParse(response: Response): List<SEpisode> {
+        val document = response.asJsoup()
+        return document.select(".newmanga li div").mapIndexed { idx, episode ->
+            val episodeNumber = episode.selectFirst(".anm_det_pop strong")?.getEpNumber() ?: (idx + 1F)
+            val title = episode.select(".anititle").text()
+            SEpisode.create().apply {
+                episode_number = episodeNumber
+                name = when {
+                    episodeNumber.formatEp() in title -> episode.select(".anititle").text()
+                    else -> "Episode ${episodeNumber.formatEp()} - ${episode.select(".anititle").text()}"
+                }
+                scanlator = episode.select(".btn-xs").joinToString { it.text() }
+                setUrlWithoutDomain(episode.select(".anm_det_pop").attr("abs:href"))
+            }
+        }
+    }
+
+    override fun videoListParse(response: Response): List<Video> {
+        val document = response.asJsoup()
+        return document.select("iframe").parallelCatchingFlatMapBlocking {
+            val mode = when (it.closest(".tab-pane")?.attr("id")) {
+                "subbed-Animegg" -> "[SUBBED]"
+                "dubbed-Animegg" -> "[DUBBED]"
+                "raw-Animegg" -> "[RAW]"
+                else -> ""
+            }
+
+            val link = it.attr("abs:src")
+            val embedPlayer = client.newCall(GET(link)).execute().asJsoup()
+            val scriptData = embedPlayer.selectFirst("script:containsData(var videoSources =)")?.data() ?: return@parallelCatchingFlatMapBlocking emptyList()
+            val host = link.toHttpUrl().host
+            val videoHeaders = headers.newBuilder().add("referer", "https://$host").build()
+            val jsonString = fixJsonString(scriptData.substringAfter("var videoSources = ").substringBefore(";"))
+            json.decodeFromString<Array<GgVideo>>(jsonString).map { video ->
+                val videoUrl = "https://$host${video.file}"
+                Video(videoUrl, "$mode AnimeGG:${video.label}", videoUrl, headers = videoHeaders)
+            }
+        }
+    }
+
+    private fun fixJsonString(jsonString: String): String {
+        return jsonString.replace(Regex("""(\w+):"""), """"$1":""")
+            .replace(Regex("""(:\s)([^{\[}\]":\s,]+)"""), """$1"$2"""")
+            .replace(Regex("""(:\s)("[^"]*")"""), """$1$2""")
+    }
+
+    override fun List<Video>.sort(): List<Video> {
+        val quality = preferences.getString(PREF_QUALITY_KEY, PREF_QUALITY_DEFAULT)!!
+        val server = preferences.getString(PREF_SERVER_KEY, PREF_SERVER_DEFAULT)!!
+        val lang = preferences.getString(PREF_LANGUAGE_KEY, PREF_LANGUAGE_DEFAULT)!!
+        return this.sortedWith(
+            compareBy(
+                { it.quality.contains(lang) },
+                { it.quality.contains(server, true) },
+                { it.quality.contains(quality) },
+                { Regex("""(\d+)p""").find(it.quality)?.groupValues?.get(1)?.toIntOrNull() ?: 0 },
+            ),
+        ).reversed()
+    }
+
+    override fun getFilterList(): AnimeFilterList = AnimeFilterList(
+        AnimeFilter.Header("La busqueda por texto ignora el filtro"),
+        GenreFilter(),
+    )
+
+    private class GenreFilter : UriPartFilter(
+        "Genre",
+        arrayOf(
+            Pair("<Seleccionar>", ""),
+            Pair("Películas", "peliculas"),
+            Pair("Series", "series"),
+        ),
+    )
+
+    private fun Element?.getEpNumber(): Float? {
+        val input = this?.text() ?: return null
+        val regex = Regex("""(\d+(\.\d+)?)(?:-\d+(\.\d+)?)?$""")
+        val matchResult = regex.find(input)
+        return matchResult?.groupValues?.get(1)?.toFloatOrNull()
+    }
+
+    @SuppressLint("DefaultLocale")
+    private fun Float.formatEp(): String {
+        return if (this % 1 == 0.0f) {
+            String.format(Locale.US, "%.0f", this)
+        } else {
+            String.format(Locale.US, "%.1f", this)
+        }
+    }
+
+    private open class UriPartFilter(displayName: String, val vals: Array<Pair<String, String>>) :
+        AnimeFilter.Select<String>(displayName, vals.map { it.first }.toTypedArray()) {
+        fun toUriPart() = vals[state].second
+    }
+
+    @Serializable
+    data class GgVideo(
+        val file: String,
+        val label: String,
+    )
+
+    override fun setupPreferenceScreen(screen: PreferenceScreen) {
+        ListPreference(screen.context).apply {
+            key = PREF_LANGUAGE_KEY
+            title = "Preferred language"
+            entries = LANGUAGE_LIST
+            entryValues = LANGUAGE_LIST
+            setDefaultValue(PREF_LANGUAGE_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)
+
+        ListPreference(screen.context).apply {
+            key = PREF_SERVER_KEY
+            title = "Preferred server"
+            entries = SERVER_LIST
+            entryValues = SERVER_LIST
+            setDefaultValue(PREF_SERVER_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)
+
+        ListPreference(screen.context).apply {
+            key = PREF_QUALITY_KEY
+            title = "Preferred quality"
+            entries = QUALITY_LIST
+            entryValues = QUALITY_LIST
+            setDefaultValue(PREF_QUALITY_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)
+    }
+}
diff --git a/src/en/animekhor/build.gradle b/src/en/animekhor/build.gradle
index 31b4dfcb..3759e657 100644
--- a/src/en/animekhor/build.gradle
+++ b/src/en/animekhor/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.AnimeKhor'
     themePkg = 'animestream'
     baseUrl = 'https://animekhor.xyz'
-    overrideVersionCode = 3
+    overrideVersionCode = 4
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/animenosub/build.gradle b/src/en/animenosub/build.gradle
index c09f7a29..1056e91e 100644
--- a/src/en/animenosub/build.gradle
+++ b/src/en/animenosub/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Animenosub'
     themePkg = 'animestream'
     baseUrl = 'https://animenosub.com'
-    overrideVersionCode = 5
+    overrideVersionCode = 6
     isNsfw = true
 }
 
diff --git a/src/en/asiaflix/build.gradle b/src/en/asiaflix/build.gradle
index 15941dbc..1df9ee31 100644
--- a/src/en/asiaflix/build.gradle
+++ b/src/en/asiaflix/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AsiaFlix'
     extClass = '.AsiaFlix'
-    extVersionCode = 10
+    extVersionCode = 11
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/asianload/build.gradle b/src/en/asianload/build.gradle
index 54e5a1b9..22be6c78 100644
--- a/src/en/asianload/build.gradle
+++ b/src/en/asianload/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AsianLoad'
     extClass = '.AsianLoad'
-    extVersionCode = 39
+    extVersionCode = 40
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/dramacool/build.gradle b/src/en/dramacool/build.gradle
index 71537624..9d3ebd67 100644
--- a/src/en/dramacool/build.gradle
+++ b/src/en/dramacool/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'DramaCool'
     extClass = '.DramaCool'
-    extVersionCode = 48
+    extVersionCode = 49
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/gogoanime/build.gradle b/src/en/gogoanime/build.gradle
index cd11ff2b..6cc58233 100644
--- a/src/en/gogoanime/build.gradle
+++ b/src/en/gogoanime/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Gogoanime'
     extClass = '.GogoAnime'
-    extVersionCode = 83
+    extVersionCode = 84
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/multimovies/build.gradle b/src/en/multimovies/build.gradle
index a749b24d..37ac7992 100644
--- a/src/en/multimovies/build.gradle
+++ b/src/en/multimovies/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Multimovies'
     themePkg = 'dooplay'
     baseUrl = 'https://multimovies.art'
-    overrideVersionCode = 17
+    overrideVersionCode = 18
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/animefenix/build.gradle b/src/es/animefenix/build.gradle
index 280dec2c..4d35f0be 100644
--- a/src/es/animefenix/build.gradle
+++ b/src/es/animefenix/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Animefenix'
     extClass = '.Animefenix'
-    extVersionCode = 38
+    extVersionCode = 39
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/animeflv/build.gradle b/src/es/animeflv/build.gradle
index d6927a13..dc05b096 100644
--- a/src/es/animeflv/build.gradle
+++ b/src/es/animeflv/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AnimeFLV'
     extClass = '.AnimeFlv'
-    extVersionCode = 55
+    extVersionCode = 56
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/animeid/build.gradle b/src/es/animeid/build.gradle
index 3a4db1bc..fef93f6f 100644
--- a/src/es/animeid/build.gradle
+++ b/src/es/animeid/build.gradle
@@ -8,4 +8,5 @@ apply from: "$rootDir/common.gradle"
 
 dependencies {
     implementation(project(':lib:streamtape-extractor'))
+    implementation(project(':lib:streamwish-extractor'))
 }
diff --git a/src/es/animeid/src/eu/kanade/tachiyomi/animeextension/es/animeid/AnimeID.kt b/src/es/animeid/src/eu/kanade/tachiyomi/animeextension/es/animeid/AnimeID.kt
index e585ee2f..13be7d73 100644
--- a/src/es/animeid/src/eu/kanade/tachiyomi/animeextension/es/animeid/AnimeID.kt
+++ b/src/es/animeid/src/eu/kanade/tachiyomi/animeextension/es/animeid/AnimeID.kt
@@ -12,9 +12,9 @@ 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.lib.streamtapeextractor.StreamTapeExtractor
+import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.util.asJsoup
-import kotlinx.serialization.decodeFromString
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.JsonObject
 import kotlinx.serialization.json.jsonArray
@@ -117,15 +117,22 @@ class AnimeID : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
 
     override fun episodeFromElement(element: Element) = throw UnsupportedOperationException()
 
+    // ============================ Video Links =============================
+    private val streamwishExtractor by lazy { StreamWishExtractor(client, headers) }
+    private val streamtapeExtractor by lazy { StreamTapeExtractor(client) }
+
     override fun videoListParse(response: Response): List<Video> {
         val document = response.asJsoup()
         val videoList = mutableListOf<Video>()
         document.select("#partes div.container li.subtab div.parte").forEach { script ->
             val jsonString = script.attr("data")
             val jsonUnescape = unescapeJava(jsonString)!!.replace("\\", "")
-            val url = jsonUnescape.substringAfter("src=\"").substringBefore("\"").replace("\\\\", "\\")
-            if (url.contains("streamtape")) {
-                StreamTapeExtractor(client).videoFromUrl(url)?.let { videoList.add(it) }
+            val url = fetchUrls(jsonUnescape).firstOrNull()?.replace("\\\\", "\\") ?: ""
+            if (url.contains("streamtape") || url.contains("tape") || url.contains("stp")) {
+                streamtapeExtractor.videosFromUrl(url).also(videoList::addAll)
+            }
+            if (url.contains("wish") || url.contains("fviplions") || url.contains("obeywish")) {
+                streamwishExtractor.videosFromUrl(url, videoNameGen = { "StreamWish:$it" }).also(videoList::addAll)
             }
         }
         return videoList
@@ -147,6 +154,12 @@ class AnimeID : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
         return processed
     }
 
+    private fun fetchUrls(text: String?): List<String> {
+        if (text.isNullOrEmpty()) return listOf()
+        val linkRegex = "(http|ftp|https):\\/\\/([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])".toRegex()
+        return linkRegex.findAll(text).map { it.value.trim().removeSurrounding("\"") }.toList()
+    }
+
     override fun animeDetailsParse(document: Document): SAnime {
         val anime = SAnime.create()
         anime.thumbnail_url = document.selectFirst("#anime figure img.cover")!!.attr("abs:src")
diff --git a/src/es/animelatinohd/build.gradle b/src/es/animelatinohd/build.gradle
index 5a1778aa..cd362f66 100644
--- a/src/es/animelatinohd/build.gradle
+++ b/src/es/animelatinohd/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AnimeLatinoHD'
     extClass = '.AnimeLatinoHD'
-    extVersionCode = 32
+    extVersionCode = 33
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/animemovil/build.gradle b/src/es/animemovil/build.gradle
index ac1700aa..e8956deb 100644
--- a/src/es/animemovil/build.gradle
+++ b/src/es/animemovil/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AnimeMovil'
     extClass = '.AnimeMovil'
-    extVersionCode = 14
+    extVersionCode = 15
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/asialiveaction/build.gradle b/src/es/asialiveaction/build.gradle
index 62f60eda..7d5593f1 100644
--- a/src/es/asialiveaction/build.gradle
+++ b/src/es/asialiveaction/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AsiaLiveAction'
     extClass = '.AsiaLiveAction'
-    extVersionCode = 30
+    extVersionCode = 31
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/cine24h/build.gradle b/src/es/cine24h/build.gradle
new file mode 100644
index 00000000..6d442570
--- /dev/null
+++ b/src/es/cine24h/build.gradle
@@ -0,0 +1,14 @@
+ext {
+    extName = 'Cine24h'
+    extClass = '.Cine24h'
+    extVersionCode = 1
+}
+
+apply from: "$rootDir/common.gradle"
+
+dependencies {
+    implementation(project(':lib:fastream-extractor'))
+    implementation(project(':lib:dood-extractor'))
+    implementation(project(':lib:filemoon-extractor'))
+    implementation(project(':lib:voe-extractor'))
+}
\ No newline at end of file
diff --git a/src/es/cine24h/res/mipmap-hdpi/ic_launcher.png b/src/es/cine24h/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..c009cb2022c53d10d874c2cb8239cc2d7b6d6378
GIT binary patch
literal 5366
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
UY;kbo-2eap07*qoM6N<$f+`Gl0RR91

literal 0
HcmV?d00001

diff --git a/src/es/cine24h/res/mipmap-mdpi/ic_launcher.png b/src/es/cine24h/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d7030cd84b89d873a31f2104e72b9436fc3ed73
GIT binary patch
literal 2510
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
Y8%ZFO$9eUPKmY&$07*qoM6N<$g41O0`~Uy|

literal 0
HcmV?d00001

diff --git a/src/es/cine24h/res/mipmap-xhdpi/ic_launcher.png b/src/es/cine24h/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f9264e754f0725dc52852785ed895fcdfa53ba1
GIT binary patch
literal 7849
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

literal 0
HcmV?d00001

diff --git a/src/es/cine24h/res/mipmap-xxhdpi/ic_launcher.png b/src/es/cine24h/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..0b5c469b6a9bb12e894b080ec60b5f94bc97f8a9
GIT binary patch
literal 15918
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

literal 0
HcmV?d00001

diff --git a/src/es/cine24h/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/cine24h/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..f78035a726f0284554ae1eb00ba0a08f76585c26
GIT binary patch
literal 26476
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

literal 0
HcmV?d00001

diff --git a/src/es/cine24h/src/eu/kanade/tachiyomi/animeextension/es/cine24h/Cine24h.kt b/src/es/cine24h/src/eu/kanade/tachiyomi/animeextension/es/cine24h/Cine24h.kt
new file mode 100644
index 00000000..9530e3de
--- /dev/null
+++ b/src/es/cine24h/src/eu/kanade/tachiyomi/animeextension/es/cine24h/Cine24h.kt
@@ -0,0 +1,272 @@
+package eu.kanade.tachiyomi.animeextension.es.cine24h
+
+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
+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.AnimeHttpSource
+import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
+import eu.kanade.tachiyomi.lib.fastreamextractor.FastreamExtractor
+import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
+import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.util.asJsoup
+import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking
+import okhttp3.Request
+import okhttp3.Response
+import uy.kohesive.injekt.Injekt
+import uy.kohesive.injekt.api.get
+import java.util.Calendar
+
+open class Cine24h : ConfigurableAnimeSource, AnimeHttpSource() {
+
+    override val name = "Cine24h"
+
+    override val baseUrl = "https://cine24h.online"
+
+    override val lang = "es"
+
+    override val supportsLatest = true
+
+    private val preferences: SharedPreferences by lazy {
+        Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
+    }
+
+    companion object {
+        private const val PREF_QUALITY_KEY = "preferred_quality"
+        private const val PREF_QUALITY_DEFAULT = "1080"
+        private val QUALITY_LIST = arrayOf("1080", "720", "480", "360")
+
+        private const val PREF_SERVER_KEY = "preferred_server"
+        private const val PREF_SERVER_DEFAULT = "Voe"
+        private val SERVER_LIST = arrayOf("Voe", "Fastream", "Filemoon", "Doodstream")
+    }
+
+    override fun animeDetailsParse(response: Response): SAnime {
+        val document = response.asJsoup()
+        val animeDetails = SAnime.create().apply {
+            description = document.selectFirst(".Single .Description")?.text()
+            genre = document.select(".Single .InfoList a").joinToString { it.text() }
+            thumbnail_url = document.selectFirst(".Single .Image img")?.getImageUrl()?.replace("/w185/", "/w500/")
+            if (document.location().contains("/movie/")) {
+                status = SAnime.COMPLETED
+            } else {
+                val statusText = document.select(".InfoList .AAIco-adjust").map { it.text() }
+                    .find { "En Producción:" in it }?.substringAfter("En Producción:")?.trim()
+                status = when (statusText) { "Sí" -> SAnime.ONGOING else -> SAnime.COMPLETED }
+            }
+        }
+        return animeDetails
+    }
+
+    override fun popularAnimeRequest(page: Int) = GET("$baseUrl/peliculas-mas-vistas/page/$page", headers)
+
+    override fun popularAnimeParse(response: Response): AnimesPage {
+        val document = response.asJsoup()
+        val elements = document.select(".TPost a:not([target])")
+        val nextPage = document.select(".wp-pagenavi .next").any()
+        val animeList = elements.map { element ->
+            val lang = element.select(".Langu .sprite").attr("class").lowercase()
+            val titleItem = element.selectFirst(".Title")?.text()?.trim() ?: ""
+            val link = element.attr("abs:href")
+
+            val prefix = when {
+                lang.contains("sub") || titleItem.lowercase().contains("(sub)") || link.contains("-sub") -> "\uD83C\uDDFA\uD83C\uDDF8 "
+                lang.contains("lat") || titleItem.lowercase().contains("(lat)") || link.contains("-lat") -> "\uD83C\uDDF2\uD83C\uDDFD "
+                lang.contains("esp") || titleItem.lowercase().contains("(es)") || link.contains("-es") -> "\uD83C\uDDEA\uD83C\uDDF8 "
+                else -> ""
+            }
+            SAnime.create().apply {
+                title = prefix + titleItem
+                thumbnail_url = element.selectFirst(".Image img")?.getImageUrl()?.replace("/w185/", "/w300/")
+                setUrlWithoutDomain(link)
+            }
+        }
+        return AnimesPage(animeList, nextPage)
+    }
+
+    override fun latestUpdatesParse(response: Response) = popularAnimeParse(response)
+
+    override fun latestUpdatesRequest(page: Int): Request {
+        val currentYear = Calendar.getInstance().get(Calendar.YEAR)
+        return GET("$baseUrl/page/$page/?s=trfilter&trfilter=1&years%5B0%5D=$currentYear#038;trfilter=1&years%5B0%5D=$currentYear", headers)
+    }
+
+    override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
+        val filterList = if (filters.isEmpty()) getFilterList() else filters
+        val genreFilter = filterList.find { it is GenreFilter } as GenreFilter
+
+        return when {
+            query.isNotBlank() -> GET("$baseUrl/page/$page/?s=$query", headers)
+            genreFilter.state != 0 -> GET("$baseUrl/${genreFilter.toUriPart()}/page/$page", headers)
+            else -> popularAnimeRequest(page)
+        }
+    }
+
+    override fun searchAnimeParse(response: Response) = popularAnimeParse(response)
+
+    override fun episodeListParse(response: Response): List<SEpisode> {
+        val document = response.asJsoup()
+        return if (document.location().contains("/movie/")) {
+            listOf(
+                SEpisode.create().apply {
+                    episode_number = 1f
+                    name = "PELÍCULA"
+                    scanlator = document.select(".AAIco-date_range").text().trim()
+                    setUrlWithoutDomain(document.location())
+                },
+            )
+        } else {
+            var episodeCounter = 1F
+            document.select(".AABox").flatMap { season ->
+                val noSeason = season.select(".Title").text().substringAfter("Temporada").trim()
+                season.select(".AABox .TPTblCn tr").map { ep ->
+                    SEpisode.create().apply {
+                        episode_number = episodeCounter++
+                        name = "T$noSeason - E${ep.select(".Num").text().trim()} - ${ep.select(".MvTbTtl a").text().trim()}"
+                        scanlator = ep.select(".MvTbTtl span").text()
+                        setUrlWithoutDomain(ep.select(".MvTbTtl a").attr("abs:href"))
+                    }
+                }
+            }.reversed()
+        }
+    }
+
+    override fun videoListParse(response: Response): List<Video> {
+        val document = response.asJsoup()
+
+        return document.select(".TPlayerTb").map { org.jsoup.nodes.Entities.unescape(it.html()) }.parallelCatchingFlatMapBlocking {
+            val urlEmbed = it.substringAfter("src=\"").substringBefore("\"").replace("&#038;", "&")
+            val link = client.newCall(GET(urlEmbed)).execute().asJsoup().selectFirst("iframe")?.attr("src") ?: ""
+            serverVideoResolver(link)
+        }
+    }
+
+    /*--------------------------------Video extractors------------------------------------*/
+    private val filemoonExtractor by lazy { FilemoonExtractor(client) }
+    private val doodExtractor by lazy { DoodExtractor(client) }
+    private val voeExtractor by lazy { VoeExtractor(client) }
+
+    private fun serverVideoResolver(url: String): List<Video> {
+        val embedUrl = url.lowercase()
+        return when {
+            embedUrl.contains("fastream") -> {
+                val link = if (url.contains("emb.html")) "https://fastream.to/embed-${url.split("/").last()}.html" else url
+                FastreamExtractor(client, headers).videosFromUrl(link)
+            }
+            embedUrl.contains("filemoon") || embedUrl.contains("moonplayer") -> filemoonExtractor.videosFromUrl(url, prefix = "Filemoon:")
+            embedUrl.contains("voe") -> voeExtractor.videosFromUrl(url)
+            embedUrl.contains("dood") -> doodExtractor.videosFromUrl(url)
+            else -> emptyList()
+        }
+    }
+
+    override fun List<Video>.sort(): List<Video> {
+        val quality = preferences.getString(PREF_QUALITY_KEY, PREF_QUALITY_DEFAULT)!!
+        val server = preferences.getString(PREF_SERVER_KEY, PREF_SERVER_DEFAULT)!!
+        return this.sortedWith(
+            compareBy(
+                { it.quality.contains(server, true) },
+                { it.quality.contains(quality) },
+                { Regex("""(\d+)p""").find(it.quality)?.groupValues?.get(1)?.toIntOrNull() ?: 0 },
+            ),
+        ).reversed()
+    }
+
+    override fun getFilterList(): AnimeFilterList = AnimeFilterList(
+        AnimeFilter.Header("La busqueda por texto ignora el filtro"),
+        GenreFilter(),
+    )
+
+    private class GenreFilter : UriPartFilter(
+        "Género",
+        arrayOf(
+            Pair("<Seleccionar>", ""),
+            Pair("Películas", "peliculas"),
+            Pair("Series", "series"),
+            Pair("Acción", "category/accion"),
+            Pair("Animación", "category/animacion"),
+            Pair("Anime", "category/anime"),
+            Pair("Aventura", "category/aventura"),
+            Pair("Bélica", "category/belica"),
+            Pair("Ciencia ficción", "category/ciencia-ficcion"),
+            Pair("Comedia", "category/comedia"),
+            Pair("Crimen", "category/crimen"),
+            Pair("Documental", "category/documental"),
+            Pair("Drama", "category/drama"),
+            Pair("Familia", "category/familia"),
+            Pair("Fantasía", "category/fantasia"),
+            Pair("Gerra", "category/gerra"),
+            Pair("Historia", "category/historia"),
+            Pair("Misterio", "category/misterio"),
+            Pair("Música", "category/musica"),
+            Pair("Navidad", "category/navidad"),
+            Pair("Película de TV", "category/pelicula-de-tv"),
+            Pair("Romance", "category/romance"),
+            Pair("Suspenso", "category/suspense"),
+            Pair("Terror", "category/terror"),
+            Pair("Western", "category/western"),
+        ),
+    )
+
+    private open class UriPartFilter(displayName: String, val vals: Array<Pair<String, String>>) :
+        AnimeFilter.Select<String>(displayName, vals.map { it.first }.toTypedArray()) {
+        fun toUriPart() = vals[state].second
+    }
+
+    protected open fun org.jsoup.nodes.Element.getImageUrl(): String? {
+        return when {
+            isValidUrl("data-src") -> attr("abs:data-src")
+            isValidUrl("data-lazy-src") -> attr("abs:data-lazy-src")
+            isValidUrl("srcset") -> attr("abs:srcset").substringBefore(" ")
+            isValidUrl("src") -> attr("abs:src")
+            else -> ""
+        }
+    }
+
+    protected open fun org.jsoup.nodes.Element.isValidUrl(attrName: String): Boolean {
+        if (!hasAttr(attrName)) return false
+        return !attr(attrName).contains("data:image/")
+    }
+
+    override fun setupPreferenceScreen(screen: PreferenceScreen) {
+        ListPreference(screen.context).apply {
+            key = PREF_SERVER_KEY
+            title = "Preferred server"
+            entries = SERVER_LIST
+            entryValues = SERVER_LIST
+            setDefaultValue(PREF_SERVER_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)
+
+        ListPreference(screen.context).apply {
+            key = PREF_QUALITY_KEY
+            title = "Preferred quality"
+            entries = QUALITY_LIST
+            entryValues = QUALITY_LIST
+            setDefaultValue(PREF_QUALITY_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)
+    }
+}
diff --git a/src/es/cinecalidad/build.gradle b/src/es/cinecalidad/build.gradle
index 23479b30..611c2857 100644
--- a/src/es/cinecalidad/build.gradle
+++ b/src/es/cinecalidad/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'CineCalidad'
     extClass = '.CineCalidad'
-    extVersionCode = 1
+    extVersionCode = 2
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/cineplus123/build.gradle b/src/es/cineplus123/build.gradle
index 04c4e41c..3e1ad7d8 100644
--- a/src/es/cineplus123/build.gradle
+++ b/src/es/cineplus123/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Cineplus123'
     themePkg = 'dooplay'
     baseUrl = 'https://cineplus123.org'
-    overrideVersionCode = 0
+    overrideVersionCode = 1
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/cuevana/build.gradle b/src/es/cuevana/build.gradle
index caa81a5b..c4836d6a 100644
--- a/src/es/cuevana/build.gradle
+++ b/src/es/cuevana/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Cuevana'
     extClass = '.CuevanaFactory'
-    extVersionCode = 32
+    extVersionCode = 33
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/doramasflix/build.gradle b/src/es/doramasflix/build.gradle
index f8388d50..4da08891 100644
--- a/src/es/doramasflix/build.gradle
+++ b/src/es/doramasflix/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Doramasflix'
     extClass = '.Doramasflix'
-    extVersionCode = 21
+    extVersionCode = 22
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/ennovelas/build.gradle b/src/es/ennovelas/build.gradle
index 04b1de25..f8f3e452 100644
--- a/src/es/ennovelas/build.gradle
+++ b/src/es/ennovelas/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'EnNovelas'
     extClass = '.EnNovelas'
-    extVersionCode = 11
+    extVersionCode = 12
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/gnula/build.gradle b/src/es/gnula/build.gradle
index 18ae68fc..82f566f1 100644
--- a/src/es/gnula/build.gradle
+++ b/src/es/gnula/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Gnula'
     extClass = '.Gnula'
-    extVersionCode = 18
+    extVersionCode = 19
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/hackstore/build.gradle b/src/es/hackstore/build.gradle
index 21ac06f9..281d95a1 100644
--- a/src/es/hackstore/build.gradle
+++ b/src/es/hackstore/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Hackstore'
     extClass = '.Hackstore'
-    extVersionCode = 11
+    extVersionCode = 12
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/hentaila/build.gradle b/src/es/hentaila/build.gradle
index c7b1da7d..b9de6ec6 100644
--- a/src/es/hentaila/build.gradle
+++ b/src/es/hentaila/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'HentaiLA'
     extClass = '.Hentaila'
-    extVersionCode = 24
+    extVersionCode = 25
     isNsfw = true
 }
 
diff --git a/src/es/hentaitk/build.gradle b/src/es/hentaitk/build.gradle
index c3e8c590..871a064a 100644
--- a/src/es/hentaitk/build.gradle
+++ b/src/es/hentaitk/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'HentaiTk'
     extClass = '.Hentaitk'
-    extVersionCode = 1
+    extVersionCode = 2
     isNsfw = true
 }
 
diff --git a/src/es/jkanime/build.gradle b/src/es/jkanime/build.gradle
index 44d2f950..bd2f3829 100644
--- a/src/es/jkanime/build.gradle
+++ b/src/es/jkanime/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Jkanime'
     extClass = '.Jkanime'
-    extVersionCode = 23
+    extVersionCode = 24
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/lacartoons/build.gradle b/src/es/lacartoons/build.gradle
index 1cf6e6b4..e1272ba5 100644
--- a/src/es/lacartoons/build.gradle
+++ b/src/es/lacartoons/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'LACartoons'
     extClass = '.Lacartoons'
-    extVersionCode = 3
+    extVersionCode = 4
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/legionanime/build.gradle b/src/es/legionanime/build.gradle
index 9394c2e4..2e9a6175 100644
--- a/src/es/legionanime/build.gradle
+++ b/src/es/legionanime/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'LegionAnime'
     extClass = '.LegionAnime'
-    extVersionCode = 31
+    extVersionCode = 32
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/metroseries/build.gradle b/src/es/metroseries/build.gradle
index affe0d95..663d2c8f 100644
--- a/src/es/metroseries/build.gradle
+++ b/src/es/metroseries/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'MetroSeries'
     extClass = '.MetroSeries'
-    extVersionCode = 10
+    extVersionCode = 11
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/mundodonghua/build.gradle b/src/es/mundodonghua/build.gradle
index 856c58d3..209f76a0 100644
--- a/src/es/mundodonghua/build.gradle
+++ b/src/es/mundodonghua/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'MundoDonghua'
     extClass = '.MundoDonghua'
-    extVersionCode = 22
+    extVersionCode = 23
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/pelisforte/build.gradle b/src/es/pelisforte/build.gradle
index b1af23e6..9d3c8e42 100644
--- a/src/es/pelisforte/build.gradle
+++ b/src/es/pelisforte/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'PelisForte'
     extClass = '.PelisForte'
-    extVersionCode = 15
+    extVersionCode = 16
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/pelisplushd/build.gradle b/src/es/pelisplushd/build.gradle
index 04f52e34..afad4904 100644
--- a/src/es/pelisplushd/build.gradle
+++ b/src/es/pelisplushd/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Pelisplushd'
     extClass = '.PelisplushdFactory'
-    extVersionCode = 56
+    extVersionCode = 57
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/tioanimeh/build.gradle b/src/es/tioanimeh/build.gradle
index 247e7cde..2fb10532 100644
--- a/src/es/tioanimeh/build.gradle
+++ b/src/es/tioanimeh/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'TioanimeH'
     extClass = '.TioanimeHFactory'
-    extVersionCode = 17
+    extVersionCode = 18
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/tiodonghua/build.gradle b/src/es/tiodonghua/build.gradle
index 8e5fcbc3..4a464672 100644
--- a/src/es/tiodonghua/build.gradle
+++ b/src/es/tiodonghua/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Tiodonghua'
     themePkg = 'animestream'
     baseUrl = 'https://anime.tiodonghua.com'
-    overrideVersionCode = 3
+    overrideVersionCode = 4
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/es/veranimes/build.gradle b/src/es/veranimes/build.gradle
index ffbb4521..1b55eb6a 100644
--- a/src/es/veranimes/build.gradle
+++ b/src/es/veranimes/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'VerAnimes'
     extClass = '.VerAnimes'
-    extVersionCode = 1
+    extVersionCode = 2
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/fr/anisama/build.gradle b/src/fr/anisama/build.gradle
index 0e045010..d77d3791 100644
--- a/src/fr/anisama/build.gradle
+++ b/src/fr/anisama/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'AniSama'
     extClass = '.AniSama'
-    extVersionCode = 6
+    extVersionCode = 7
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/fr/empirestreaming/build.gradle b/src/fr/empirestreaming/build.gradle
index 36b79859..24b11fed 100644
--- a/src/fr/empirestreaming/build.gradle
+++ b/src/fr/empirestreaming/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'EmpireStreaming'
     extClass = '.EmpireStreaming'
-    extVersionCode = 16
+    extVersionCode = 17
 }
 apply from: "$rootDir/common.gradle"
 
diff --git a/src/fr/otakufr/build.gradle b/src/fr/otakufr/build.gradle
index 44f88615..2bff1976 100644
--- a/src/fr/otakufr/build.gradle
+++ b/src/fr/otakufr/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'OtakuFR'
     extClass = '.OtakuFR'
-    extVersionCode = 12
+    extVersionCode = 13
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/fr/wiflix/build.gradle b/src/fr/wiflix/build.gradle
index 50e7415a..9eb30942 100644
--- a/src/fr/wiflix/build.gradle
+++ b/src/fr/wiflix/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Wiflix'
     themePkg = 'datalifeengine'
     baseUrl = 'https://wiflix.voto'
-    overrideVersionCode = 6
+    overrideVersionCode = 7
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/id/otakudesu/build.gradle b/src/id/otakudesu/build.gradle
index 5c6cd269..c7aca988 100644
--- a/src/id/otakudesu/build.gradle
+++ b/src/id/otakudesu/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'OtakuDesu'
     extClass = '.OtakuDesu'
-    extVersionCode = 25
+    extVersionCode = 26
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/it/toonitalia/build.gradle b/src/it/toonitalia/build.gradle
index fbe0abc6..b4c6f1dd 100644
--- a/src/it/toonitalia/build.gradle
+++ b/src/it/toonitalia/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Toonitalia'
     extClass = '.Toonitalia'
-    extVersionCode = 21
+    extVersionCode = 22
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/pt/animesgratis/build.gradle b/src/pt/animesgratis/build.gradle
index d5890543..4c0078ae 100644
--- a/src/pt/animesgratis/build.gradle
+++ b/src/pt/animesgratis/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Bakashi'
     themePkg = 'dooplay'
     baseUrl = 'https://bakashi.tv'
-    overrideVersionCode = 11
+    overrideVersionCode = 12
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/pt/pobreflix/build.gradle b/src/pt/pobreflix/build.gradle
index 0c50ce99..ec1d8eb7 100644
--- a/src/pt/pobreflix/build.gradle
+++ b/src/pt/pobreflix/build.gradle
@@ -3,7 +3,7 @@ ext {
     extClass = '.Pobreflix'
     themePkg = 'dooplay'
     baseUrl = 'https://pobreflix1.art'
-    overrideVersionCode = 9
+    overrideVersionCode = 10
     isNsfw = true
 }
 
diff --git a/src/tr/animeler/build.gradle b/src/tr/animeler/build.gradle
index 911d456e..3db2d12c 100644
--- a/src/tr/animeler/build.gradle
+++ b/src/tr/animeler/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Animeler'
     extClass = '.Animeler'
-    extVersionCode = 13
+    extVersionCode = 14
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/tr/anizm/build.gradle b/src/tr/anizm/build.gradle
index 093580e0..38de0fdb 100644
--- a/src/tr/anizm/build.gradle
+++ b/src/tr/anizm/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Anizm'
     extClass = '.Anizm'
-    extVersionCode = 21
+    extVersionCode = 22
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/tr/tranimeizle/build.gradle b/src/tr/tranimeizle/build.gradle
index 0aba48a2..22ab0c85 100644
--- a/src/tr/tranimeizle/build.gradle
+++ b/src/tr/tranimeizle/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'TR Anime Izle'
     extClass = '.TRAnimeIzle'
-    extVersionCode = 17
+    extVersionCode = 18
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/tr/turkanime/build.gradle b/src/tr/turkanime/build.gradle
index bcb59b93..fc2c18d4 100644
--- a/src/tr/turkanime/build.gradle
+++ b/src/tr/turkanime/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Türk Anime TV'
     extClass = '.TurkAnime'
-    extVersionCode = 24
+    extVersionCode = 25
 }
 
 apply from: "$rootDir/common.gradle"