fix: Purge StreamSB extractor (#2042)
Co-authored-by: jmir1 <jhmiramon@gmail.com>
This commit is contained in:
@ -1,18 +0,0 @@
|
||||
plugins {
|
||||
id("com.android.library")
|
||||
id("kotlinx-serialization") // for the DTO
|
||||
kotlin("android")
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk = AndroidConfig.compileSdk
|
||||
namespace = "eu.kanade.tachiyomi.lib.streamsbextractor"
|
||||
|
||||
defaultConfig {
|
||||
minSdk = AndroidConfig.minSdk
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly(libs.bundles.common)
|
||||
}
|
@ -1,145 +0,0 @@
|
||||
package eu.kanade.tachiyomi.lib.streamsbextractor
|
||||
|
||||
import android.app.Application
|
||||
import eu.kanade.tachiyomi.animesource.model.Track
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.json.Json
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
class StreamSBExtractor(private val client: OkHttpClient) {
|
||||
|
||||
companion object {
|
||||
private const val PREF_ENDPOINT_KEY = "streamsb_api_endpoint"
|
||||
private const val PREF_ENDPOINT_DEFAULT = "/sources16"
|
||||
private const val ENDPOINT_URL = "https://raw.githubusercontent.com/Claudemirovsky/streamsb-endpoint/master/endpoint.txt"
|
||||
}
|
||||
|
||||
private val json: Json by injectLazy()
|
||||
|
||||
private val preferences by lazy {
|
||||
Injekt.get<Application>().getSharedPreferences(javaClass.simpleName, 0x0000)
|
||||
}
|
||||
|
||||
private fun getEndpoint() = preferences.getString(PREF_ENDPOINT_KEY, PREF_ENDPOINT_DEFAULT)!!
|
||||
|
||||
private fun updateEndpoint() {
|
||||
client.newCall(GET(ENDPOINT_URL)).execute()
|
||||
.use { it.body.string() }
|
||||
.let {
|
||||
preferences.edit().putString(PREF_ENDPOINT_KEY, it).commit()
|
||||
}
|
||||
}
|
||||
|
||||
protected fun bytesToHex(bytes: ByteArray): String {
|
||||
val hexArray = "0123456789ABCDEF".toCharArray()
|
||||
val hexChars = CharArray(bytes.size * 2)
|
||||
for (j in bytes.indices) {
|
||||
val v = bytes[j].toInt() and 0xFF
|
||||
|
||||
hexChars[j * 2] = hexArray[v ushr 4]
|
||||
hexChars[j * 2 + 1] = hexArray[v and 0x0F]
|
||||
}
|
||||
return String(hexChars)
|
||||
}
|
||||
|
||||
// animension, asianload and dramacool uses "common = false"
|
||||
private fun fixUrl(url: String, common: Boolean): String {
|
||||
val host = url.toHttpUrl().host
|
||||
val sbUrl = "https://$host" + getEndpoint()
|
||||
val id = url.substringAfter(host)
|
||||
.substringAfter("/e/")
|
||||
.substringAfter("/embed-")
|
||||
.substringBefore("?")
|
||||
.substringBefore(".html")
|
||||
.substringAfter("/")
|
||||
return sbUrl + if (common) {
|
||||
val hexBytes = bytesToHex(id.toByteArray())
|
||||
"/625a364258615242766475327c7c${hexBytes}7c7c4761574550654f7461566d347c7c73747265616d7362"
|
||||
} else {
|
||||
"/${bytesToHex("||$id||||streamsb".toByteArray())}/"
|
||||
}
|
||||
}
|
||||
|
||||
fun videosFromUrl(
|
||||
url: String,
|
||||
headers: Headers,
|
||||
prefix: String = "",
|
||||
suffix: String = "",
|
||||
common: Boolean = true,
|
||||
manualData: Boolean = false,
|
||||
externalSubs: List<Track> = emptyList(),
|
||||
): List<Video> {
|
||||
val trimmedUrl = url.trim() // Prevents some crashes
|
||||
val newHeaders = if (manualData) {
|
||||
headers
|
||||
} else {
|
||||
headers.newBuilder()
|
||||
.set("referer", trimmedUrl)
|
||||
.set("watchsb", "sbstream")
|
||||
.set("authority", "embedsb.com")
|
||||
.build()
|
||||
}
|
||||
return runCatching {
|
||||
val master = if (manualData) trimmedUrl else fixUrl(trimmedUrl, common)
|
||||
val request = client.newCall(GET(master, newHeaders)).execute()
|
||||
|
||||
val json = json.decodeFromString<Response>(
|
||||
if (request.code == 200) {
|
||||
request.use { it.body.string() }
|
||||
} else {
|
||||
request.close()
|
||||
updateEndpoint()
|
||||
client.newCall(GET(fixUrl(trimmedUrl, common), newHeaders))
|
||||
.execute()
|
||||
.use { it.body.string() }
|
||||
},
|
||||
)
|
||||
|
||||
val masterUrl = json.stream_data.file.trim('"')
|
||||
val subtitleList = json.stream_data.subs
|
||||
?.map { Track(it.file, it.label) }
|
||||
?: emptyList()
|
||||
|
||||
val masterPlaylist = client.newCall(GET(masterUrl, newHeaders))
|
||||
.execute()
|
||||
.use { it.body.string() }
|
||||
|
||||
val audioRegex = Regex("""#EXT-X-MEDIA:TYPE=AUDIO.*?NAME="(.*?)".*?URI="(.*?)"""")
|
||||
val audioList: List<Track> = audioRegex.findAll(masterPlaylist)
|
||||
.map {
|
||||
Track(
|
||||
it.groupValues[2], // Url
|
||||
it.groupValues[1], // Name
|
||||
)
|
||||
}.toList()
|
||||
|
||||
val separator = "#EXT-X-STREAM-INF"
|
||||
masterPlaylist.substringAfter(separator).split(separator).map {
|
||||
val resolution = it.substringAfter("RESOLUTION=")
|
||||
.substringBefore("\n")
|
||||
.substringAfter("x")
|
||||
.substringBefore(",") + "p"
|
||||
val quality = ("StreamSB:" + resolution).let {
|
||||
buildString {
|
||||
if (prefix.isNotBlank()) append("$prefix ")
|
||||
append(it)
|
||||
if (prefix.isNotBlank()) append(" $suffix")
|
||||
}
|
||||
}
|
||||
val videoUrl = it.substringAfter("\n").substringBefore("\n")
|
||||
Video(videoUrl, quality, videoUrl, headers = newHeaders, subtitleTracks = subtitleList + externalSubs, audioTracks = audioList)
|
||||
}
|
||||
}.getOrNull() ?: emptyList<Video>()
|
||||
}
|
||||
|
||||
fun videosFromDecryptedUrl(realUrl: String, headers: Headers, prefix: String = "", suffix: String = ""): List<Video> {
|
||||
return videosFromUrl(realUrl, headers, prefix, suffix, manualData = true)
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
package eu.kanade.tachiyomi.lib.streamsbextractor
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class Response(
|
||||
val stream_data: ResponseObject,
|
||||
) {
|
||||
@Serializable
|
||||
data class ResponseObject(
|
||||
val file: String,
|
||||
val subs: List<Subtitle>? = null,
|
||||
)
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class Subtitle(
|
||||
val label: String,
|
||||
val file: String,
|
||||
)
|
@ -1,6 +1,5 @@
|
||||
dependencies {
|
||||
implementation(project(":lib-mp4upload-extractor"))
|
||||
implementation(project(":lib-streamsb-extractor"))
|
||||
implementation(project(":lib-gdriveplayer-extractor"))
|
||||
implementation(project(":lib-streamtape-extractor"))
|
||||
implementation(project(":lib-yourupload-extractor"))
|
||||
|
@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||
@ -101,7 +100,6 @@ class AnimeIndo : AnimeStream(
|
||||
}
|
||||
|
||||
// ============================ Video Links =============================
|
||||
private val streamSbExtractor by lazy { StreamSBExtractor(client) }
|
||||
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
||||
private val gdrivePlayerExtractor by lazy { GdrivePlayerExtractor(client) }
|
||||
private val streamTapeExtractor by lazy { StreamTapeExtractor(client) }
|
||||
@ -111,7 +109,6 @@ class AnimeIndo : AnimeStream(
|
||||
override fun getVideoList(url: String, name: String): List<Video> {
|
||||
return with(name) {
|
||||
when {
|
||||
contains("streamsb") -> streamSbExtractor.videosFromUrl(url, headers)
|
||||
contains("streamtape") -> streamTapeExtractor.videoFromUrl(url)?.let(::listOf).orEmpty()
|
||||
contains("mp4") -> mp4uploadExtractor.videosFromUrl(url, headers)
|
||||
contains("yourupload") -> yourUploadExtractor.videoFromUrl(url, headers)
|
||||
|
@ -1,5 +1,4 @@
|
||||
dependencies {
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import eu.kanade.tachiyomi.animeextension.en.animekhor.extractors.StreamHideExtr
|
||||
import eu.kanade.tachiyomi.animeextension.en.animekhor.extractors.StreamWishExtractor
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||
|
||||
class AnimeKhor : AnimeStream(
|
||||
@ -15,16 +14,6 @@ class AnimeKhor : AnimeStream(
|
||||
// ============================ Video Links =============================
|
||||
|
||||
override fun getVideoList(url: String, name: String): List<Video> {
|
||||
val streamSbDomains = listOf(
|
||||
"sbhight", "sbrity", "sbembed.com", "sbembed1.com", "sbplay.org",
|
||||
"sbvideo.net", "streamsb.net", "sbplay.one", "cloudemb.com",
|
||||
"playersb.com", "tubesb.com", "sbplay1.com", "embedsb.com",
|
||||
"watchsb.com", "sbplay2.com", "japopav.tv", "viewsb.com",
|
||||
"sbfast", "sbfull.com", "javplaya.com", "ssbstream.net",
|
||||
"p1ayerjavseen.com", "sbthe.com", "vidmovie.xyz", "sbspeed.com",
|
||||
"streamsss.net", "sblanh.com", "tvmshow.com", "sbanh.com",
|
||||
"streamovies.xyz", "sblona.com",
|
||||
)
|
||||
val prefix = "$name - "
|
||||
return when {
|
||||
url.contains("ahvsh.com") || name.equals("streamhide", true) -> {
|
||||
@ -43,9 +32,6 @@ class AnimeKhor : AnimeStream(
|
||||
// url.contains("animeabc.xyz") -> {
|
||||
// AnimeABCExtractor(client, headers).videosFromUrl(url, prefix = prefix)
|
||||
// }
|
||||
streamSbDomains.any { it in url } || name.equals("streamsb", true) -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
||||
}
|
||||
else -> emptyList()
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
dependencies {
|
||||
implementation(project(':lib-filemoon-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.animeextension.en.animenosub.extractors.VtubeExtracto
|
||||
import eu.kanade.tachiyomi.animeextension.en.animenosub.extractors.WolfstreamExtractor
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||
import org.jsoup.nodes.Element
|
||||
|
||||
@ -27,21 +26,8 @@ class Animenosub : AnimeStream(
|
||||
// ============================ Video Links =============================
|
||||
|
||||
override fun getVideoList(url: String, name: String): List<Video> {
|
||||
val streamSbDomains = listOf(
|
||||
"sbhight", "sbrity", "sbembed.com", "sbembed1.com", "sbplay.org",
|
||||
"sbvideo.net", "streamsb.net", "sbplay.one", "cloudemb.com",
|
||||
"playersb.com", "tubesb.com", "sbplay1.com", "embedsb.com",
|
||||
"watchsb.com", "sbplay2.com", "japopav.tv", "viewsb.com",
|
||||
"sbfast", "sbfull.com", "javplaya.com", "ssbstream.net",
|
||||
"p1ayerjavseen.com", "sbthe.com", "vidmovie.xyz", "sbspeed.com",
|
||||
"streamsss.net", "sblanh.com", "tvmshow.com", "sbanh.com",
|
||||
"streamovies.xyz", "lvturbo.com", "sbrapid.com",
|
||||
)
|
||||
val prefix = "$name - "
|
||||
return when {
|
||||
streamSbDomains.any { it in url } -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
||||
}
|
||||
url.contains("streamwish") -> {
|
||||
StreamWishExtractor(client, headers).videosFromUrl(url, prefix)
|
||||
}
|
||||
@ -124,9 +110,8 @@ class Animenosub : AnimeStream(
|
||||
|
||||
private const val PREF_SERVER_KEY = "preferred_server"
|
||||
private const val PREF_SERVER_TITLE = "Preferred Video Server"
|
||||
private const val PREF_SERVER_DEFAULT = "StreamSB"
|
||||
private const val PREF_SERVER_DEFAULT = "StreamWish"
|
||||
private val PREF_SERVER_VALUES = arrayOf(
|
||||
"StreamSB",
|
||||
"StreamWish",
|
||||
"VidMoly",
|
||||
"Vtube",
|
||||
|
@ -2,5 +2,4 @@ dependencies {
|
||||
implementation(project(':lib-mp4upload-extractor'))
|
||||
implementation(project(':lib-gdriveplayer-extractor'))
|
||||
implementation(project(':lib-vidbom-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
}
|
||||
|
@ -7,7 +7,6 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||
import java.text.SimpleDateFormat
|
||||
@ -47,15 +46,6 @@ class AnimeTitans : AnimeStream(
|
||||
override val videoSortPrefDefault = prefQualityDefault
|
||||
|
||||
override fun getVideoList(url: String, name: String): List<Video> {
|
||||
val streamSbDomains = listOf(
|
||||
"sbembed.com", "sbembed1.com", "sbplay.org", "sbvideo.net",
|
||||
"streamsb.net", "sbplay.one", "cloudemb.com", "playersb.com",
|
||||
"tubesb.com", "sbplay1.com", "embedsb.com", "watchsb.com",
|
||||
"sbplay2.com", "japopav.tv", "viewsb.com", "sbfast", "sbfull.com",
|
||||
"javplaya.com", "ssbstream.net", "p1ayerjavseen.com", "sbthe.com",
|
||||
"vidmovie.xyz", "sbspeed.com", "streamsss.net", "sblanh.com",
|
||||
)
|
||||
|
||||
val vidbomDomains = listOf(
|
||||
"vidbom.com", "vidbem.com", "vidbm.com", "vedpom.com",
|
||||
"vedbom.com", "vedbom.org", "vadbom.com", "vidbam.org",
|
||||
@ -67,8 +57,6 @@ class AnimeTitans : AnimeStream(
|
||||
return when {
|
||||
baseUrl in url ->
|
||||
AnimeTitansExtractor(client).videosFromUrl(url, headers, baseUrl)
|
||||
streamSbDomains.any(url::contains) ->
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
vidbomDomains.any(url::contains) ->
|
||||
VidBomExtractor(client).videosFromUrl(url)
|
||||
"vidyard" in url ->
|
||||
|
@ -1,6 +1,5 @@
|
||||
dependencies {
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-gdriveplayer-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||
}
|
||||
|
@ -9,7 +9,6 @@ import eu.kanade.tachiyomi.animeextension.all.animexin.extractors.YouTubeExtract
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream
|
||||
|
||||
class AnimeXin : AnimeStream(
|
||||
@ -21,24 +20,12 @@ class AnimeXin : AnimeStream(
|
||||
|
||||
// ============================ Video Links =============================
|
||||
override fun getVideoList(url: String, name: String): List<Video> {
|
||||
val streamSbDomains = listOf(
|
||||
"sbhight", "sbrity", "sbembed.com", "sbembed1.com", "sbplay.org",
|
||||
"sbvideo.net", "streamsb.net", "sbplay.one", "cloudemb.com",
|
||||
"playersb.com", "tubesb.com", "sbplay1.com", "embedsb.com",
|
||||
"watchsb.com", "sbplay2.com", "japopav.tv", "viewsb.com",
|
||||
"sbfast", "sbfull.com", "javplaya.com", "ssbstream.net",
|
||||
"p1ayerjavseen.com", "sbthe.com", "vidmovie.xyz", "sbspeed.com",
|
||||
"streamsss.net", "sblanh.com", "tvmshow.com", "sbanh.com",
|
||||
"streamovies.xyz",
|
||||
)
|
||||
val prefix = "$name - "
|
||||
return when {
|
||||
url.contains("ok.ru") -> {
|
||||
OkruExtractor(client).videosFromUrl(url, prefix = prefix)
|
||||
}
|
||||
streamSbDomains.any { it in url } -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
||||
}
|
||||
|
||||
url.contains("dailymotion") -> {
|
||||
DailymotionExtractor(client).videosFromUrl(url, prefix = prefix)
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
dependencies {
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-mixdrop-extractor'))
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
@ -117,8 +116,6 @@ class AnimeOnlineNinja : DooPlay(
|
||||
"dood" in url ->
|
||||
DoodExtractor(client).videoFromUrl(url, "$lang DoodStream", false)
|
||||
?.let(::listOf)
|
||||
"sb" in url ->
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers, lang)
|
||||
"streamtape" in url ->
|
||||
StreamTapeExtractor(client).videoFromUrl(url, "$lang StreamTape")
|
||||
?.let(::listOf)
|
||||
|
@ -1,3 +0,0 @@
|
||||
dependencies {
|
||||
implementation(project(":lib-streamsb-extractor"))
|
||||
}
|
@ -4,7 +4,6 @@ import eu.kanade.tachiyomi.animeextension.pt.animesgratis.extractors.AnimesGrati
|
||||
import eu.kanade.tachiyomi.animeextension.pt.animesgratis.extractors.BloggerExtractor
|
||||
import eu.kanade.tachiyomi.animeextension.pt.animesgratis.extractors.RuplayExtractor
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
@ -48,8 +47,6 @@ class AnimesGratis : DooPlay(
|
||||
val name = player.selectFirst("span.title")!!.text().lowercase()
|
||||
val url = getPlayerUrl(player)
|
||||
return when {
|
||||
"streamsb" in name ->
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
"ruplay" in name ->
|
||||
RuplayExtractor(client).videosFromUrl(url)
|
||||
"/player2/" in url ->
|
||||
|
@ -2,6 +2,5 @@ dependencies {
|
||||
implementation(project(':lib-filemoon-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-streamlare-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation("dev.datlag.jsunpacker:jsunpacker:1.0.1")
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -73,9 +72,7 @@ class Cinemathek : DooPlay(
|
||||
url.contains("https://streamlare.com") && hosterSelection.contains("slare") -> {
|
||||
StreamlareExtractor(client).videosFromUrl(url)
|
||||
}
|
||||
url.contains("https://streamsb") && hosterSelection.contains("streamsb") -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers = headers)
|
||||
}
|
||||
|
||||
url.contains("https://filemoon") && hosterSelection.contains("fmoon") -> {
|
||||
FilemoonExtractor(client).videosFromUrl(url)
|
||||
}
|
||||
@ -158,13 +155,13 @@ class Cinemathek : DooPlay(
|
||||
private const val PREF_HOSTER_KEY = "preferred_hoster"
|
||||
private const val PREF_HOSTER_TITLE = "Standard-Hoster"
|
||||
private const val PREF_HOSTER_DEFAULT = "https://viewsb.com"
|
||||
private val PREF_HOSTER_ENTRIES = arrayOf("Streamlare", "StreamSB", "Filemoon", "DoodStream", "StreamHide")
|
||||
private val PREF_HOSTER_ENTRIES = arrayOf("Streamlare", "Filemoon", "DoodStream", "StreamHide")
|
||||
private val PREF_HOSTER_VALUES = arrayOf("https://streamlare", "https://viewsb.com", "https://filemoon", "https://dooood", "https://streamhide")
|
||||
|
||||
private const val PREF_HOSTER_SELECTION_KEY = "hoster_selection"
|
||||
private const val PREF_HOSTER_SELECTION_TITLE = "Hoster auswählen"
|
||||
private val PREF_HOSTER_SELECTION_ENTRIES = PREF_HOSTER_ENTRIES
|
||||
private val PREF_HOSTER_SELECTION_VALUES = arrayOf("slare", "streamsb", "fmoon", "dood", "shide")
|
||||
private val PREF_HOSTER_SELECTION_VALUES = arrayOf("slare", "fmoon", "dood", "shide")
|
||||
private val PREF_HOSTER_SELECTION_DEFAULT = PREF_HOSTER_SELECTION_VALUES.toSet()
|
||||
|
||||
private const val PREF_QUALITY_KEY = "preferred_quality"
|
||||
|
@ -1,3 +0,0 @@
|
||||
dependencies {
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
}
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
@ -244,18 +243,6 @@ class DonghuaX : DooPlay(
|
||||
DailymotionExtractor(client).videosFromUrl("https://www.dailymotion.com/embed/video/$it", "Dailymotion - ")
|
||||
} ?: emptyList()
|
||||
}
|
||||
url.contains("sbembed.com") || url.contains("sbembed1.com") || url.contains("sbplay.org") ||
|
||||
url.contains("sbvideo.net") || url.contains("streamsb.net") || url.contains("sbplay.one") ||
|
||||
url.contains("cloudemb.com") || url.contains("playersb.com") || url.contains("tubesb.com") ||
|
||||
url.contains("sbplay1.com") || url.contains("embedsb.com") || url.contains("watchsb.com") ||
|
||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("javplaya.com") ||
|
||||
url.contains("ssbstream.net") || url.contains("p1ayerjavseen.com") || url.contains("sbthe.com") ||
|
||||
url.contains("vidmovie.xyz") || url.contains("sbspeed.com") || url.contains("streamsss.net") ||
|
||||
url.contains("sblanh.com") || url.contains("sbbrisk.com") || url.contains("lvturbo.com") ||
|
||||
url.contains("sbrapid.com") -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
}
|
||||
url.contains("csst.online") -> {
|
||||
val urlRegex = Regex("""\[(.*?)\](https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*))""")
|
||||
val dataScript = client.newCall(GET(url)).execute()
|
||||
@ -366,7 +353,7 @@ class DonghuaX : DooPlay(
|
||||
private const val PREF_SERVER_KEY = "preferred_server"
|
||||
private const val PREF_SERVER_TITLE = "Preferred server"
|
||||
private const val PREF_SERVER_DEFAULT = "AllVideo"
|
||||
private val PREF_SERVER_ENTRIES = arrayOf("AllVideo", "Dailymotion", "StreamSB", "Internal Player", "Internal Video", "Blogger")
|
||||
private val PREF_SERVER_ENTRIES = arrayOf("AllVideo", "Dailymotion", "Internal Player", "Internal Video", "Blogger")
|
||||
private val PREF_SERVER_VALUES = PREF_SERVER_ENTRIES
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
dependencies {
|
||||
implementation(project(':lib-voe-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import androidx.preference.MultiSelectListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
@ -23,7 +22,7 @@ class Kinoking : DooPlay(
|
||||
private const val PREF_HOSTER_KEY = "preferred_hoster"
|
||||
private const val PREF_HOSTER_TITLE = "Standard-Hoster"
|
||||
private const val PREF_HOSTER_DEFAULT = "https://dood"
|
||||
private val PREF_HOSTER_ENTRIES = arrayOf("Doodstream", "StreamSB", "Voe")
|
||||
private val PREF_HOSTER_ENTRIES = arrayOf("Doodstream", "Voe")
|
||||
private val PREF_HOSTER_VALUES = arrayOf("https://dood", "https://watchsb.com", "https://voe.sx")
|
||||
|
||||
private const val PREF_HOSTER_SELECTION_KEY = "hoster_selection"
|
||||
@ -86,15 +85,6 @@ class Kinoking : DooPlay(
|
||||
|
||||
private fun getPlayerVideos(link: String, element: Element, hosterSelection: Set<String>): List<Video>? {
|
||||
return when {
|
||||
link.contains("https://watchsb") || link.contains("https://viewsb") && hosterSelection.contains("watchsb") -> {
|
||||
if (element.select("span.flag img").attr("data-src").contains("/en.")) {
|
||||
val lang = "Englisch"
|
||||
StreamSBExtractor(client).videosFromUrl(link, headers, suffix = lang)
|
||||
} else {
|
||||
val lang = "Deutsch"
|
||||
StreamSBExtractor(client).videosFromUrl(link, headers, lang)
|
||||
}
|
||||
}
|
||||
link.contains("https://dood.") || link.contains("https://doodstream.") && hosterSelection.contains("dood") -> {
|
||||
val quality = "Doodstream"
|
||||
val redirect = !link.contains("https://doodstream")
|
||||
|
@ -1,6 +1,5 @@
|
||||
dependencies {
|
||||
implementation(project(':lib-streamlare-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-voe-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-mixdrop-extractor'))
|
||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
@ -83,22 +82,7 @@ class Multimovies : DooPlay(
|
||||
private fun getPlayerVideos(player: Element): List<Video> {
|
||||
if (player.attr("data-nume") == "trailer") return emptyList()
|
||||
val url = getPlayerUrl(player)
|
||||
val streamSbServers = listOf(
|
||||
"sbembed.com", "sbembed1.com", "sbplay.org",
|
||||
"sbvideo.net", "streamsb.net", "sbplay.one",
|
||||
"cloudemb.com", "playersb.com", "tubesb.com",
|
||||
"sbplay1.com", "embedsb.com", "watchsb.com",
|
||||
"sbplay2.com", "japopav.tv", "viewsb.com",
|
||||
"sbfast", "sbfull.com", "javplaya.com",
|
||||
"ssbstream.net", "p1ayerjavseen.com", "sbthe.com",
|
||||
"sbchill.com", "sblongvu.com", "sbanh.com",
|
||||
"sblanh.com", "sbhight.com", "sbbrisk.com",
|
||||
"sbspeed.com", "multimovies.website",
|
||||
)
|
||||
return when {
|
||||
streamSbServers.any { it in url } ->
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers = headers, prefix = "[multimovies]")
|
||||
|
||||
url.contains(baseUrl.toHttpUrl().host, true) ->
|
||||
MultimoviesCloudExtractor(client).videosFromUrl(url)
|
||||
url.contains("autoembed.to") || url.contains("2embed.to") -> {
|
||||
|
@ -685,7 +685,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
@ -758,9 +757,6 @@ class AutoEmbedExtractor(private val client: OkHttpClient) {
|
||||
val videoUrl = server.url
|
||||
|
||||
when {
|
||||
videoUrl.contains("streamsb") -> {
|
||||
StreamSBExtractor(client).videosFromUrl(videoUrl, headers = headers, prefix = prefix)
|
||||
}
|
||||
videoUrl.contains("streamlare") -> {
|
||||
StreamlareExtractor(client).videosFromUrl(videoUrl, prefix = prefix)
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
dependencies {
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-gdriveplayer-extractor'))
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,6 @@ import eu.kanade.tachiyomi.animeextension.pt.pifansubs.extractors.AdoroDoramasEx
|
||||
import eu.kanade.tachiyomi.animeextension.pt.pifansubs.extractors.JMVStreamExtractor
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.multisrc.dooplay.DooPlay
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -45,14 +44,11 @@ class PiFansubs : DooPlay(
|
||||
}
|
||||
|
||||
private fun getPlayerVideos(url: String): List<Video> {
|
||||
val streamsbDomains = listOf("sbspeed", "sbanh", "streamsb", "sbfull", "sbbrisk", "lvturbo")
|
||||
return when {
|
||||
"player.jmvstream" in url ->
|
||||
JMVStreamExtractor(client).videosFromUrl(url)
|
||||
"gdriveplayer." in url ->
|
||||
GdrivePlayerExtractor(client).videosFromUrl(url, "GdrivePlayer", headers)
|
||||
streamsbDomains.any { it in url } ->
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
"https://adorodoramas.com" in url ->
|
||||
AdoroDoramasExtractor(client).videosFromUrl(url)
|
||||
"/jwplayer/?source" in url -> {
|
||||
|
@ -11,11 +11,11 @@ class AnimeStreamGenerator : ThemeSourceGenerator {
|
||||
override val baseVersionCode = 2
|
||||
|
||||
override val sources = listOf(
|
||||
SingleLang("AnimeIndo", "https://animeindo.quest", "id", isNsfw = false, overrideVersionCode = 1),
|
||||
SingleLang("AnimeKhor", "https://animekhor.xyz", "en", isNsfw = false),
|
||||
SingleLang("Animenosub", "https://animenosub.com", "en", isNsfw = true),
|
||||
SingleLang("AnimeTitans", "https://animetitans.com", "ar", isNsfw = false, overrideVersionCode = 11),
|
||||
SingleLang("AnimeXin", "https://animexin.vip", "all", isNsfw = false, overrideVersionCode = 4),
|
||||
SingleLang("AnimeIndo", "https://animeindo.quest", "id", isNsfw = false, overrideVersionCode = 2),
|
||||
SingleLang("AnimeKhor", "https://animekhor.xyz", "en", isNsfw = false, overrideVersionCode = 1),
|
||||
SingleLang("Animenosub", "https://animenosub.com", "en", isNsfw = true, overrideVersionCode = 1),
|
||||
SingleLang("AnimeTitans", "https://animetitans.com", "ar", isNsfw = false, overrideVersionCode = 12),
|
||||
SingleLang("AnimeXin", "https://animexin.vip", "all", isNsfw = false, overrideVersionCode = 5),
|
||||
SingleLang("desu-online", "https://desu-online.pl", "pl", className = "DesuOnline", isNsfw = false),
|
||||
SingleLang("Hstream", "https://hstream.moe", "en", isNsfw = true, overrideVersionCode = 3),
|
||||
SingleLang("LMAnime", "https://lmanime.com", "all", isNsfw = false, overrideVersionCode = 2),
|
||||
|
@ -12,21 +12,21 @@ class DooPlayGenerator : ThemeSourceGenerator {
|
||||
|
||||
override val sources = listOf(
|
||||
SingleLang("AnimeOnline360", "https://animeonline360.me", "en", isNsfw = false),
|
||||
SingleLang("AnimeOnline.Ninja", "https://www1.animeonline.ninja", "es", className = "AnimeOnlineNinja", isNsfw = false, overrideVersionCode = 28),
|
||||
SingleLang("AnimeOnline.Ninja", "https://www1.animeonline.ninja", "es", className = "AnimeOnlineNinja", isNsfw = false, overrideVersionCode = 29),
|
||||
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true, overrideVersionCode = 1),
|
||||
SingleLang("AnimePlayer", "https://animeplayer.com.br", "pt-BR", isNsfw = true),
|
||||
SingleLang("AnimeSync", "https://animesync.org", "pt-BR", isNsfw = true),
|
||||
SingleLang("AnimesFox BR", "https://animesfox.net", "pt-BR", isNsfw = false, overrideVersionCode = 2),
|
||||
SingleLang("Animes Grátis", "https://animesgratis.org", "pt-BR", className = "AnimesGratis", isNsfw = false, overrideVersionCode = 1),
|
||||
SingleLang("Animes Grátis", "https://animesgratis.org", "pt-BR", className = "AnimesGratis", isNsfw = false, overrideVersionCode = 2),
|
||||
SingleLang("Animes House", "https://animeshouse.net", "pt-BR", isNsfw = false, overrideVersionCode = 5),
|
||||
SingleLang("Cinemathek", "https://cinemathek.net", "de", isNsfw = true, overrideVersionCode = 13),
|
||||
SingleLang("DonghuaX", "https://donghuax.com", "pt-BR", isNsfw = false),
|
||||
SingleLang("Cinemathek", "https://cinemathek.net", "de", isNsfw = true, overrideVersionCode = 14),
|
||||
SingleLang("DonghuaX", "https://donghuax.com", "pt-BR", isNsfw = false, overrideVersionCode = 1),
|
||||
SingleLang("GoAnimes", "https://goanimes.net", "pt-BR", isNsfw = true, overrideVersionCode = 2),
|
||||
SingleLang("JetAnime", "https://ssl.jetanimes.com", "fr", isNsfw = false),
|
||||
SingleLang("Kinoking", "https://kinoking.cc", "de", isNsfw = false, overrideVersionCode = 16),
|
||||
SingleLang("Multimovies", "https://multimovies.shop", "en", isNsfw = false, overrideVersionCode = 8),
|
||||
SingleLang("Kinoking", "https://kinoking.cc", "de", isNsfw = false, overrideVersionCode = 17),
|
||||
SingleLang("Multimovies", "https://multimovies.shop", "en", isNsfw = false, overrideVersionCode = 9),
|
||||
SingleLang("pactedanime", "https://pactedanime.com", "en", isNsfw = false, className = "PactedAnime", overrideVersionCode = 4),
|
||||
SingleLang("Pi Fansubs", "https://pifansubs.org", "pt-BR", isNsfw = true, overrideVersionCode = 16),
|
||||
SingleLang("Pi Fansubs", "https://pifansubs.org", "pt-BR", isNsfw = true, overrideVersionCode = 17),
|
||||
SingleLang("Pobreflix", "https://pobreflix.biz", "pt-BR", isNsfw = true),
|
||||
SingleLang("UniqueStream", "https://uniquestream.net", "en", isNsfw = false, overrideVersionCode = 2),
|
||||
)
|
||||
|
@ -5,13 +5,8 @@ ext {
|
||||
extName = 'AnimeWorld India'
|
||||
pkgNameSuffix = 'all.animeworldindia'
|
||||
extClass = '.AnimeWorldIndiaFactory'
|
||||
extVersionCode = 2
|
||||
extVersionCode = 3
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
}
|
||||
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
@ -10,7 +10,6 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import kotlinx.serialization.json.Json
|
||||
@ -229,20 +228,6 @@ open class AnimeWorldIndia(
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
|
||||
// StreamSB
|
||||
|
||||
filterLanguages.filter {
|
||||
it.jsonObject["server"].toString()
|
||||
.drop(1).dropLast(1)
|
||||
.compareTo("Streamsb") == 0
|
||||
}.forEach {
|
||||
val url = "https://cloudemb.com/e/${it.jsonObject["url"].toString()
|
||||
.drop(1).dropLast(1)
|
||||
.substringAfter("id=")}.html"
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
|
||||
return videoList
|
||||
}
|
||||
|
||||
@ -279,8 +264,8 @@ open class AnimeWorldIndia(
|
||||
ListPreference(screen.context).apply {
|
||||
key = "preferred_server"
|
||||
title = "Preferred server"
|
||||
entries = arrayOf("MyStream", "StreamSB")
|
||||
entryValues = arrayOf("MyStream", "StreamSB")
|
||||
entries = arrayOf("MyStream")
|
||||
entryValues = arrayOf("MyStream")
|
||||
setDefaultValue("MyStream")
|
||||
summary = "%s"
|
||||
|
||||
|
@ -7,12 +7,11 @@ ext {
|
||||
extName = 'Jav Guru'
|
||||
pkgNameSuffix = 'all.javguru'
|
||||
extClass = '.JavGuru'
|
||||
extVersionCode = 3
|
||||
extVersionCode = 4
|
||||
containsNsfw = true
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-mixdrop-extractor'))
|
||||
|
@ -11,7 +11,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.asObservable
|
||||
@ -268,7 +267,6 @@ class JavGuru : AnimeHttpSource() {
|
||||
return redirectUrl
|
||||
}
|
||||
|
||||
private val streamSbExtractor by lazy { StreamSBExtractor(client) }
|
||||
private val streamTapeExtractor by lazy { StreamTapeExtractor(client) }
|
||||
private val doodExtractor by lazy { DoodExtractor(client) }
|
||||
private val mixDropExtractor by lazy { MixDropExtractor(client) }
|
||||
@ -299,10 +297,6 @@ class JavGuru : AnimeHttpSource() {
|
||||
emTurboExtractor.getVideos(hosterUrl)
|
||||
}
|
||||
|
||||
STREAM_SB_DOMAINS.any { it in hosterUrl } -> {
|
||||
streamSbExtractor.videosFromUrl(hosterUrl, headers)
|
||||
}
|
||||
|
||||
else -> {
|
||||
emptyList()
|
||||
}
|
||||
@ -349,16 +343,6 @@ class JavGuru : AnimeHttpSource() {
|
||||
private val IFRAME_OLID_REGEX = Regex("""var OLID = '([^']+)'""")
|
||||
private val IFRAME_OLID_URL = Regex("""src="([^"]+)"""")
|
||||
|
||||
private val STREAM_SB_DOMAINS = listOf(
|
||||
"sbhight", "sbrity", "sbembed.com", "sbembed1.com", "sbplay.org",
|
||||
"sbvideo.net", "streamsb.net", "sbplay.one", "cloudemb.com",
|
||||
"playersb.com", "tubesb.com", "sbplay1.com", "embedsb.com",
|
||||
"watchsb.com", "sbplay2.com", "japopav.tv", "viewsb.com",
|
||||
"sbfast", "sbfull.com", "javplaya.com", "ssbstream.net",
|
||||
"p1ayerjavseen.com", "sbthe.com", "vidmovie.xyz", "sbspeed.com",
|
||||
"streamsss.net", "sblanh.com", "tvmshow.com", "sbanh.com",
|
||||
"streamovies.xyz", "sblona.com", "likessb.com",
|
||||
)
|
||||
private val MIXDROP_DOMAINS = listOf(
|
||||
"mixdrop",
|
||||
"mixdroop",
|
||||
|
@ -5,13 +5,12 @@ ext {
|
||||
extName = 'Anime4up'
|
||||
pkgNameSuffix = 'ar.anime4up'
|
||||
extClass = '.Anime4Up'
|
||||
extVersionCode = 48
|
||||
extVersionCode = 49
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-gdriveplayer-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-voe-extractor'))
|
||||
implementation(project(':lib-vidbom-extractor'))
|
||||
|
@ -19,7 +19,6 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
@ -172,9 +171,6 @@ class Anime4Up : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val finalUrl = STREAMWISH_REGEX.find(url)!!.groupValues[0]
|
||||
StreamWishExtractor(client).videosFromUrl("https://www.$finalUrl", headers)
|
||||
}
|
||||
STREAMSB_REGEX.containsMatchIn(url) -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
}
|
||||
else -> null
|
||||
} ?: emptyList()
|
||||
}
|
||||
@ -392,7 +388,6 @@ class Anime4Up : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
)
|
||||
companion object {
|
||||
private val VIDBOM_REGEX = Regex("(?:v[aie]d[bp][aoe]?m|myvii?d|segavid|v[aei]{1,2}dshar[er]?)\\.(?:com|net|org|xyz)(?::\\d+)?/(?:embed[/-])?([A-Za-z0-9]+)")
|
||||
private val STREAMSB_REGEX = Regex("(?:view|watch|embed(?:tv)?|tube|player|cloudemb|japopav|javplaya|p1ayerjavseen|gomovizplay|stream(?:ovies)?|vidmovie|javside|aintahalu|finaltayibin|yahlusubh|taeyabathuna|)?s{0,2}b?(?:embed\\d?|play\\d?|video|fast|full|streams{0,3}|the|speed|l?anh|tvmshow|longvu|arslanrocky|chill|rity|hight|brisk|face|lvturbo|net|one|asian|ani|rapid|sonic|lona)?\\.(?:com|net|org|one|tv|xyz|fun|pro|sbs)")
|
||||
private val DOOD_REGEX = Regex("(do*d(?:stream)?\\.(?:com?|watch|to|s[ho]|cx|la|w[sf]|pm|re|yt|stream))/[de]/([0-9a-zA-Z]+)")
|
||||
private val STREAMWISH_REGEX = Regex("((?:streamwish|anime7u|animezd|ajmidyad|khadhnayad|yadmalik|hayaatieadhab)\\.(?:com|to|sbs))/(?:e/|v/|f/)?([0-9a-zA-Z]+)")
|
||||
}
|
||||
|
@ -7,14 +7,13 @@ ext {
|
||||
extName = 'AnimeLek'
|
||||
pkgNameSuffix = 'ar.animelek'
|
||||
extClass = '.AnimeLek'
|
||||
extVersionCode = 24
|
||||
extVersionCode = 25
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-vidbom-extractor'))
|
||||
}
|
||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
@ -85,15 +84,6 @@ class AnimeLek : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
override fun videoListSelector() = "ul#episode-servers li.watch a"
|
||||
|
||||
private fun videosFromElement(document: Document): List<Video> {
|
||||
val streamSBServers = listOf(
|
||||
"sbembed", "sbplay", "sbvideo.net",
|
||||
"streamsb.net", "cloudemb.com", "playersb.com",
|
||||
"tubesb.com", "embedsb.com", "watchsb.com",
|
||||
"japopav.tv", "viewsb.com", "sbfast",
|
||||
"sbfull.com", "javplaya.com", "ssbstream.net",
|
||||
"p1ayerjavseen.com", "sbthe.com",
|
||||
)
|
||||
|
||||
val vidbomServers = listOf("vidbam", "vadbam", "vidbom", "vidbm")
|
||||
|
||||
return document.select(videoListSelector()).mapNotNull { element ->
|
||||
@ -101,9 +91,6 @@ class AnimeLek : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val qualityy = element.text()
|
||||
|
||||
when {
|
||||
streamSBServers.any(url::contains) -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
}
|
||||
vidbomServers.any(url::contains) -> {
|
||||
VidBomExtractor(client).videosFromUrl(url)
|
||||
}
|
||||
|
@ -5,14 +5,13 @@ ext {
|
||||
extName = 'Animerco'
|
||||
pkgNameSuffix = 'ar.animerco'
|
||||
extClass = '.Animerco'
|
||||
extVersionCode = 29
|
||||
extVersionCode = 30
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-gdriveplayer-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
@ -162,24 +161,6 @@ class Animerco : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val embedUrl = embedUrlT.replace("\\/", "/")
|
||||
|
||||
when {
|
||||
embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
||||
embedUrl.contains("sblanh.com") || embedUrl.contains("tvmshow.com") || embedUrl.contains("sbanh.com") ||
|
||||
embedUrl.contains("streamovies.xyz")
|
||||
-> {
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(embedUrl, headers)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
/*embedUrl.contains("ok.ru") -> {
|
||||
val videos = OkruExtractor(client).videosFromUrl(embedUrl)
|
||||
videoList.addAll(videos)
|
||||
}*/
|
||||
embedUrl.contains("dood") -> {
|
||||
val video = DoodExtractor(client).videoFromUrl(embedUrl)
|
||||
if (video != null) {
|
||||
|
@ -5,12 +5,11 @@ ext {
|
||||
extName = 'Egy Dead'
|
||||
pkgNameSuffix = 'ar.egydead'
|
||||
extClass = '.EgyDead'
|
||||
extVersionCode = 4
|
||||
extVersionCode = 5
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-mixdrop-extractor'))
|
||||
implementation('dev.datlag.jsunpacker:jsunpacker:1.0.1')
|
||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -162,7 +161,7 @@ class EgyDead : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val request = client.newCall(GET(url, headers)).execute().asJsoup()
|
||||
val data = JsUnpacker.unpackAndCombine(request.selectFirst("script:containsData(sources)")!!.data())!!
|
||||
val m3u8 = SOURCE_URL_REGEX.find(data)!!.groupValues[1]
|
||||
if(QUALITIES_REGEX.containsMatchIn(m3u8)){
|
||||
if (QUALITIES_REGEX.containsMatchIn(m3u8)) {
|
||||
val streamLink = QUALITIES_REGEX.find(m3u8)!!
|
||||
val streamQuality = streamLink.groupValues[2].split(",").reversed()
|
||||
val qualities = data.substringAfter("qualityLabels").substringBefore("}")
|
||||
@ -177,7 +176,6 @@ class EgyDead : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val qRegex = Regex("\".*?\"\\s*:\\s*\"(.*?)\"").find(qualities)!!
|
||||
Video(m3u8, qRegex.groupValues[1], m3u8).let(::listOf)
|
||||
}
|
||||
|
||||
}
|
||||
url.contains("fanakishtuna") -> {
|
||||
val request = client.newCall(GET(url, headers)).execute().asJsoup()
|
||||
@ -192,9 +190,7 @@ class EgyDead : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val streamLink = data.substringAfter("sources: [\"").substringBefore("\"]")
|
||||
listOf(Video(streamLink, "Uqload: Mirror", streamLink))
|
||||
}
|
||||
STREAMSB_REGEX.containsMatchIn(url) -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
}
|
||||
|
||||
else -> null
|
||||
} ?: emptyList()
|
||||
}
|
||||
@ -365,9 +361,9 @@ class EgyDead : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
screen.addPreference(defaultDomain)
|
||||
screen.addPreference(videoQualityPref)
|
||||
}
|
||||
//like|kharabnahk
|
||||
|
||||
// like|kharabnahk
|
||||
companion object {
|
||||
private val STREAMSB_REGEX = Regex("(?:view|watch|embed(?:tv)?|tube|player|cloudemb|japopav|javplaya|p1ayerjavseen|gomovizplay|stream(?:ovies)?|vidmovie|javside|aintahalu|finaltayibin|yahlusubh|taeyabathuna|like|kharabnahk)?s{0,2}b?(?:embed\\d?|play\\d?|video|fast|full|streams{0,3}|the|speed|l?anh|tvmshow|longvu|arslanrocky|chill|rity|hight|brisk|face|lvturbo|net|one|asian|ani|rapid|sonic|lona)?\\.(?:com|net|org|one|tv|xyz|fun|pro|sbs)")
|
||||
private val DOOD_REGEX = Regex("(do*d(?:stream)?\\.(?:com?|watch|to|s[ho]|cx|la|w[sf]|pm|re|yt|stream))/[de]/([0-9a-zA-Z]+)")
|
||||
private val STREAMWISH_REGEX = Regex("ajmidyad|alhayabambi|atabknh[ks]|file")
|
||||
private val SOURCE_URL_REGEX = Regex("sources:\\s*\\[\\{\\s*\\t*file:\\s*[\"']([^\"']+)")
|
||||
|
@ -127,20 +127,19 @@ class MyCima : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
return document.select("ul.WatchServersList li btn").parallelMap {
|
||||
val frameURL = it.attr("data-url")
|
||||
runCatching {
|
||||
if(it.parent()?.hasClass("MyCimaServer") == true)
|
||||
{
|
||||
if (it.parent()?.hasClass("MyCimaServer") == true) {
|
||||
val referer = response.request.url.encodedPath
|
||||
val newHeader = headers.newBuilder().add("referer", baseUrl + referer).build()
|
||||
val iframeResponse = client.newCall(GET(frameURL, newHeader)).execute().asJsoup()
|
||||
videosFromElement(iframeResponse.selectFirst(videoListSelector())!!)
|
||||
} else {
|
||||
extractVideos(frameURL)
|
||||
extractVideos(frameURL)
|
||||
}
|
||||
}.getOrElse { emptyList() }
|
||||
}.flatten()
|
||||
}
|
||||
|
||||
private fun extractVideos(url: String): List<Video>{
|
||||
private fun extractVideos(url: String): List<Video> {
|
||||
return when {
|
||||
GOVAD_REGEX.containsMatchIn(url) -> {
|
||||
val finalUrl = GOVAD_REGEX.find(url)!!.groupValues[0]
|
||||
@ -207,7 +206,7 @@ class MyCima : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
when (filter) {
|
||||
is SearchCategoryList -> {
|
||||
val catQ = getSearchCategoryList()[filter.state].query
|
||||
val catUrl = "$baseUrl/search/$query/" + if(catQ == "page/" && page == 1) "" else "$catQ$page"
|
||||
val catUrl = "$baseUrl/search/$query/" + if (catQ == "page/" && page == 1) "" else "$catQ$page"
|
||||
return GET(catUrl, headers)
|
||||
}
|
||||
else -> {}
|
||||
@ -351,7 +350,7 @@ class MyCima : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
key = PREF_QUALITY_KEY
|
||||
title = PREF_QUALITY_TITLE
|
||||
entries = PREF_QUALITY_ENTRIES
|
||||
entryValues = PREF_QUALITY_ENTRIES.map { it.replace("p","") }.toTypedArray()
|
||||
entryValues = PREF_QUALITY_ENTRIES.map { it.replace("p", "") }.toTypedArray()
|
||||
setDefaultValue(PREF_QUALITY_DEFAULT)
|
||||
summary = "%s"
|
||||
setOnPreferenceChangeListener { _, newValue ->
|
||||
|
@ -5,7 +5,7 @@ import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.OkHttpClient
|
||||
|
||||
class GoVadExtractor(private val client:OkHttpClient) {
|
||||
class GoVadExtractor(private val client: OkHttpClient) {
|
||||
fun videosFromUrl(url: String, host: String): List<Video> {
|
||||
val doc = client.newCall(GET(url)).execute().asJsoup()
|
||||
val script = doc.selectFirst("script:containsData(sources)")!!
|
||||
|
@ -10,7 +10,7 @@ class UQLoadExtractor(private val client: OkHttpClient) {
|
||||
val document = client.newCall(GET(url)).execute().asJsoup()
|
||||
val check = document.selectFirst("script:containsData(sources)")!!.data()
|
||||
val videoUrl = check.substringAfter("sources: [\"").substringBefore("\"")
|
||||
return when{
|
||||
return when {
|
||||
"soruces" in check -> Video(videoUrl, "UQLoad Mirror", videoUrl).let(::listOf)
|
||||
else -> emptyList()
|
||||
}
|
||||
|
@ -7,13 +7,12 @@ ext {
|
||||
extName = 'Okanime'
|
||||
pkgNameSuffix = 'ar.okanime'
|
||||
extClass = '.Okanime'
|
||||
extVersionCode = 1
|
||||
extVersionCode = 2
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":lib-dood-extractor"))
|
||||
implementation(project(":lib-voe-extractor"))
|
||||
implementation(project(":lib-streamsb-extractor"))
|
||||
implementation(project(":lib-okru-extractor"))
|
||||
implementation(project(":lib-vidbom-extractor"))
|
||||
implementation(project(":lib-mp4upload-extractor"))
|
||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.vidbomextractor.VidBomExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
@ -161,7 +160,6 @@ class Okanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) }
|
||||
private val okruExtractor by lazy { OkruExtractor(client) }
|
||||
private val voeExtractor by lazy { VoeExtractor(client) }
|
||||
private val streamSbExtractor by lazy { StreamSBExtractor(client) }
|
||||
private val vidBomExtractor by lazy { VidBomExtractor(client) }
|
||||
|
||||
private fun extractVideosFromUrl(url: String, quality: String, selection: Set<String>): List<Video> {
|
||||
@ -181,9 +179,6 @@ class Okanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
voeExtractor.videoFromUrl(url, "VoeSX ($quality)")
|
||||
?.let(::listOf)
|
||||
}
|
||||
STREAM_SB_DOMAINS.any(url::contains) && selection.contains("StreamSB") -> {
|
||||
streamSbExtractor.videosFromUrl(url, headers)
|
||||
}
|
||||
VID_BOM_DOMAINS.any(url::contains) && selection.contains("VidBom") -> {
|
||||
vidBomExtractor.videosFromUrl(url)
|
||||
}
|
||||
@ -251,17 +246,6 @@ class Okanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
companion object {
|
||||
const val PREFIX_SEARCH = "id:"
|
||||
|
||||
private val STREAM_SB_DOMAINS = listOf(
|
||||
"sbhight", "sbrity", "sbembed.com", "sbembed1.com", "sbplay.org",
|
||||
"sbvideo.net", "streamsb.net", "sbplay.one", "cloudemb.com",
|
||||
"playersb.com", "tubesb.com", "sbplay1.com", "embedsb.com",
|
||||
"watchsb.com", "sbplay2.com", "japopav.tv", "viewsb.com",
|
||||
"sbfast", "sbfull.com", "javplaya.com", "ssbstream.net",
|
||||
"p1ayerjavseen.com", "sbthe.com", "vidmovie.xyz", "sbspeed.com",
|
||||
"streamsss.net", "sblanh.com", "tvmshow.com", "sbanh.com",
|
||||
"streamovies.xyz", "sblona.com", "likessb.com",
|
||||
)
|
||||
|
||||
private val VID_BOM_DOMAINS = listOf("vidbam", "vadbam", "vidbom", "vidbm")
|
||||
|
||||
private const val PREF_QUALITY_KEY = "preferred_quality"
|
||||
@ -271,7 +255,7 @@ class Okanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
private const val PREF_HOSTER_SELECTION_KEY = "pref_hoster_selection"
|
||||
private const val PREF_HOSTER_SELECTION_TITLE = "Enable/Disable hosts"
|
||||
private val PREF_HOSTER_SELECTION_ENTRIES = arrayOf("Dood", "StreamSB", "Voe", "Mp4upload", "VidBom", "Okru")
|
||||
private val PREF_HOSTER_SELECTION_ENTRIES = arrayOf("Dood", "Voe", "Mp4upload", "VidBom", "Okru")
|
||||
private val PREF_HOSTER_SELECTION_DEFAULT by lazy { PREF_HOSTER_SELECTION_ENTRIES.toSet() }
|
||||
}
|
||||
}
|
||||
|
@ -7,12 +7,11 @@ ext {
|
||||
extName = 'WIT ANIME'
|
||||
pkgNameSuffix = 'ar.witanime'
|
||||
extClass = '.WitAnime'
|
||||
extVersionCode = 40
|
||||
extVersionCode = 41
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -106,9 +105,7 @@ class WitAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
url.contains("dropbox") -> {
|
||||
listOf(Video(url, "Dropbox mirror", url))
|
||||
}
|
||||
url.contains("sbanh") -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
}
|
||||
|
||||
url.contains("dailymotion") -> {
|
||||
DailymotionExtractor(client).videosFromUrl(url, headers)
|
||||
}
|
||||
|
@ -8,14 +8,13 @@ ext {
|
||||
extName = 'Aniking'
|
||||
pkgNameSuffix = 'de.aniking'
|
||||
extClass = '.Aniking'
|
||||
extVersionCode = 14
|
||||
extVersionCode = 15
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
}
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -137,10 +136,6 @@ class Aniking : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
?.let(::listOf)
|
||||
}
|
||||
|
||||
("https://viewsb.com" in url || "https://watchsb.com" in url) && "streamsb" in hosterSelection -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
}
|
||||
|
||||
else -> null
|
||||
}
|
||||
}.getOrNull() ?: emptyList()
|
||||
@ -231,13 +226,13 @@ class Aniking : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
private const val PREF_HOSTER_KEY = "preferred_hoster"
|
||||
private const val PREF_HOSTER_TITLE = "Standard-Hoster"
|
||||
private const val PREF_HOSTER_DEFAULT = "https://streamtape.com"
|
||||
private val PREF_HOSTER_ENTRIES = arrayOf("Streamtape", "Doodstream", "StreamZ", "StreamSB")
|
||||
private val PREF_HOSTER_VALUES = arrayOf("https://streamz.ws", "https://dood", "https://voe.sx", "https://viewsb.com")
|
||||
private val PREF_HOSTER_ENTRIES = arrayOf("Streamtape", "Doodstream", "StreamZ")
|
||||
private val PREF_HOSTER_VALUES = arrayOf("https://streamz.ws", "https://dood", "https://voe.sx")
|
||||
|
||||
private const val PREF_SELECTION_KEY = "hoster_selection"
|
||||
private const val PREF_SELECTION_TITLE = "Hoster auswählen"
|
||||
private val PREF_SELECTION_ENTRIES = PREF_HOSTER_ENTRIES
|
||||
private val PREF_SELECTION_VALUES = arrayOf("stape", "dood", "streamz", "streamsb")
|
||||
private val PREF_SELECTION_VALUES = arrayOf("stape", "dood", "streamz")
|
||||
private val PREF_SELECTION_DEFAULT = PREF_SELECTION_VALUES.toSet()
|
||||
}
|
||||
}
|
||||
|
@ -6,12 +6,8 @@ ext {
|
||||
extName = 'Anime-Base'
|
||||
pkgNameSuffix = 'de.animebase'
|
||||
extClass = '.AnimeBase'
|
||||
extVersionCode = 11
|
||||
extVersionCode = 12
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
}
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
@ -10,7 +10,6 @@ import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||
import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -118,110 +117,8 @@ class AnimeBase : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
// Video Extractor
|
||||
|
||||
override fun videoListParse(response: Response): List<Video> {
|
||||
return videosFromElement(response)
|
||||
}
|
||||
|
||||
private fun videosFromElement(response: Response): List<Video> {
|
||||
val videoList = mutableListOf<Video>()
|
||||
val epurl = response.request.url.toString()
|
||||
val epid = epurl.substringAfter("episode/").substringBefore("/")
|
||||
val epnum = epurl.substringAfter("$epid/").substringBefore("/")
|
||||
if (epurl.substringAfter("$epnum/").substringBefore("/").contains("0")) {
|
||||
val host = epurl.substringAfter("$epnum/0/").substringBefore("/")
|
||||
try {
|
||||
if (!epurl.substringAfter("$host/").contains("2")) {
|
||||
try {
|
||||
val subdoc = client.newCall(GET("$baseUrl/episode/$epid/$epnum/0/$host/0")).execute().asJsoup()
|
||||
val sublink = subdoc.toString()
|
||||
.substringAfter("url=").substringBefore("\"")
|
||||
val domain = sublink.substringAfter("https://").substringBefore("/")
|
||||
val id = sublink.substringAfter("https://$domain/").substringBefore(".html")
|
||||
val url = "https://$domain/e/$id.html"
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers, suffix = "SUB")
|
||||
videoList.addAll(videos)
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
try {
|
||||
val dubdoc = client.newCall(GET("$baseUrl/episode/$epid/$epnum/1/$host/0")).execute().asJsoup()
|
||||
val dublink = dubdoc.toString()
|
||||
.substringAfter("url=").substringBefore("\"")
|
||||
val dubdomain = dublink.substringAfter("https://").substringBefore("/")
|
||||
val dubid = dublink.substringAfter("https://$dubdomain/").substringBefore(".html")
|
||||
val duburl = "https://$dubdomain/e/$dubid.html"
|
||||
val dubvideos = StreamSBExtractor(client).videosFromUrl(duburl, headers, suffix = "DUB")
|
||||
videoList.addAll(dubvideos)
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
val subdoc = client.newCall(GET("$baseUrl/episode/$epid/$epnum/0/$host/2")).execute().asJsoup()
|
||||
val sublink = subdoc.toString()
|
||||
.substringAfter("url=").substringBefore("\"")
|
||||
val domain = sublink.substringAfter("https://").substringBefore("/")
|
||||
val id = sublink.substringAfter("https://$domain/").substringBefore(".html")
|
||||
val url = "https://$domain/e/$id.html"
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers, suffix = "SUB")
|
||||
videoList.addAll(videos)
|
||||
val dubdoc = client.newCall(GET("$baseUrl/episode/$epid/${epnum.toInt() - 1}/1/$host/2")).execute().asJsoup()
|
||||
val dublink = dubdoc.toString()
|
||||
.substringAfter("url=").substringBefore("\"")
|
||||
val dubdomain = dublink.substringAfter("https://").substringBefore("/")
|
||||
val dubid = dublink.substringAfter("https://$dubdomain/").substringBefore(".html")
|
||||
val duburl = "https://$dubdomain/e/$dubid.html"
|
||||
val dubvideos = StreamSBExtractor(client).videosFromUrl(duburl, headers, suffix = "DUB")
|
||||
videoList.addAll(dubvideos)
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
if (epurl.substringAfter("$host/").contains("1")) {
|
||||
try {
|
||||
val subdoc = client.newCall(GET("$baseUrl/episode/$epid/$epnum/0/$host/1")).execute().asJsoup()
|
||||
val sublink = subdoc.toString()
|
||||
.substringAfter("url=").substringBefore("\"")
|
||||
val domain = sublink.substringAfter("https://").substringBefore("/")
|
||||
val id = sublink.substringAfter("https://$domain/").substringBefore(".html")
|
||||
val url = "https://$domain/e/$id.html"
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers, suffix = "SUB")
|
||||
videoList.addAll(videos)
|
||||
val dubdoc = client.newCall(GET("$baseUrl/episode/$epid/${epnum.toInt() - 1}/1/$host/1")).execute().asJsoup()
|
||||
val dublink = dubdoc.toString()
|
||||
.substringAfter("url=").substringBefore("\"")
|
||||
val dubdomain = dublink.substringAfter("https://").substringBefore("/")
|
||||
val dubid = dublink.substringAfter("https://$dubdomain/").substringBefore(".html")
|
||||
val duburl = "https://$dubdomain/e/$dubid.html"
|
||||
val dubvideos = StreamSBExtractor(client).videosFromUrl(duburl, headers, suffix = "DUB")
|
||||
videoList.addAll(dubvideos)
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
throw Exception("To many Requests")
|
||||
}
|
||||
} else {
|
||||
val host = epurl.substringAfter("$epnum/1/").substringBefore("/")
|
||||
if (epurl.substringAfter("$host/").contains("2")) {
|
||||
val dubdoc = client.newCall(GET("$baseUrl/episode/$epid/${epnum.toInt() - 1}/1/$host/2")).execute().asJsoup()
|
||||
val dublink = dubdoc.toString()
|
||||
.substringAfter("url=").substringBefore("\"")
|
||||
val dubdomain = dublink.substringAfter("https://").substringBefore("/")
|
||||
val dubid = dublink.substringAfter("https://$dubdomain/").substringBefore(".html")
|
||||
val duburl = "https://$dubdomain/e/$dubid.html"
|
||||
val dubvideos = StreamSBExtractor(client).videosFromUrl(duburl, headers, suffix = "DUB")
|
||||
videoList.addAll(dubvideos)
|
||||
} else {
|
||||
val dubdoc = client.newCall(GET("$baseUrl/episode/$epid/${epnum.toInt() - 1}/1/$host/1")).execute().asJsoup()
|
||||
val dublink = dubdoc.toString()
|
||||
.substringAfter("url=").substringBefore("\"")
|
||||
val dubdomain = dublink.substringAfter("https://").substringBefore("/")
|
||||
val dubid = dublink.substringAfter("https://$dubdomain/").substringBefore(".html")
|
||||
val duburl = "https://$dubdomain/e/$dubid.html"
|
||||
val dubvideos = StreamSBExtractor(client).videosFromUrl(duburl, headers, suffix = "DUB")
|
||||
videoList.addAll(dubvideos)
|
||||
}
|
||||
}
|
||||
return videoList.reversed()
|
||||
}
|
||||
override fun videoListParse(response: Response) =
|
||||
throw Exception("This source only uses StreamSB as video hoster, and StreamSB is down.")
|
||||
|
||||
override fun List<Video>.sort(): List<Video> {
|
||||
val hoster = preferences.getString("preferred_sub", null)
|
||||
|
@ -1,6 +1,5 @@
|
||||
package eu.kanade.tachiyomi.animeextension.de.animestream
|
||||
|
||||
import android.app.Application
|
||||
import eu.kanade.tachiyomi.animeextension.de.animestream.extractors.MetaExtractor
|
||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||
import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||
@ -14,7 +13,6 @@ 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 kotlin.Exception
|
||||
|
||||
@ -91,7 +89,7 @@ class AnimeStream : ParsedAnimeHttpSource() {
|
||||
}
|
||||
return videoList.reversed()
|
||||
}
|
||||
|
||||
|
||||
override fun videoListSelector() = throw Exception("not used")
|
||||
|
||||
override fun videoFromElement(element: Element) = throw Exception("not used")
|
||||
|
@ -30,7 +30,7 @@ class SerienstreamInterceptor(private val client: OkHttpClient, private val pref
|
||||
}
|
||||
|
||||
val newCookie = getNewCookie(originalRequest.url)
|
||||
//?: throw Exception("Bitte im Browser oder in den Erweiterungs-Einstellungen einloggen.")
|
||||
// ?: throw Exception("Bitte im Browser oder in den Erweiterungs-Einstellungen einloggen.")
|
||||
val newCookieHeader = buildString {
|
||||
(oldCookie + newCookie).forEachIndexed { index, cookie ->
|
||||
if (index > 0) append("; ")
|
||||
|
@ -6,14 +6,13 @@ ext {
|
||||
extName = 'AllAnime'
|
||||
pkgNameSuffix = 'en.allanime'
|
||||
extClass = '.AllAnime'
|
||||
extVersionCode = 25
|
||||
extVersionCode = 26
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamlare-extractor'))
|
||||
implementation(project(':lib-mp4upload-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||
|
@ -18,7 +18,6 @@ import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
||||
@ -304,7 +303,6 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||
|
||||
// list of alternative hosters
|
||||
val mappings = listOf(
|
||||
"streamsb" to listOf("streamsb"),
|
||||
"vidstreaming" to listOf("vidstreaming", "https://gogo", "playgo1.cc", "playtaku"),
|
||||
"doodstream" to listOf("dood"),
|
||||
"okru" to listOf("ok.ru"),
|
||||
@ -380,14 +378,6 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||
) to server.priority,
|
||||
)
|
||||
}
|
||||
sName == "streamsb" -> {
|
||||
val extractor = StreamSBExtractor(client)
|
||||
runCatching {
|
||||
extractor.videosFromUrl(server.sourceUrl, headers)
|
||||
}.getOrNull()?.map {
|
||||
Pair(it, server.priority)
|
||||
} ?: emptyList()
|
||||
}
|
||||
sName == "vidstreaming" -> {
|
||||
val extractor = VidstreamingExtractor(client, json)
|
||||
runCatching {
|
||||
@ -538,7 +528,6 @@ class AllAnime : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||
"okru",
|
||||
"mp4upload",
|
||||
"streamlare",
|
||||
"streamsb",
|
||||
"doodstream",
|
||||
)
|
||||
|
||||
|
@ -5,12 +5,11 @@ ext {
|
||||
extName = 'Animension'
|
||||
pkgNameSuffix = 'en.animension'
|
||||
extClass = '.Animension'
|
||||
extVersionCode = 19
|
||||
extVersionCode = 20
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import kotlinx.serialization.decodeFromString
|
||||
@ -99,14 +98,6 @@ class Animension() : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||
for (key in videos.keys.toList()) {
|
||||
val url = videos[key]!!.jsonPrimitive.content
|
||||
when {
|
||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("ssbstream.net") ||
|
||||
url.contains("p1ayerjavseen.com") || url.contains("streamsss.net") || url.contains("sbplay2.xyz") ||
|
||||
url.contains("sbasian.pro")
|
||||
-> {
|
||||
videoList.addAll(StreamSBExtractor(client).videosFromUrl(url, headers))
|
||||
}
|
||||
|
||||
url.contains("dood") -> {
|
||||
val video = DoodExtractor(client).videoFromUrl(url)
|
||||
if (video != null) {
|
||||
|
@ -5,13 +5,12 @@ ext {
|
||||
extName = 'AnimeOwl'
|
||||
pkgNameSuffix = 'en.animeowl'
|
||||
extClass = '.AnimeOwl'
|
||||
extVersionCode = 12
|
||||
extVersionCode = 13
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
}
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -290,21 +289,6 @@ class AnimeOwl : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
}
|
||||
}
|
||||
|
||||
// StreamSB mirror:
|
||||
document.select("div#list-server-more > ul > li.linkserver:contains(StreamSB)")
|
||||
.firstOrNull()?.attr("data-video")
|
||||
?.let { link ->
|
||||
StreamSBExtractor(client).videosFromUrl(link, headers).map {
|
||||
videoList.add(
|
||||
Video(
|
||||
it.url,
|
||||
it.quality + " $lang",
|
||||
it.videoUrl,
|
||||
headers = it.headers,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
return videoList
|
||||
}
|
||||
|
||||
|
@ -5,13 +5,12 @@ ext {
|
||||
extName = 'AsianLoad'
|
||||
pkgNameSuffix = 'en.asianload'
|
||||
extClass = '.AsianLoad'
|
||||
extVersionCode = 31
|
||||
extVersionCode = 32
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -104,14 +103,6 @@ class AsianLoad : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
for (element in elements) {
|
||||
val url = element.attr("data-video")
|
||||
when {
|
||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("ssbstream.net") ||
|
||||
url.contains("p1ayerjavseen.com") || url.contains("streamsss.net") || url.contains("sbplay2.xyz") ||
|
||||
url.contains("sbasian.pro")
|
||||
-> {
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
url.contains("dood") -> {
|
||||
val video = DoodExtractor(client).videoFromUrl(url)
|
||||
if (video != null) {
|
||||
|
@ -5,13 +5,12 @@ ext {
|
||||
extName = 'DramaCool'
|
||||
pkgNameSuffix = 'en.dramacool'
|
||||
extClass = '.DramaCool'
|
||||
extVersionCode = 39
|
||||
extVersionCode = 40
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-playlist-utils'))
|
||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -154,15 +153,6 @@ class DramaCool : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
for (element in elements) {
|
||||
val url = element.attr("data-video")
|
||||
when {
|
||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("ssbstream.net") ||
|
||||
url.contains("p1ayerjavseen.com") || url.contains("streamsss.net") || url.contains("sbplay2.xyz") ||
|
||||
url.contains("sbasian.pro")
|
||||
-> {
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
|
||||
url.contains("dood") -> {
|
||||
val video = DoodExtractor(client).videoFromUrl(url)
|
||||
if (video != null) {
|
||||
|
@ -5,13 +5,12 @@ ext {
|
||||
extName = 'GenoAnime'
|
||||
pkgNameSuffix = 'en.genoanime'
|
||||
extClass = '.GenoAnime'
|
||||
extVersionCode = 30
|
||||
extVersionCode = 31
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
@ -121,17 +120,6 @@ class GenoAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val location = element.ownerDocument()!!.location()
|
||||
val videoHeaders = Headers.headersOf("Referer", location)
|
||||
when {
|
||||
url.contains("sbembed.com") || url.contains("sbembed1.com") || url.contains("sbplay.org") ||
|
||||
url.contains("sbvideo.net") || url.contains("streamsb.net") || url.contains("sbplay.one") ||
|
||||
url.contains("cloudemb.com") || url.contains("playersb.com") || url.contains("tubesb.com") ||
|
||||
url.contains("sbplay1.com") || url.contains("embedsb.com") || url.contains("watchsb.com") ||
|
||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("javplaya.com") ||
|
||||
url.contains("ssbstream.net") || url.contains("p1ayerjavseen.com") || url.contains("sbthe.com")
|
||||
-> {
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
url.contains("dood") -> {
|
||||
val video = DoodExtractor(client).videoFromUrl(url)
|
||||
if (video != null) {
|
||||
|
@ -1,11 +1,5 @@
|
||||
package eu.kanade.tachiyomi.animeextension.en.kisskh
|
||||
|
||||
import android.app.Application
|
||||
import android.content.SharedPreferences
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.PreferenceScreen
|
||||
import eu.kanade.tachiyomi.animeextension.en.kisskh.extractors.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
|
||||
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
|
||||
import eu.kanade.tachiyomi.animesource.model.AnimesPage
|
||||
import eu.kanade.tachiyomi.animesource.model.SAnime
|
||||
@ -27,10 +21,9 @@ import okhttp3.Headers
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
|
||||
class KissKH : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||
class KissKH : AnimeHttpSource() {
|
||||
|
||||
override val name = "KissKH"
|
||||
|
||||
@ -42,10 +35,6 @@ class KissKH : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||
|
||||
override val client: OkHttpClient = network.client
|
||||
|
||||
private val preferences: SharedPreferences by lazy {
|
||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
||||
}
|
||||
|
||||
private val json = Json {
|
||||
isLenient = true
|
||||
ignoreUnknownKeys = true
|
||||
@ -138,31 +127,10 @@ class KissKH : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||
}
|
||||
val videoUrl = jObject["Video"]!!.jsonPrimitive.content
|
||||
videoList.add(Video(videoUrl, "FirstParty", videoUrl, subtitleTracks = subList, headers = Headers.headersOf("referer", "https://kisskh.me/", "origin", "https://kisskh.me")))
|
||||
val thridpartyurl = jObject["ThirdParty"]!!.jsonPrimitive.content
|
||||
|
||||
val video = StreamSBExtractor(client).videosFromUrl(thridpartyurl, headers, common = true)
|
||||
videoList.addAll(video)
|
||||
return videoList.reversed()
|
||||
}
|
||||
|
||||
override fun List<Video>.sort(): List<Video> {
|
||||
val hoster = preferences.getString("preferred_hoster", null)
|
||||
if (hoster != null) {
|
||||
val newList = mutableListOf<Video>()
|
||||
var preferred = 0
|
||||
for (video in this) {
|
||||
if (video.quality.contains(hoster)) {
|
||||
newList.add(preferred, video)
|
||||
preferred++
|
||||
} else {
|
||||
newList.add(video)
|
||||
}
|
||||
}
|
||||
return newList
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
||||
// Search
|
||||
|
||||
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request =
|
||||
@ -240,25 +208,4 @@ class KissKH : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||
}
|
||||
return AnimesPage(animeList, hasNextPage)
|
||||
}
|
||||
|
||||
// Preferences
|
||||
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val hosterPref = ListPreference(screen.context).apply {
|
||||
key = "preferred_hoster"
|
||||
title = "Standard-Hoster"
|
||||
entries = arrayOf("StreamSB", "FirstParty")
|
||||
entryValues = arrayOf("https://streamsss.net", "FirstParty")
|
||||
setDefaultValue("FirstParty")
|
||||
summary = "%s"
|
||||
|
||||
setOnPreferenceChangeListener { _, newValue ->
|
||||
val selected = newValue as String
|
||||
val index = findIndexOfValue(selected)
|
||||
val entry = entryValues[index] as String
|
||||
preferences.edit().putString(key, entry).commit()
|
||||
}
|
||||
}
|
||||
screen.addPreference(hosterPref)
|
||||
}
|
||||
}
|
||||
|
@ -1,114 +0,0 @@
|
||||
package eu.kanade.tachiyomi.animeextension.en.kisskh.extractors
|
||||
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import okhttp3.Headers
|
||||
import okhttp3.OkHttpClient
|
||||
|
||||
class StreamSBExtractor(private val client: OkHttpClient) {
|
||||
|
||||
protected fun bytesToHex(bytes: ByteArray): String {
|
||||
val hexArray = "0123456789ABCDEF".toCharArray()
|
||||
val hexChars = CharArray(bytes.size * 2)
|
||||
for (j in bytes.indices) {
|
||||
val v = bytes[j].toInt() and 0xFF
|
||||
|
||||
hexChars[j * 2] = hexArray[v ushr 4]
|
||||
hexChars[j * 2 + 1] = hexArray[v and 0x0F]
|
||||
}
|
||||
return String(hexChars)
|
||||
}
|
||||
|
||||
// animension, asianload and dramacool uses "common = false"
|
||||
private fun fixUrl(url: String, common: Boolean): String {
|
||||
val sbUrl = url.substringBefore("/e/")
|
||||
val id = url.substringAfter("/e/")
|
||||
.substringBefore("?")
|
||||
.substringBefore(".html")
|
||||
return if (common) {
|
||||
val hexBytes = bytesToHex(id.toByteArray())
|
||||
"$sbUrl/sources49/625a364258615242766475327c7c${hexBytes}7c7c4761574550654f7461566d347c7c73747265616d7362"
|
||||
} else {
|
||||
"$sbUrl/sources49/${bytesToHex("||$id||||streamsb".toByteArray())}/"
|
||||
}
|
||||
}
|
||||
|
||||
fun videosFromUrl(url: String, headers: Headers, prefix: String = "", suffix: String = "", common: Boolean = true): List<Video> {
|
||||
val newHeaders = headers.newBuilder()
|
||||
.set("referer", url)
|
||||
.set("watchsb", "sbstream")
|
||||
.set("authority", "embedsb.com")
|
||||
.build()
|
||||
return try {
|
||||
val master = fixUrl(url, common)
|
||||
val json = Json.decodeFromString<JsonObject>(
|
||||
client.newCall(GET(master, newHeaders))
|
||||
.execute().body.string(),
|
||||
)
|
||||
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
||||
val masterPlaylist = client.newCall(GET(masterUrl, newHeaders))
|
||||
.execute()
|
||||
.body.string()
|
||||
val separator = "#EXT-X-STREAM-INF"
|
||||
masterPlaylist.substringAfter(separator).split(separator).map {
|
||||
val resolution = it.substringAfter("RESOLUTION=")
|
||||
.substringBefore("\n")
|
||||
.substringAfter("x")
|
||||
.substringBefore(",") + "p"
|
||||
val quality = ("StreamSB:" + resolution).let {
|
||||
if (prefix.isNotBlank()) {
|
||||
"$prefix $it"
|
||||
} else {
|
||||
it
|
||||
}
|
||||
}.let {
|
||||
if (suffix.isNotBlank()) {
|
||||
"$it $suffix"
|
||||
} else {
|
||||
it
|
||||
}
|
||||
}
|
||||
val videoUrl = it.substringAfter("\n").substringBefore("\n")
|
||||
Video(videoUrl, quality, videoUrl, headers = newHeaders)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
emptyList<Video>()
|
||||
}
|
||||
}
|
||||
|
||||
fun videosFromDecryptedUrl(realUrl: String, headers: Headers, prefix: String = "", suffix: String = ""): List<Video> {
|
||||
return try {
|
||||
val json = Json.decodeFromString<JsonObject>(client.newCall(GET(realUrl, headers)).execute().body.string())
|
||||
val masterUrl = json["stream_data"]!!.jsonObject["file"].toString().trim('"')
|
||||
val masterPlaylist = client.newCall(GET(masterUrl, headers)).execute().body.string()
|
||||
val separator = "#EXT-X-STREAM-INF"
|
||||
masterPlaylist.substringAfter(separator).split(separator).map {
|
||||
val resolution = it.substringAfter("RESOLUTION=")
|
||||
.substringBefore("\n")
|
||||
.substringAfter("x")
|
||||
.substringBefore(",") + "p"
|
||||
val quality = ("StreamSB:$resolution").let {
|
||||
if (prefix.isNotBlank()) {
|
||||
"$prefix $it"
|
||||
} else {
|
||||
it
|
||||
}
|
||||
}.let {
|
||||
if (suffix.isNotBlank()) {
|
||||
"$it $suffix"
|
||||
} else {
|
||||
it
|
||||
}
|
||||
}
|
||||
val videoUrl = it.substringAfter("\n").substringBefore("\n")
|
||||
Video(videoUrl, quality, videoUrl, headers = headers)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
emptyList()
|
||||
}
|
||||
}
|
||||
}
|
@ -6,13 +6,12 @@ ext {
|
||||
extName = 'Membed'
|
||||
pkgNameSuffix = 'en.vidembed'
|
||||
extClass = '.Membed'
|
||||
extVersionCode = 30
|
||||
extVersionCode = 31
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-mixdrop-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -121,9 +120,6 @@ class Membed : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
serverName.contains("DoodStream") -> {
|
||||
DoodExtractor(client).videosFromUrl(url)
|
||||
}
|
||||
serverName.contains("StreamSB") -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
}
|
||||
serverName.contains("Mixdrop") -> {
|
||||
MixDropExtractor(client).videoFromUrl(url)
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'Animefenix'
|
||||
pkgNameSuffix = 'es.animefenix'
|
||||
extClass = '.Animefenix'
|
||||
extVersionCode = 24
|
||||
extVersionCode = 25
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
@ -13,7 +13,6 @@ dependencies {
|
||||
implementation(project(':lib-mp4upload-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
}
|
||||
|
||||
|
||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -120,11 +119,6 @@ class Animefenix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
videoList.add(video)
|
||||
}
|
||||
}
|
||||
realUrl.contains("sbthe") -> {
|
||||
videoList.addAll(
|
||||
StreamSBExtractor(client).videosFromUrl(realUrl, headers),
|
||||
)
|
||||
}
|
||||
realUrl.contains("mp4upload") -> {
|
||||
val videos = Mp4uploadExtractor(client).videosFromUrl(realUrl, headers)
|
||||
videoList.addAll(videos)
|
||||
@ -333,12 +327,10 @@ class Animefenix : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
title = "Preferred quality"
|
||||
entries = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
"Amazon", "AmazonES", "StreamTape", "Fireload", "Mp4upload",
|
||||
)
|
||||
entryValues = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
"Amazon", "AmazonES", "StreamTape", "Fireload", "Mp4upload",
|
||||
)
|
||||
setDefaultValue("Amazon")
|
||||
|
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'AnimeFLV'
|
||||
pkgNameSuffix = 'es.animeflv'
|
||||
extClass = '.AnimeFlv'
|
||||
extVersionCode = 46
|
||||
extVersionCode = 47
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
@ -13,7 +13,6 @@ dependencies {
|
||||
implementation(project(':lib-yourupload-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
@ -117,7 +116,6 @@ class AnimeFlv : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
var url = json!!["code"]!!.jsonPrimitive!!.content
|
||||
val extractedVideos = runCatching {
|
||||
when (quality) {
|
||||
"SB" -> StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
"Stape" -> {
|
||||
val stapeUrl = json!!["url"]!!.jsonPrimitive!!.content
|
||||
StreamTapeExtractor(client).videoFromUrl(stapeUrl)
|
||||
@ -321,12 +319,10 @@ class AnimeFlv : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
title = "Preferred quality"
|
||||
entries = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
"YourUpload", "DoodStream", "StreamTape",
|
||||
) // video servers without resolution
|
||||
entryValues = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
"YourUpload", "DoodStream", "StreamTape",
|
||||
) // video servers without resolution
|
||||
setDefaultValue("Okru:720p")
|
||||
|
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'AnimeLatinoHD'
|
||||
pkgNameSuffix = 'es.animelatinohd'
|
||||
extClass = '.AnimeLatinoHD'
|
||||
extVersionCode = 23
|
||||
extVersionCode = 24
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
@ -13,7 +13,6 @@ dependencies {
|
||||
implementation(project(':lib-filemoon-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -178,19 +177,6 @@ class AnimeLatinoHD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
fetchUrls(locationsDdh).map { url ->
|
||||
val language = if (item["languaje"]!!.jsonPrimitive!!.content == "1") "[Lat] " else "[Sub] "
|
||||
val embedUrl = url.lowercase()
|
||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
||||
embedUrl.contains("sblanh.com") || embedUrl.contains("lvturbo.com")
|
||||
) {
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers, language)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
if (embedUrl.contains("filemoon")) {
|
||||
FilemoonExtractor(client).videosFromUrl(url, language)
|
||||
.also(videoList::addAll)
|
||||
@ -418,8 +404,6 @@ class AnimeLatinoHD : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val options = arrayOf(
|
||||
"[Sub] Okru:1080p", "[Sub] Okru:720p", "[Sub] Okru:480p", "[Sub] Okru:360p", "[Sub] Okru:240p", // Okru [Sub]
|
||||
"[Lat] Okru:1080p", "[Lat] Okru:720p", "[Lat] Okru:480p", "[Lat] Okru:360p", "[Lat] Okru:240p", // Okru [Lat]
|
||||
"[Sub] StreamSB:1080p", "[Sub] StreamSB:720p", "[Sub] StreamSB:480p", "[Sub] StreamSB:360p", "[Sub] StreamSB:240p", // StreamSB [Sub]
|
||||
"[Lat] StreamSB:1080p", "[Lat] StreamSB:720p", "[Lat] StreamSB:480p", "[Lat] StreamSB:360p", "[Lat] StreamSB:240p", // StreamSB [Lat]
|
||||
"[Sub] StreamTape", "[Lat] StreamTape", // video servers without resolution
|
||||
"[Sub] DoodStream", "[Lat] DoodStream", // video servers without resolution
|
||||
"[Sub] SolidFiles", "[Lat] SolidFiles", // video servers without resolution
|
||||
|
@ -5,13 +5,12 @@ ext {
|
||||
extName = 'AsiaLiveAction'
|
||||
pkgNameSuffix = 'es.asialiveaction'
|
||||
extClass = '.AsiaLiveAction'
|
||||
extVersionCode = 19
|
||||
extVersionCode = 20
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
}
|
||||
|
||||
|
||||
|
@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
|
||||
import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.OkHttpClient
|
||||
@ -99,12 +98,7 @@ class AsiaLiveAction : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
document.select("script").forEach { script ->
|
||||
if (script.data().contains("var videosJap = [") || script.data().contains("var videosCor = [")) {
|
||||
val content = script.data()
|
||||
val sbDomains = arrayOf("sbfull", "sbplay", "cloudemb", "sbplay", "embedsb", "pelistop", "streamsb", "sbplay", "sbspeed")
|
||||
if (sbDomains.any { s -> content.contains(s) }) {
|
||||
val url = content.substringAfter(",['SB','").substringBefore("',0,0]")
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
|
||||
if (content.contains("okru")) {
|
||||
val url = content.substringAfter(",['OK','").substringBefore("',0,0]")
|
||||
val videos = OkruExtractor(client).videosFromUrl(url)
|
||||
@ -208,8 +202,11 @@ class AsiaLiveAction : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val qualities = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", // Okru
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", // StreamSB
|
||||
"Okru:1080p",
|
||||
"Okru:720p",
|
||||
"Okru:480p",
|
||||
"Okru:360p",
|
||||
"Okru:240p", // Okru
|
||||
)
|
||||
val videoQualityPref = ListPreference(screen.context).apply {
|
||||
key = "preferred_quality"
|
||||
|
@ -5,14 +5,13 @@ ext {
|
||||
extName = 'Cuevana'
|
||||
pkgNameSuffix = 'es.cuevana'
|
||||
extClass = '.Cuevana'
|
||||
extVersionCode = 18
|
||||
extVersionCode = 19
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-yourupload-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation project(path: ':lib-streamsb-extractor')
|
||||
implementation project(path: ':lib-okru-extractor')
|
||||
implementation project(path: ':lib-voe-extractor')
|
||||
implementation project(path: ':lib-streamtape-extractor')
|
||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||
@ -164,20 +163,7 @@ class Cuevana : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)
|
||||
?.let { videoList.add(it) }
|
||||
}
|
||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
||||
embedUrl.contains("sblanh.com") || embedUrl.contains("sbbrisk.com")
|
||||
) {
|
||||
runCatching {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
||||
}.getOrNull()?.let { videoList.addAll(it) }
|
||||
}
|
||||
|
||||
if (embedUrl.contains("okru")) {
|
||||
videoList.addAll(
|
||||
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
||||
@ -303,7 +289,6 @@ class Cuevana : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val qualities = arrayOf(
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
"Streamlare:1080p", "Streamlare:720p", "Streamlare:480p", "Streamlare:360p", "Streamlare:240p", // Streamlare
|
||||
"StreamTape", "Amazon", "Voex", "DoodStream", "YourUpload",
|
||||
)
|
||||
|
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'Doramasflix'
|
||||
pkgNameSuffix = 'es.doramasflix'
|
||||
extClass = '.Doramasflix'
|
||||
extVersionCode = 6
|
||||
extVersionCode = 7
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
@ -13,7 +13,6 @@ dependencies {
|
||||
implementation(project(':lib-mixdrop-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-voe-extractor'))
|
||||
}
|
||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.mixdropextractor.MixDropExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
@ -347,28 +346,12 @@ class Doramasflix : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||
VoeExtractor(client).videoFromUrl(link, "Voex")?.let { videos.add(it) }
|
||||
} catch (_: Exception) {}
|
||||
}
|
||||
if (link.contains("sbembed.com") || link.contains("sbembed1.com") || link.contains("sbplay.org") ||
|
||||
link.contains("sbvideo.net") || link.contains("streamsb.net") || link.contains("sbplay.one") ||
|
||||
link.contains("cloudemb.com") || link.contains("playersb.com") || link.contains("tubesb.com") ||
|
||||
link.contains("sbplay1.com") || link.contains("embedsb.com") || link.contains("watchsb.com") ||
|
||||
link.contains("sbplay2.com") || link.contains("japopav.tv") || link.contains("viewsb.com") ||
|
||||
link.contains("sbfast") || link.contains("sbfull.com") || link.contains("javplaya.com") ||
|
||||
link.contains("ssbstream.net") || link.contains("p1ayerjavseen.com") || link.contains("sbthe.com") ||
|
||||
link.contains("vidmovie.xyz") || link.contains("sbspeed.com") || link.contains("streamsss.net") ||
|
||||
link.contains("sblanh.com") || link.contains("tvmshow.com") || link.contains("sbanh.com") ||
|
||||
link.contains("streamovies.xyz")
|
||||
) {
|
||||
try {
|
||||
StreamSBExtractor(client).videosFromUrl(link, headers).let { videos.addAll(it) }
|
||||
} catch (_: Exception) {}
|
||||
}
|
||||
return videos
|
||||
}
|
||||
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val qualities = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
"Streamlare:1080p", "Streamlare:720p", "Streamlare:480p", "Streamlare:360p", "Streamlare:240p", // Streamlare
|
||||
"StreamTape", "Voex", "DoodStream", "YourUpload", "MixDrop",
|
||||
)
|
||||
|
@ -5,14 +5,13 @@ ext {
|
||||
extName = 'FanPelis'
|
||||
pkgNameSuffix = 'es.fanpelis'
|
||||
extClass = '.FanPelis'
|
||||
extVersionCode = 7
|
||||
extVersionCode = 8
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
@ -103,19 +102,7 @@ class FanPelis : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
var url = iframe.attr("src").ifEmpty { iframe.attr("data-src") }
|
||||
(if (url.startsWith("//")) "https:$url" else url).also { url = it }
|
||||
val embedUrl = url.lowercase()
|
||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
||||
embedUrl.contains("sblanh.com") || embedUrl.contains("sbbrisk.com") || embedUrl.contains("lvturbo.com")
|
||||
) {
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
|
||||
if (embedUrl.contains("streamtape")) {
|
||||
val video = StreamTapeExtractor(client).videoFromUrl(url, "Streamtape")
|
||||
if (video != null) {
|
||||
@ -247,13 +234,17 @@ class FanPelis : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
title = "Preferred quality"
|
||||
entries = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
"YourUpload", "DoodStream", "StreamTape",
|
||||
) // video servers without resolution
|
||||
entryValues = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
"DoodStream", "StreamTape",
|
||||
"Okru:1080p",
|
||||
"Okru:720p",
|
||||
"Okru:480p",
|
||||
"Okru:360p",
|
||||
"Okru:240p",
|
||||
"Okru:144p", // Okru
|
||||
"DoodStream",
|
||||
"StreamTape",
|
||||
) // video servers without resolution
|
||||
setDefaultValue("DoodStream")
|
||||
summary = "%s"
|
||||
|
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'Gnula'
|
||||
pkgNameSuffix = 'es.gnula'
|
||||
extClass = '.Gnula'
|
||||
extVersionCode = 5
|
||||
extVersionCode = 6
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
@ -15,7 +15,6 @@ dependencies {
|
||||
implementation project(path: ':lib-yourupload-extractor')
|
||||
implementation project(path: ':lib-voe-extractor')
|
||||
implementation project(path: ':lib-dood-extractor')
|
||||
implementation project(path: ':lib-streamsb-extractor')
|
||||
}
|
||||
|
||||
|
||||
|
@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||
@ -236,20 +235,6 @@ class Gnula : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
if (embedUrl.contains("doodstream") || embedUrl.contains("dood.")) {
|
||||
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)?.let { videoList.add(it) }
|
||||
}
|
||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
||||
embedUrl.contains("sblanh.com") || embedUrl.contains("sbbrisk.com")
|
||||
) {
|
||||
runCatching {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
||||
}.getOrNull()?.let { videoList.addAll(it) }
|
||||
}
|
||||
if (embedUrl.contains("okru")) {
|
||||
videoList.addAll(
|
||||
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
||||
@ -269,7 +254,7 @@ class Gnula : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val videoSorted = this.sortedWith(
|
||||
compareBy<Video> { it.quality.replace("[0-9]".toRegex(), "") }.thenByDescending { getNumberFromString(it.quality) },
|
||||
).toTypedArray()
|
||||
val userPreferredQuality = preferences.getString("preferred_quality", "StreamSB:1080p")
|
||||
val userPreferredQuality = preferences.getString("preferred_quality", "Okru:1080p")
|
||||
val preferredIdx = videoSorted.indexOfFirst { x -> x.quality == userPreferredQuality }
|
||||
if (preferredIdx != -1) {
|
||||
videoSorted.drop(preferredIdx + 1)
|
||||
@ -357,14 +342,13 @@ class Gnula : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val qualities = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||
"Uqload", "Upload", "SolidFiles", "StreamTape", "DoodStream", "Voex", // video servers without resolution
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
)
|
||||
val videoQualityPref = ListPreference(screen.context).apply {
|
||||
key = "preferred_quality"
|
||||
title = "Preferred quality"
|
||||
entries = qualities
|
||||
entryValues = qualities
|
||||
setDefaultValue("StreamSB:1080p")
|
||||
setDefaultValue("Okru:1080p")
|
||||
summary = "%s"
|
||||
|
||||
setOnPreferenceChangeListener { _, newValue ->
|
||||
|
@ -6,7 +6,7 @@ ext {
|
||||
extName = 'Hentaila'
|
||||
pkgNameSuffix = 'es.hentaila'
|
||||
extClass = '.Hentaila'
|
||||
extVersionCode = 14
|
||||
extVersionCode = 15
|
||||
libVersion = '13'
|
||||
containsNsfw = true
|
||||
}
|
||||
@ -14,7 +14,6 @@ ext {
|
||||
dependencies {
|
||||
implementation(project(':lib-burstcloud-extractor'))
|
||||
implementation(project(':lib-mp4upload-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-yourupload-extractor'))
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.burstcloudextractor.BurstCloudExtractor
|
||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.POST
|
||||
@ -209,10 +208,6 @@ class Hentaila : ConfigurableAnimeSource, AnimeHttpSource() {
|
||||
videoList.addAll(Mp4uploadExtractor(client).videosFromUrl(urlServer, headers = headers))
|
||||
}
|
||||
|
||||
if (nameServer.lowercase() == "stream") {
|
||||
videoList.addAll(StreamSBExtractor(client).videosFromUrl(urlServer, headers = headers))
|
||||
}
|
||||
|
||||
if (nameServer.lowercase() == "burst") {
|
||||
videoList.addAll(BurstCloudExtractor(client).videoFromUrl(urlServer, headers = headers))
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'Latanime'
|
||||
pkgNameSuffix = 'es.latanime'
|
||||
extClass = '.Latanime'
|
||||
extVersionCode = 11
|
||||
extVersionCode = 12
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
@ -14,7 +14,6 @@ dependencies {
|
||||
implementation(project(':lib-yourupload-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -309,19 +308,6 @@ class Latanime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
val videos = YourUploadExtractor(client).videoFromUrl(url, headers = headers, name = "Original", prefix = prefix)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
url.contains("sbembed.com") || url.contains("sbembed1.com") || url.contains("sbplay.org") ||
|
||||
url.contains("sbvideo.net") || url.contains("streamsb.net") || url.contains("sbplay.one") ||
|
||||
url.contains("cloudemb.com") || url.contains("playersb.com") || url.contains("tubesb.com") ||
|
||||
url.contains("sbplay1.com") || url.contains("embedsb.com") || url.contains("watchsb.com") ||
|
||||
url.contains("sbplay2.com") || url.contains("japopav.tv") || url.contains("viewsb.com") ||
|
||||
url.contains("sbfast") || url.contains("sbfull.com") || url.contains("javplaya.com") ||
|
||||
url.contains("ssbstream.net") || url.contains("p1ayerjavseen.com") || url.contains("sbthe.com") ||
|
||||
url.contains("sbchill.com") || url.contains("sblongvu.com") || url.contains("sbanh.com") ||
|
||||
url.contains("sblanh.com")
|
||||
-> {
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'LegionAnime'
|
||||
pkgNameSuffix = 'es.legionanime'
|
||||
extClass = '.LegionAnime'
|
||||
extVersionCode = 22
|
||||
extVersionCode = 23
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
@ -14,7 +14,6 @@ dependencies {
|
||||
implementation(project(':lib-yourupload-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-gdriveplayer-extractor'))
|
||||
}
|
||||
|
@ -279,11 +279,6 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
emptyList()
|
||||
}
|
||||
}
|
||||
/*
|
||||
url.contains("sb") -> {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
}
|
||||
*/
|
||||
url.contains("jkanime") -> {
|
||||
listOf(JkanimeExtractor(client).getDesuFromUrl(url))
|
||||
}
|
||||
@ -405,7 +400,6 @@ class LegionAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val qualities = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", // Okru
|
||||
"StreamSB:360p", "StreamSB:480p", "StreamSB:720p", "StreamSB:1080p", // StreamSB
|
||||
"Xtreme S", "Nozomi", "Desu", "F1S-TAPE", "F1NIX", // video servers without resolution
|
||||
)
|
||||
val videoQualityPref = ListPreference(screen.context).apply {
|
||||
|
@ -5,14 +5,13 @@ ext {
|
||||
extName = 'LocoPelis'
|
||||
pkgNameSuffix = 'es.locopelis'
|
||||
extClass = '.LocoPelis'
|
||||
extVersionCode = 14
|
||||
extVersionCode = 15
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.animesource.model.Video
|
||||
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
@ -92,19 +91,6 @@ class LocoPelis : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
document.select(".tab_container .tab_content iframe").forEach { iframe ->
|
||||
val url = iframe.attr("src")
|
||||
val embedUrl = url.lowercase()
|
||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
||||
embedUrl.contains("sblanh.com")
|
||||
) {
|
||||
val videos = StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
videoList.addAll(videos)
|
||||
}
|
||||
if (url.lowercase().contains("streamtape")) {
|
||||
val video = StreamTapeExtractor(client).videoFromUrl(url, "Streamtape")
|
||||
if (video != null) {
|
||||
@ -262,13 +248,17 @@ class LocoPelis : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
|
||||
title = "Preferred quality"
|
||||
entries = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
"YourUpload", "DoodStream", "StreamTape",
|
||||
) // video servers without resolution
|
||||
entryValues = arrayOf(
|
||||
"Okru:1080p", "Okru:720p", "Okru:480p", "Okru:360p", "Okru:240p", "Okru:144p", // Okru
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
"DoodStream", "StreamTape",
|
||||
"Okru:1080p",
|
||||
"Okru:720p",
|
||||
"Okru:480p",
|
||||
"Okru:360p",
|
||||
"Okru:240p",
|
||||
"Okru:144p", // Okru
|
||||
"DoodStream",
|
||||
"StreamTape",
|
||||
) // video servers without resolution
|
||||
setDefaultValue("DoodStream")
|
||||
summary = "%s"
|
||||
|
@ -5,7 +5,7 @@ ext {
|
||||
extName = 'Pelisplushd'
|
||||
pkgNameSuffix = 'es.pelisplushd'
|
||||
extClass = '.PelisplushdFactory'
|
||||
extVersionCode = 39
|
||||
extVersionCode = 40
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
@ -14,7 +14,6 @@ dependencies {
|
||||
implementation(project(':lib-streamlare-extractor'))
|
||||
implementation(project(':lib-yourupload-extractor'))
|
||||
implementation(project(':lib-streamtape-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
implementation(project(':lib-voe-extractor'))
|
||||
implementation(project(':lib-okru-extractor'))
|
||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
|
||||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||
@ -161,9 +160,7 @@ open class Pelisplushd(override val name: String, override val baseUrl: String)
|
||||
private fun serverVideoResolver(url: String, server: String): List<Video>? {
|
||||
val videoList = mutableListOf<Video>()
|
||||
try {
|
||||
if (server.lowercase() == "sbfast") {
|
||||
return StreamSBExtractor(client).videosFromUrl(url, headers)
|
||||
} else if (server.lowercase() == "stp") {
|
||||
if (server.lowercase() == "stp") {
|
||||
StreamTapeExtractor(client).videoFromUrl(url, "StreamTape")?.let { videoList.add(it) }
|
||||
} else if (server.lowercase() == "uwu") {
|
||||
if (!url.contains("disable")) {
|
||||
@ -319,7 +316,6 @@ open class Pelisplushd(override val name: String, override val baseUrl: String)
|
||||
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val qualities = arrayOf(
|
||||
"StreamSB:1080p", "StreamSB:720p", "StreamSB:480p", "StreamSB:360p", "StreamSB:240p", "StreamSB:144p", // StreamSB
|
||||
"Streamlare:1080p", "Streamlare:720p", "Streamlare:480p", "Streamlare:360p", "Streamlare:240p", // Streamlare
|
||||
"StreamTape", "Amazon", "Voex", "DoodStream", "YourUpload",
|
||||
)
|
||||
|
@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
@ -163,20 +162,6 @@ class Pelisplusph(override val name: String, override val baseUrl: String) : Pel
|
||||
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)
|
||||
?.let { videoList.add(it) }
|
||||
}
|
||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
||||
embedUrl.contains("sblanh.com") || embedUrl.contains("sbbrisk.com") || embedUrl.contains("lvturbo.com")
|
||||
) {
|
||||
runCatching {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
||||
}.getOrNull()?.let { videoList.addAll(it) }
|
||||
}
|
||||
if (embedUrl.contains("okru") || embedUrl.contains("ok.ru")) {
|
||||
videoList.addAll(
|
||||
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
||||
@ -326,13 +311,8 @@ class Pelisplusph(override val name: String, override val baseUrl: String) : Pel
|
||||
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val qualities = arrayOf(
|
||||
"StreamSB:1080p",
|
||||
"StreamSB:720p",
|
||||
"StreamSB:480p",
|
||||
"StreamSB:360p",
|
||||
"StreamSB:240p",
|
||||
"StreamSB:144p", // StreamSB
|
||||
"DoodStream",
|
||||
"Voex",
|
||||
)
|
||||
val videoQualityPref = ListPreference(screen.context).apply {
|
||||
key = "preferred_quality"
|
||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
|
||||
import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor
|
||||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor
|
||||
import eu.kanade.tachiyomi.lib.streamsbextractor.StreamSBExtractor
|
||||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor
|
||||
import eu.kanade.tachiyomi.lib.youruploadextractor.YourUploadExtractor
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
@ -180,20 +179,7 @@ class Pelisplusto(override val name: String, override val baseUrl: String) : Pel
|
||||
DoodExtractor(client).videoFromUrl(url, "$prefix DoodStream", false)
|
||||
?.let { videoList.add(it) }
|
||||
}
|
||||
if (embedUrl.contains("sbembed.com") || embedUrl.contains("sbembed1.com") || embedUrl.contains("sbplay.org") ||
|
||||
embedUrl.contains("sbvideo.net") || embedUrl.contains("streamsb.net") || embedUrl.contains("sbplay.one") ||
|
||||
embedUrl.contains("cloudemb.com") || embedUrl.contains("playersb.com") || embedUrl.contains("tubesb.com") ||
|
||||
embedUrl.contains("sbplay1.com") || embedUrl.contains("embedsb.com") || embedUrl.contains("watchsb.com") ||
|
||||
embedUrl.contains("sbplay2.com") || embedUrl.contains("japopav.tv") || embedUrl.contains("viewsb.com") ||
|
||||
embedUrl.contains("sbfast") || embedUrl.contains("sbfull.com") || embedUrl.contains("javplaya.com") ||
|
||||
embedUrl.contains("ssbstream.net") || embedUrl.contains("p1ayerjavseen.com") || embedUrl.contains("sbthe.com") ||
|
||||
embedUrl.contains("vidmovie.xyz") || embedUrl.contains("sbspeed.com") || embedUrl.contains("streamsss.net") ||
|
||||
embedUrl.contains("sblanh.com") || embedUrl.contains("sbbrisk.com") || embedUrl.contains("lvturbo.com")
|
||||
) {
|
||||
runCatching {
|
||||
StreamSBExtractor(client).videosFromUrl(url, headers, prefix = prefix)
|
||||
}.getOrNull()?.let { videoList.addAll(it) }
|
||||
}
|
||||
|
||||
if (embedUrl.contains("okru") || embedUrl.contains("ok.ru")) {
|
||||
videoList.addAll(
|
||||
OkruExtractor(client).videosFromUrl(url, prefix, true),
|
||||
@ -274,12 +260,7 @@ class Pelisplusto(override val name: String, override val baseUrl: String) : Pel
|
||||
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val qualities = arrayOf(
|
||||
"StreamSB:1080p",
|
||||
"StreamSB:720p",
|
||||
"StreamSB:480p",
|
||||
"StreamSB:360p",
|
||||
"StreamSB:240p",
|
||||
"StreamSB:144p", // StreamSB
|
||||
"Voex",
|
||||
"DoodStream",
|
||||
)
|
||||
val videoQualityPref = ListPreference(screen.context).apply {
|
||||
|
@ -8,13 +8,12 @@ ext {
|
||||
extName = 'EmpireStreaming'
|
||||
pkgNameSuffix = 'fr.empirestreaming'
|
||||
extClass = '.EmpireStreaming'
|
||||
extVersionCode = 12
|
||||
extVersionCode = 13
|
||||
libVersion = '13'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-voe-extractor'))
|
||||
implementation(project(':lib-streamsb-extractor'))
|
||||
implementation(project(':lib-dood-extractor'))
|
||||
}
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user