chore(src): Multiple improvements and fixes (#233)

* Hackstore improvements

* VerAnimes improvements

* Pelisplushd improvements

* AnimeFenix improvements

* AnimeFlv Improvements

* AsiaLiveAction improvements

* TioAnime improvements and VidGuardExtractor added

* Replacing VidGuardExtractor files in extensions

* oppstrem fixed

Closes #220
This commit is contained in:
imper1aldev 2024-09-14 06:53:22 -06:00 committed by GitHub
parent 6dc7b288e6
commit 41a6b6c788
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
60 changed files with 1213 additions and 1432 deletions

View file

@ -1,7 +1,7 @@
ext {
extName = 'Oppai Stream'
extClass = '.OppaiStream'
extVersionCode = 5
extVersionCode = 6
isNsfw = true
}

View file

@ -14,24 +14,21 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
import eu.kanade.tachiyomi.animesource.model.SEpisode
import eu.kanade.tachiyomi.animesource.model.Track
import eu.kanade.tachiyomi.animesource.model.Video
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.util.asJsoup
import eu.kanade.tachiyomi.util.parseAs
import kotlinx.serialization.json.Json
import okhttp3.FormBody
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Request
import okhttp3.Response
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
import java.net.URLEncoder.encode
class OppaiStream : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
class OppaiStream : AnimeHttpSource(), ConfigurableAnimeSource {
override val name = "Oppai Stream"
@ -47,30 +44,18 @@ class OppaiStream : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
}
private val json: Json by injectLazy()
private val searchAnimeSelector = "div.episode-shown > div > a"
// ============================== Popular ===============================
override fun popularAnimeRequest(page: Int) = GET("$baseUrl/$SEARCH_PATH?order=views&page=$page&limit=$SEARCH_LIMIT")
override fun popularAnimeParse(response: Response) = searchAnimeParse(response)
override fun popularAnimeSelector() = searchAnimeSelector()
override fun popularAnimeFromElement(element: Element) = searchAnimeFromElement(element)
override fun popularAnimeNextPageSelector() = null
// =============================== Latest ===============================
override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/$SEARCH_PATH?order=uploaded&page=$page&limit=$SEARCH_LIMIT")
override fun latestUpdatesParse(response: Response) = searchAnimeParse(response)
override fun latestUpdatesSelector() = searchAnimeSelector()
override fun latestUpdatesFromElement(element: Element) = searchAnimeFromElement(element)
override fun latestUpdatesNextPageSelector() = null
// =============================== Search ===============================
override fun getFilterList() = FILTERS
@ -107,29 +92,23 @@ class OppaiStream : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
return GET(url, headers)
}
override fun searchAnimeSelector() = "div.episode-shown > div > a"
override fun searchAnimeNextPageSelector() = null
override fun searchAnimeParse(response: Response): AnimesPage {
val document = response.asJsoup()
val elements = document.select(searchAnimeSelector())
val elements = document.select(searchAnimeSelector)
val anime = elements.map(::searchAnimeFromElement).distinctBy { it.title }
val hasNextPage = elements.size >= SEARCH_LIMIT
return AnimesPage(anime, hasNextPage)
}
override fun searchAnimeFromElement(element: Element) = SAnime.create().apply {
private fun searchAnimeFromElement(element: Element) = SAnime.create().apply {
thumbnail_url = element.selectFirst("img.cover-img-in")?.attr("abs:src")
title = element.selectFirst(".title-ep")!!.text().replace(TITLE_CLEANUP_REGEX, "")
setUrlWithoutDomain(element.attr("exur").fixLink())
setUrlWithoutDomain(element.attr("exur").ifEmpty { element.attr("href") }.fixLink())
}
// =========================== Anime Details ============================
override fun animeDetailsParse(document: Document) = SAnime.create().apply {
override fun animeDetailsParse(response: Response) = SAnime.create().apply {
val document = response.asJsoup()
// Fetch from from Anilist when "Anilist Cover" is selected in settings
val name = document.selectFirst("div.episode-info > h1")!!.text().substringBefore(" Ep ")
title = name
@ -159,10 +138,8 @@ class OppaiStream : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
return doc.select("div.more-same-eps .in-main-gr > a").map(::episodeFromElement).reversed()
}
override fun episodeListSelector() = "div.more-same-eps > div > div > a"
override fun episodeFromElement(element: Element) = SEpisode.create().apply {
setUrlWithoutDomain(element.attr("exur").fixLink())
private fun episodeFromElement(element: Element) = SEpisode.create().apply {
setUrlWithoutDomain(element.attr("exur").ifEmpty { element.attr("href") }.fixLink())
val num = element.selectFirst("font.ep")?.text() ?: "1"
name = "Episode $num"
episode_number = num.toFloatOrNull() ?: 1F
@ -189,10 +166,6 @@ class OppaiStream : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
}
}
override fun videoListSelector() = throw UnsupportedOperationException()
override fun videoFromElement(element: Element) = throw UnsupportedOperationException()
override fun List<Video>.sort(): List<Video> {
val quality = preferences.getString(PREF_QUALITY_KEY, PREF_QUALITY_DEFAULT)!!
@ -201,8 +174,6 @@ class OppaiStream : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
).reversed()
}
override fun videoUrlParse(document: Document) = throw UnsupportedOperationException()
// ============================== Settings ==============================
override fun setupPreferenceScreen(screen: PreferenceScreen) {
ListPreference(screen.context).apply {
@ -305,7 +276,7 @@ class OppaiStream : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
private const val PREF_QUALITY_KEY = "preferred_quality"
private const val PREF_QUALITY_TITLE = "Preferred quality"
private const val PREF_QUALITY_DEFAULT = "720p"
private const val PREF_QUALITY_DEFAULT = "1080p"
private val PREF_QUALITY_ENTRIES = arrayOf("2160p", "1080p", "720p")
private val PREF_QUALITY_VALUES = PREF_QUALITY_ENTRIES
@ -319,7 +290,7 @@ class OppaiStream : ParsedAnimeHttpSource(), ConfigurableAnimeSource {
private const val PREF_COVER_QUALITY_KEY = "preferred_cover_quality"
private const val PREF_COVER_QUALITY_TITLE = "Preferred Anilist cover quality - Beta"
private const val PREF_COVER_QUALITY_DEFAULT = "large"
private const val PREF_COVER_QUALITY_DEFAULT = "extraLarge"
private val PREF_COVER_QUALITY_ENTRIES = arrayOf("Extra Large", "Large")
private val PREF_COVER_QUALITY_VALUES = arrayOf("extraLarge", "large")
}