Feat(all/Hikari): identify Sub or Dub (#156)

This commit is contained in:
Dark25 2024-08-18 23:07:24 +01:00 committed by GitHub
parent f72391c116
commit 9fbe135358
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 54 additions and 8 deletions

View file

@ -1,7 +1,7 @@
ext { ext {
extName = 'Hikari' extName = 'Hikari'
extClass = '.Hikari' extClass = '.Hikari'
extVersionCode = 5 extVersionCode = 6
} }
apply from: "$rootDir/common.gradle" apply from: "$rootDir/common.gradle"

View file

@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.animeextension.all.hikari package eu.kanade.tachiyomi.animeextension.all.hikari
import android.app.Application import android.app.Application
import android.util.Log
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
@ -233,24 +234,69 @@ class Hikari : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
override fun videoListParse(response: Response): List<Video> { override fun videoListParse(response: Response): List<Video> {
val html = response.parseAs<HtmlResponseDto>().toHtml(baseUrl) val html = response.parseAs<HtmlResponseDto>().toHtml(baseUrl)
Log.d("Hikari", html.toString())
val headers = headersBuilder() val headers = headersBuilder()
.set("Referer", response.request.url.toString()) .set("Referer", response.request.url.toString())
.build() .build()
val embedUrls = html.select(videoListSelector()).flatMap { val subEmbedUrls = html.select(".servers-sub div.item.server-item").flatMap { item ->
val name = it.text() val name = item.text().trim() + " (Sub)"
val onClick = it.selectFirst("a")!!.attr("onclick") val onClick = item.selectFirst("a")?.attr("onclick")
val match = embedRegex.find(onClick)!!.groupValues 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 url = "$baseUrl/ajax/embed/${match[1]}/${match[2]}/${match[3]}"
val iframeList = client.newCall( val iframeList = client.newCall(
GET(url, headers), GET(url, headers),
).execute().parseAs<List<String>>() ).execute().parseAs<List<String>>()
iframeList.map { iframeList.map {
Pair(Jsoup.parseBodyFragment(it).selectFirst("iframe")!!.attr("src"), name) 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 dubEmbedUrls = html.select(".servers-dub div.item.server-item").flatMap { item ->
val name = item.text().trim() + " (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 = subEmbedUrls + dubEmbedUrls
return embedUrls.parallelCatchingFlatMapBlocking { return embedUrls.parallelCatchingFlatMapBlocking {
getVideosFromEmbed(it.first, it.second) getVideosFromEmbed(it.first, it.second)
@ -258,7 +304,7 @@ class Hikari : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
} }
private fun getVideosFromEmbed(embedUrl: String, name: String): List<Video> = when { private fun getVideosFromEmbed(embedUrl: String, name: String): List<Video> = when {
name.contains("vidhide", true) -> vidHideExtractor.videosFromUrl(embedUrl) name.contains("vidhide", true) -> vidHideExtractor.videosFromUrl(embedUrl, videoNameGen = { s -> "$name - $s" })
embedUrl.contains("filemoon", true) -> { embedUrl.contains("filemoon", true) -> {
filemoonExtractor.videosFromUrl(embedUrl, prefix = "$name - ", headers = headers) filemoonExtractor.videosFromUrl(embedUrl, prefix = "$name - ", headers = headers)
} }