forked from AlmightyHak/extensions-source
Feat(all/Hikari): identify Sub or Dub (#156)
This commit is contained in:
parent
f72391c116
commit
9fbe135358
2 changed files with 54 additions and 8 deletions
|
@ -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"
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue