From 2480a5576f2870c732504f548d88bee9a513dfdf Mon Sep 17 00:00:00 2001
From: SonoPG <38359416+PGgamer2@users.noreply.github.com>
Date: Sun, 19 Jan 2025 15:49:43 +0100
Subject: [PATCH 1/2] Set SecurityAW-gl cookie and update years filter

---
 .../it/animeworld/ANIMEWORLD.kt               | 22 ++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt b/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt
index f1f6fd92..d3cffa57 100644
--- a/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt
+++ b/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt
@@ -19,6 +19,7 @@ import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.util.asJsoup
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.json.Json
+import okhttp3.Headers
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Request
 import okhttp3.Response
@@ -27,7 +28,6 @@ import org.jsoup.nodes.Element
 import uy.kohesive.injekt.Injekt
 import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
-import java.lang.Exception
 
 class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
 
@@ -47,10 +47,19 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
         Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
     }
 
+    override fun headersBuilder(): Headers.Builder {
+        return super.headersBuilder().apply {
+            client.newCall(GET(baseUrl)).execute().use { response ->
+                val (secCookie) = """document\.cookie="SecurityAW-gl=\s*([^\s;]+)""".toRegex().find(response.body.string())!!.destructured
+                set("Cookie", "SecurityAW-gl=$secCookie;")
+            }
+        }
+    }
+
     // Popular Anime - Same Format as Search
 
     override fun popularAnimeSelector(): String = searchAnimeSelector()
-    override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/filter?sort=6&page=$page")
+    override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/filter?sort=6&page=$page", headers)
     override fun popularAnimeFromElement(element: Element): SAnime = searchAnimeFromElement(element)
     override fun popularAnimeNextPageSelector(): String = searchAnimeNextPageSelector()
 
@@ -82,7 +91,7 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
 
     override fun videoListRequest(episode: SEpisode): Request {
         val iframe = baseUrl + episode.url
-        return GET(iframe)
+        return GET(iframe, headers)
     }
 
     override fun videoListParse(response: Response): List<Video> {
@@ -187,7 +196,7 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
     override fun searchAnimeNextPageSelector(): String = "div.paging-wrapper a#go-next-page"
 
     override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request =
-        GET("$baseUrl/filter?${getSearchParameters(filters)}&keyword=$query&page=$page")
+        GET("$baseUrl/filter?${getSearchParameters(filters)}&keyword=$query&page=$page", headers)
 
     // Details
 
@@ -213,7 +222,7 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
 
     // Latest - Same format as search
 
-    override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/updated?page=$page")
+    override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/updated?page=$page", headers)
     override fun latestUpdatesSelector(): String = searchAnimeSelector()
     override fun latestUpdatesNextPageSelector(): String = searchAnimeNextPageSelector()
     override fun latestUpdatesFromElement(element: Element): SAnime = searchAnimeFromElement(element)
@@ -336,6 +345,9 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
         Year("2020"),
         Year("2021"),
         Year("2022"),
+        Year("2023"),
+        Year("2024"),
+        Year("2025"),
     )
 
     internal class Type(val id: String, name: String) : AnimeFilter.CheckBox(name)

From 4152a4f846d7fc6b45bdce3c738849fb8a3902db Mon Sep 17 00:00:00 2001
From: SonoPG <38359416+PGgamer2@users.noreply.github.com>
Date: Sun, 19 Jan 2025 15:50:05 +0100
Subject: [PATCH 2/2] Update extVersionCode

---
 src/it/animeworld/build.gradle | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/it/animeworld/build.gradle b/src/it/animeworld/build.gradle
index 6d4c910e..fb7988f1 100644
--- a/src/it/animeworld/build.gradle
+++ b/src/it/animeworld/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'ANIMEWORLD.tv'
     extClass = '.ANIMEWORLD'
-    extVersionCode = 41
+    extVersionCode = 42
 }
 
 apply from: "$rootDir/common.gradle"
@@ -12,4 +12,4 @@ dependencies {
     implementation(project(':lib:streamhidevid-extractor'))
     implementation(project(':lib:vidguard-extractor'))
     implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
-}
\ No newline at end of file
+}