fix: Purge StreamSB extractor (#2042)

Co-authored-by: jmir1 <jhmiramon@gmail.com>
This commit is contained in:
Claudemirovsky
2023-08-13 17:14:25 -03:00
committed by GitHub
parent 5ab164e537
commit 581c577c73
121 changed files with 130 additions and 1201 deletions

View File

@ -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)
}

View File

@ -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)
}
}

View File

@ -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,
)

View File

@ -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"))

View File

@ -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)

View File

@ -1,5 +1,4 @@
dependencies {
implementation(project(':lib-okru-extractor'))
implementation(project(':lib-streamsb-extractor'))
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
}

View File

@ -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()
}
}

View File

@ -1,5 +1,4 @@
dependencies {
implementation(project(':lib-filemoon-extractor'))
implementation(project(':lib-streamsb-extractor'))
implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1"
}

View File

@ -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",

View File

@ -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'))
}

View File

@ -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 ->

View File

@ -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"
}

View File

@ -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)
}

View File

@ -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'))
}

View File

@ -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)

View File

@ -1,3 +0,0 @@
dependencies {
implementation(project(":lib-streamsb-extractor"))
}

View File

@ -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 ->

View File

@ -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")
}

View File

@ -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"

View File

@ -1,3 +0,0 @@
dependencies {
implementation(project(':lib-streamsb-extractor'))
}

View File

@ -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
}
}

View File

@ -1,5 +1,4 @@
dependencies {
implementation(project(':lib-voe-extractor'))
implementation(project(':lib-streamsb-extractor'))
implementation(project(':lib-dood-extractor'))
}

View File

@ -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")

View File

@ -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'))

View File

@ -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") -> {

View File

@ -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)
}

View File

@ -1,5 +1,4 @@
dependencies {
implementation(project(':lib-streamsb-extractor'))
implementation(project(':lib-gdriveplayer-extractor'))
}

View File

@ -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 -> {

View File

@ -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),

View File

@ -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),
)

View File

@ -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"

View File

@ -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"

View File

@ -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'))

View File

@ -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",

View File

@ -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'))

View File

@ -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]+)")
}

View File

@ -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'))
}

View File

@ -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)
}

View File

@ -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"
}

View File

@ -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) {

View File

@ -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')

View File

@ -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*[\"']([^\"']+)")

View File

@ -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 ->

View File

@ -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)")!!

View File

@ -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()
}

View File

@ -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"))

View File

@ -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() }
}
}

View File

@ -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'))
}

View File

@ -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)
}

View File

@ -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"

View File

@ -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()
}
}

View File

@ -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"

View File

@ -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)

View File

@ -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")

View File

@ -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("; ")

View File

@ -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"

View File

@ -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",
)

View File

@ -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'))
}

View File

@ -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) {

View File

@ -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"

View File

@ -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
}

View File

@ -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'))
}

View File

@ -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) {

View File

@ -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"

View File

@ -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) {

View File

@ -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'))
}

View File

@ -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) {

View File

@ -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)
}
}

View File

@ -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()
}
}
}

View File

@ -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'))
}

View File

@ -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)
}

View File

@ -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'))
}

View File

@ -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")

View File

@ -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'))
}

View File

@ -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")

View File

@ -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'))
}

View File

@ -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

View File

@ -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'))
}

View File

@ -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"

View File

@ -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')

View File

@ -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",
)

View File

@ -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'))
}

View File

@ -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",
)

View File

@ -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'))
}

View File

@ -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"

View File

@ -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')
}

View File

@ -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 ->

View File

@ -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'))
}

View File

@ -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))
}

View File

@ -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"
}

View File

@ -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)
}
}
}

View File

@ -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'))
}

View File

@ -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 {

View File

@ -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'))
}

View File

@ -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"

View File

@ -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'))

View File

@ -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",
)

View File

@ -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"

View File

@ -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 {

View File

@ -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