From 5ddb5f061bbe33084351e317d1154b8a96cc4fd9 Mon Sep 17 00:00:00 2001
From: Dark25 <nadiecaca2000@gmail.com>
Date: Thu, 22 Aug 2024 01:09:02 +0100
Subject: [PATCH] Fix(en/Hikari): The sub or dub fix has been modified (#165)

---
 src/all/hikari/build.gradle                   |  2 +-
 .../animeextension/all/hikari/Hikari.kt       | 33 ++++++++++++++++++-
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/src/all/hikari/build.gradle b/src/all/hikari/build.gradle
index c97c3cbb..490edc08 100644
--- a/src/all/hikari/build.gradle
+++ b/src/all/hikari/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Hikari'
     extClass = '.Hikari'
-    extVersionCode = 6
+    extVersionCode = 7
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/all/hikari/src/eu/kanade/tachiyomi/animeextension/all/hikari/Hikari.kt b/src/all/hikari/src/eu/kanade/tachiyomi/animeextension/all/hikari/Hikari.kt
index 325bbcb2..cc35e0cb 100644
--- a/src/all/hikari/src/eu/kanade/tachiyomi/animeextension/all/hikari/Hikari.kt
+++ b/src/all/hikari/src/eu/kanade/tachiyomi/animeextension/all/hikari/Hikari.kt
@@ -296,8 +296,39 @@ class Hikari : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
                 Pair(iframeSrc, name)
             }.filter { it.first.isNotEmpty() }
         }
-        val embedUrls = subEmbedUrls + dubEmbedUrls
 
+        val sdEmbedUrls = html.select(".servers-sub.\\&.dub div.item.server-item").flatMap { item ->
+            val name = item.text().trim() + " (Sub + Dub)"
+            val onClick = item.selectFirst("a")?.attr("onclick")
+            if (onClick == null) {
+                Log.e("Hikari", "onClick attribute is null for item: $item")
+                return@flatMap emptyList<Pair<String, String>>()
+            }
+
+            val match = embedRegex.find(onClick)?.groupValues
+            if (match == null) {
+                Log.e("Hikari", "No match found for onClick: $onClick")
+                return@flatMap emptyList<Pair<String, String>>()
+            }
+
+            val url = "$baseUrl/ajax/embed/${match[1]}/${match[2]}/${match[3]}"
+            val iframeList = client.newCall(
+                GET(url, headers),
+            ).execute().parseAs<List<String>>()
+
+            iframeList.map {
+                val iframeSrc = Jsoup.parseBodyFragment(it).selectFirst("iframe")?.attr("src")
+                if (iframeSrc == null) {
+                    Log.e("Hikari", "iframe src is null for URL: $url")
+                    return@map Pair("", "")
+                }
+                Pair(iframeSrc, name)
+            }.filter { it.first.isNotEmpty() }
+        }
+
+        val embedUrls = sdEmbedUrls.ifEmpty {
+            subEmbedUrls + dubEmbedUrls
+        }
         return embedUrls.parallelCatchingFlatMapBlocking {
             getVideosFromEmbed(it.first, it.second)
         }