Hstream : Fixed not showing in series format. (#1469)

* HStream.moe : Fixed search problem

* HStream.moe : Fixed search problem

* HStream.moe : Fixed not showing in series format.
This commit is contained in:
Nitin Dahale
2023-04-06 12:05:17 +05:30
committed by GitHub
parent 170cbbeab7
commit 6fd109afe2
2 changed files with 49 additions and 20 deletions

View File

@ -5,7 +5,7 @@ ext {
extName = 'Hstream' extName = 'Hstream'
pkgNameSuffix = 'en.hstream' pkgNameSuffix = 'en.hstream'
extClass = '.Hstream' extClass = '.Hstream'
extVersionCode = 2 extVersionCode = 4
libVersion = '13' libVersion = '13'
containsNsfw = true containsNsfw = true
} }

View File

@ -48,16 +48,16 @@ class Hstream : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
// Popular Anime // Popular Anime
override fun popularAnimeSelector(): String = "article.bs" override fun popularAnimeSelector(): String = "div.soralist div ul li a.series"
override fun popularAnimeRequest(page: Int): Request = override fun popularAnimeRequest(page: Int): Request =
GET("$baseUrl/hentai/search?page=$page") GET("$baseUrl/hentai/list?")
override fun popularAnimeFromElement(element: Element): SAnime { override fun popularAnimeFromElement(element: Element): SAnime {
val anime = SAnime.create() val anime = SAnime.create()
anime.setUrlWithoutDomain(baseUrl + element.select("a").attr("href")) anime.setUrlWithoutDomain(baseUrl + element.select("a.series").attr("href"))
anime.title = element.select("h2").text() anime.title = element.select("a.series").text()
anime.thumbnail_url = baseUrl + element.select("img").attr("src") anime.thumbnail_url = baseUrl + "/images" + element.select("a.series").attr("href") + "/cover.webp"
return anime return anime
} }
@ -95,11 +95,18 @@ class Hstream : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val videoUrls = mutableListOf<String>() val videoUrls = mutableListOf<String>()
val subtitleUrls = mutableListOf<Track>() val subtitleUrls = mutableListOf<Track>()
val languageMap = mapOf(
"eng" to "English",
)
for (url in urls) { for (url in urls) {
if (url.endsWith(".webm") || url.endsWith(".mp4")) { if (url.endsWith(".webm") || url.endsWith(".mp4")) {
videoUrls.add(url) videoUrls.add(url)
} else if (url.endsWith(".ass")) { } else if (url.endsWith(".ass")) {
subtitleUrls.add(Track(url, "English")) try {
val subName = url.split("/").last().split(".").first().toString()
subtitleUrls.add(Track(url, languageMap[subName].toString()))
} catch (e: Error) {}
} }
} }
@ -121,14 +128,18 @@ class Hstream : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
for (video in videoUrls) { for (video in videoUrls) {
val resolution = video.split('.') val resolution = video.split('.')
videoList.add(Video(video, resolution.get(resolution.size - 2), video, headers = newHeaders, subtitleTracks = sub)) try {
videoList.add(Video(video, resolution.get(resolution.size - 2), video, headers = newHeaders, subtitleTracks = sub))
} catch (e: Error) {
videoList.add(Video(video, resolution.get(resolution.size - 2), video, headers = newHeaders))
}
} }
return videoList return videoList
} }
private fun subLangOrder(tracks: List<Track>): List<Track> { private fun subLangOrder(tracks: List<Track>): List<Track> {
val language = preferences.getString("English", null) val language = preferences.getString(PREF_SUB_KEY, null)
if (language != null) { if (language != null) {
val newList = mutableListOf<Track>() val newList = mutableListOf<Track>()
var preferred = 0 var preferred = 0
@ -176,9 +187,9 @@ class Hstream : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
val anime = SAnime.create() val anime = SAnime.create()
if (filterSearch) { if (filterSearch) {
// filter search // filter search
anime.setUrlWithoutDomain(baseUrl + element.select("a").attr("href")) anime.setUrlWithoutDomain(baseUrl + element.select("a.series").attr("href"))
anime.title = element.select("h2").text() anime.title = element.select("a.series").text()
anime.thumbnail_url = baseUrl + element.select("img").attr("src") anime.thumbnail_url = baseUrl + "/images" + element.select("a.series").attr("href") + "/cover.webp"
return anime return anime
} else { } else {
// normal search // normal search
@ -191,16 +202,22 @@ class Hstream : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun searchAnimeNextPageSelector(): String = "ul.pagination li a[rel=next]" override fun searchAnimeNextPageSelector(): String = "ul.pagination li a[rel=next]"
override fun searchAnimeSelector(): String = "article.bs" override fun searchAnimeSelector(): String {
return if (filterSearch) {
"div.soralist div ul li a.series"
} else {
"article.bs"
}
}
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
val parameters = getSearchParameters(filters) val parameters = getSearchParameters(filters)
return if (query.isNotEmpty()) { return if (query.isNotEmpty()) {
filterSearch = false filterSearch = false
GET("$baseUrl/search?s=${query.replace(("[\\W]").toRegex(), " ")}") // regular search GET("$baseUrl/search?s=${query.replace(("[\\.]").toRegex(), "")}") // regular search
} else { } else {
filterSearch = true filterSearch = true
GET("$baseUrl/hentai/search?$parameters&page=$page") // filter search //work GET("$baseUrl/hentai/list?$parameters") // filter search //work
} }
} }
@ -229,15 +246,15 @@ class Hstream : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
// Latest // Latest
override fun latestUpdatesSelector(): String = "article.bs" override fun latestUpdatesSelector(): String = "div.soralist div ul li a.series"
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/hentai/search?order=latest&page=$page") override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/hentai/list?order=latest")
override fun latestUpdatesFromElement(element: Element): SAnime { override fun latestUpdatesFromElement(element: Element): SAnime {
val anime = SAnime.create() val anime = SAnime.create()
anime.setUrlWithoutDomain(baseUrl + element.select("a").attr("href")) anime.setUrlWithoutDomain(baseUrl + element.select("a.series").attr("href"))
anime.title = element.select("h2").text() anime.title = element.select("a.series").text()
anime.thumbnail_url = baseUrl + element.select("img").attr("src") anime.thumbnail_url = baseUrl + "/images" + element.select("a.series").attr("href") + "/cover.webp"
return anime return anime
} }
@ -263,8 +280,13 @@ class Hstream : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
} }
val subLangPref = ListPreference(screen.context).apply { val subLangPref = ListPreference(screen.context).apply {
key = PREF_SUB_KEY
title = PREF_SUB_TITLE
entries = PREF_SUB_ENTRIES
entryValues = PREF_SUB_ENTRIES
setDefaultValue("English") setDefaultValue("English")
summary = "%s" summary = "%s"
setOnPreferenceChangeListener { _, newValue -> setOnPreferenceChangeListener { _, newValue ->
val selected = newValue as String val selected = newValue as String
val index = findIndexOfValue(selected) val index = findIndexOfValue(selected)
@ -273,6 +295,7 @@ class Hstream : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
} }
} }
screen.addPreference(videoQualityPref) screen.addPreference(videoQualityPref)
screen.addPreference(subLangPref)
} }
// Filters // Filters
@ -436,5 +459,11 @@ class Hstream : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
private const val PREF_QUALITY_KEY = "preferred_quality" private const val PREF_QUALITY_KEY = "preferred_quality"
private const val PREF_QUALITY_TITLE = "Preferred video quality" private const val PREF_QUALITY_TITLE = "Preferred video quality"
private val PREF_QUALITY_ENTRIES = arrayOf("720p", "1080p", "2160p") private val PREF_QUALITY_ENTRIES = arrayOf("720p", "1080p", "2160p")
private const val PREF_SUB_KEY = "preferred_subLang"
private const val PREF_SUB_TITLE = "Preferred sub language"
private val PREF_SUB_ENTRIES = arrayOf(
"English",
)
} }
} }