mirror of
https://github.com/recloudstream/cloudstream.git
synced 2026-07-13 00:13:17 +00:00
Compare commits
4 commits
master
...
poststable
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca17a4c7e1 |
||
|
|
5a40b036cb |
||
|
|
2f69f33f1f |
||
|
|
b7234cbb2b |
17 changed files with 0 additions and 26 deletions
|
|
@ -22,7 +22,6 @@ fun Requests.initClient(context: Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Only use ignoreSSL if you know what you are doing*/
|
/** Only use ignoreSSL if you know what you are doing*/
|
||||||
@Prerelease
|
|
||||||
fun Requests.initClient(context: Context, ignoreSSL: Boolean = false) {
|
fun Requests.initClient(context: Context, ignoreSSL: Boolean = false) {
|
||||||
this.baseClient = buildDefaultClient(context, ignoreSSL)
|
this.baseClient = buildDefaultClient(context, ignoreSSL)
|
||||||
}
|
}
|
||||||
|
|
@ -34,7 +33,6 @@ fun buildDefaultClient(context: Context): OkHttpClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Only use ignoreSSL if you know what you are doing*/
|
/** Only use ignoreSSL if you know what you are doing*/
|
||||||
@Prerelease
|
|
||||||
fun buildDefaultClient(context: Context, ignoreSSL: Boolean = false): OkHttpClient {
|
fun buildDefaultClient(context: Context, ignoreSSL: Boolean = false): OkHttpClient {
|
||||||
safe { Security.insertProviderAt(Conscrypt.newProvider(), 1) }
|
safe { Security.insertProviderAt(Conscrypt.newProvider(), 1) }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,6 @@ class ErrorLoadingException(message: String? = null) : Exception(message)
|
||||||
|
|
||||||
//val baseHeader = mapOf("User-Agent" to USER_AGENT)
|
//val baseHeader = mapOf("User-Agent" to USER_AGENT)
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
val json = Json {
|
val json = Json {
|
||||||
encodeDefaults = true
|
encodeDefaults = true
|
||||||
explicitNulls = false
|
explicitNulls = false
|
||||||
|
|
@ -1094,7 +1093,6 @@ enum class TvType(value: Int?) {
|
||||||
|
|
||||||
Audio(16),
|
Audio(16),
|
||||||
Podcast(17),
|
Podcast(17),
|
||||||
@Prerelease
|
|
||||||
Video(18),
|
Video(18),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2554,12 +2552,10 @@ fun Episode.addDate(date: String?, format: String = "yyyy-MM-dd") {
|
||||||
}.onFailure { logError(it) }.getOrNull()
|
}.onFailure { logError(it) }.getOrNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
fun Episode.addDate(date: LocalDate?) {
|
fun Episode.addDate(date: LocalDate?) {
|
||||||
this.date = date?.atStartOfDayIn(TimeZone.currentSystemDefault())?.toEpochMilliseconds()
|
this.date = date?.atStartOfDayIn(TimeZone.currentSystemDefault())?.toEpochMilliseconds()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
fun Episode.addDate(date: Instant?) {
|
fun Episode.addDate(date: Instant?) {
|
||||||
this.date = date?.toEpochMilliseconds()
|
this.date = date?.toEpochMilliseconds()
|
||||||
}
|
}
|
||||||
|
|
@ -2706,7 +2702,6 @@ fun fetchUrls(text: String?): List<String> {
|
||||||
return linkRegex.findAll(text).map { it.value.trim().removeSurrounding("\"") }.toList()
|
return linkRegex.findAll(text).map { it.value.trim().removeSurrounding("\"") }.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
fun isUpcoming(dateString: String?): Boolean {
|
fun isUpcoming(dateString: String?): Boolean {
|
||||||
return runCatching {
|
return runCatching {
|
||||||
val fmt = DateTimeComponents.Format {
|
val fmt = DateTimeComponents.Format {
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,6 @@ var app = Requests(responseParser = jsonResponseParser).apply {
|
||||||
|
|
||||||
/** Same as the default app networking helper, but this instance ignores SSL certificates.
|
/** Same as the default app networking helper, but this instance ignores SSL certificates.
|
||||||
* This should NEVER be used for sensitive networking operations such as logins. Only use this when required. */
|
* This should NEVER be used for sensitive networking operations such as logins. Only use this when required. */
|
||||||
@Prerelease
|
|
||||||
@UnsafeSSL
|
@UnsafeSSL
|
||||||
var insecureApp = Requests(responseParser = jsonResponseParser).apply {
|
var insecureApp = Requests(responseParser = jsonResponseParser).apply {
|
||||||
defaultHeaders = mapOf("user-agent" to USER_AGENT)
|
defaultHeaders = mapOf("user-agent" to USER_AGENT)
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,6 @@ class MyVidPlay : DoodLaExtractor() {
|
||||||
override var mainUrl = "https://myvidplay.com"
|
override var mainUrl = "https://myvidplay.com"
|
||||||
}
|
}
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
class Playmogo : DoodLaExtractor() {
|
class Playmogo : DoodLaExtractor() {
|
||||||
override var mainUrl = "https://playmogo.com"
|
override var mainUrl = "https://playmogo.com"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import com.lagradost.cloudstream3.utils.newExtractorLink
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
class Firestream : ExtractorApi() {
|
class Firestream : ExtractorApi() {
|
||||||
override val name: String = "Firestream"
|
override val name: String = "Firestream"
|
||||||
override val mainUrl: String = "https://firestream.to"
|
override val mainUrl: String = "https://firestream.to"
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ import com.lagradost.cloudstream3.utils.newExtractorLink
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
open class Flyfile : ExtractorApi() {
|
open class Flyfile : ExtractorApi() {
|
||||||
override val name: String = "FlyFile"
|
override val name: String = "FlyFile"
|
||||||
override val mainUrl: String = "https://flyfile.app"
|
override val mainUrl: String = "https://flyfile.app"
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ class Ewish : StreamWishExtractor() {
|
||||||
override val mainUrl = "https://embedwish.com"
|
override val mainUrl = "https://embedwish.com"
|
||||||
}
|
}
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
class Hgcloudto : StreamWishExtractor() {
|
class Hgcloudto : StreamWishExtractor() {
|
||||||
override val name = "Hgcloud"
|
override val name = "Hgcloud"
|
||||||
override val mainUrl = "https://Hgcloud.to"
|
override val mainUrl = "https://Hgcloud.to"
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||||
import com.lagradost.cloudstream3.utils.ExtractorLinkType
|
import com.lagradost.cloudstream3.utils.ExtractorLinkType
|
||||||
import com.lagradost.cloudstream3.utils.newExtractorLink
|
import com.lagradost.cloudstream3.utils.newExtractorLink
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
open class Streamcash: ExtractorApi() {
|
open class Streamcash: ExtractorApi() {
|
||||||
override val name: String = "Streamcash"
|
override val name: String = "Streamcash"
|
||||||
override val mainUrl: String = "https://streamcash.to"
|
override val mainUrl: String = "https://streamcash.to"
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import com.lagradost.cloudstream3.utils.ExtractorApi
|
||||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||||
import com.lagradost.cloudstream3.utils.newExtractorLink
|
import com.lagradost.cloudstream3.utils.newExtractorLink
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
open class Vids : ExtractorApi() {
|
open class Vids : ExtractorApi() {
|
||||||
override val name: String = "Vids"
|
override val name: String = "Vids"
|
||||||
override val mainUrl: String = "https://vids.st"
|
override val mainUrl: String = "https://vids.st"
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ object AesHelper {
|
||||||
private val md5Hasher = provider.get(MD5).hasher()
|
private val md5Hasher = provider.get(MD5).hasher()
|
||||||
|
|
||||||
@OptIn(DelicateCryptographyApi::class)
|
@OptIn(DelicateCryptographyApi::class)
|
||||||
@Prerelease
|
|
||||||
suspend fun cryptoAESHandler(
|
suspend fun cryptoAESHandler(
|
||||||
data: String,
|
data: String,
|
||||||
pass: ByteArray,
|
pass: ByteArray,
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlin.collections.orEmpty
|
import kotlin.collections.orEmpty
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
object JwPlayerHelper {
|
object JwPlayerHelper {
|
||||||
private val sourceRegex = Regex(""""?sources"?:\s*(\[.*?\])""")
|
private val sourceRegex = Regex(""""?sources"?:\s*(\[.*?\])""")
|
||||||
private val tracksRegex = Regex(""""?tracks"?:\s*(\[.*?\])""")
|
private val tracksRegex = Regex(""""?tracks"?:\s*(\[.*?\])""")
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,6 @@ object Coroutines {
|
||||||
* If you want to iterate over the list then you need to do:
|
* If you want to iterate over the list then you need to do:
|
||||||
* list.withLock { code here }
|
* list.withLock { code here }
|
||||||
*/
|
*/
|
||||||
@Prerelease
|
|
||||||
fun <T> atomicListOf(vararg items: T): AtomicMutableList<T> {
|
fun <T> atomicListOf(vararg items: T): AtomicMutableList<T> {
|
||||||
return AtomicMutableList(items.toMutableList())
|
return AtomicMutableList(items.toMutableList())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,6 @@ private const val JS_DEFAULT_MAX_INSTRUCTIONS: Long = 50_000_000L
|
||||||
* Convert any JS runtime value to its JavaScript string representation.
|
* Convert any JS runtime value to its JavaScript string representation.
|
||||||
* Mirrors what JS `String(value)` would produce.
|
* Mirrors what JS `String(value)` would produce.
|
||||||
*/
|
*/
|
||||||
@Prerelease
|
|
||||||
fun jsValueToString(v: Any?): String = toJsString(v)
|
fun jsValueToString(v: Any?): String = toJsString(v)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -106,7 +105,6 @@ fun jsValueToString(v: Any?): String = toJsString(v)
|
||||||
* @param scope the [CoroutineScope] this context's cancellation is tied to. Supplied
|
* @param scope the [CoroutineScope] this context's cancellation is tied to. Supplied
|
||||||
* automatically by [newJsContext] from the caller's own coroutine context.
|
* automatically by [newJsContext] from the caller's own coroutine context.
|
||||||
*/
|
*/
|
||||||
@Prerelease
|
|
||||||
class JsContext internal constructor(
|
class JsContext internal constructor(
|
||||||
var maxExecutionTime: Duration = JS_DEFAULT_MAX_EXECUTION_TIME,
|
var maxExecutionTime: Duration = JS_DEFAULT_MAX_EXECUTION_TIME,
|
||||||
var maxInstructions: Long = JS_DEFAULT_MAX_INSTRUCTIONS,
|
var maxInstructions: Long = JS_DEFAULT_MAX_INSTRUCTIONS,
|
||||||
|
|
@ -160,7 +158,6 @@ class JsContext internal constructor(
|
||||||
* eval("x + 1")
|
* eval("x + 1")
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
@Prerelease
|
|
||||||
suspend fun newJsContext(
|
suspend fun newJsContext(
|
||||||
initializer: suspend JsContext.() -> Unit = {},
|
initializer: suspend JsContext.() -> Unit = {},
|
||||||
): JsContext {
|
): JsContext {
|
||||||
|
|
@ -188,7 +185,6 @@ suspend fun newJsContext(
|
||||||
* Returns [Unit] on evaluation failure, timeout, or when the result is JS undefined.
|
* Returns [Unit] on evaluation failure, timeout, or when the result is JS undefined.
|
||||||
* JS null is represented as Kotlin null. Use [jsValueToString] to convert to a JS string.
|
* JS null is represented as Kotlin null. Use [jsValueToString] to convert to a JS string.
|
||||||
*/
|
*/
|
||||||
@Prerelease
|
|
||||||
@Throws(CancellationException::class)
|
@Throws(CancellationException::class)
|
||||||
suspend fun evalJs(
|
suspend fun evalJs(
|
||||||
js: String,
|
js: String,
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ import com.lagradost.cloudstream3.Prerelease
|
||||||
import kotlin.math.round
|
import kotlin.math.round
|
||||||
|
|
||||||
// Taken from https://github.com/terrakok/FuzzyKot/blob/f794d43/fuzzykot/src/commonMain/kotlin/com/github/terrakok/fuzzykot/Levenshtein.kt
|
// Taken from https://github.com/terrakok/FuzzyKot/blob/f794d43/fuzzykot/src/commonMain/kotlin/com/github/terrakok/fuzzykot/Levenshtein.kt
|
||||||
@Prerelease
|
|
||||||
object Levenshtein {
|
object Levenshtein {
|
||||||
fun ratio(s1: String, s2: String, processor: (String) -> String = { it }): Int {
|
fun ratio(s1: String, s2: String, processor: (String) -> String = { it }): Int {
|
||||||
val p1 = processor(s1)
|
val p1 = processor(s1)
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,10 @@ import io.ktor.http.decodeURLQueryComponent
|
||||||
import io.ktor.http.encodeURLParameter
|
import io.ktor.http.encodeURLParameter
|
||||||
|
|
||||||
object StringUtils {
|
object StringUtils {
|
||||||
@Prerelease
|
|
||||||
fun String.decodeUrl(): String {
|
fun String.decodeUrl(): String {
|
||||||
return this.decodeURLQueryComponent()
|
return this.decodeURLQueryComponent()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Prerelease
|
|
||||||
fun String.encodeUrl(): String {
|
fun String.encodeUrl(): String {
|
||||||
return this.encodeURLParameter()
|
return this.encodeURLParameter()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ import kotlinx.serialization.json.JsonTransformingSerializer
|
||||||
* object Serializer : NonEmptySerializer<MyData>(MyData.generatedSerializer())
|
* object Serializer : NonEmptySerializer<MyData>(MyData.generatedSerializer())
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
@Prerelease
|
|
||||||
abstract class NonEmptySerializer<T : Any>(tSerializer: KSerializer<T>) :
|
abstract class NonEmptySerializer<T : Any>(tSerializer: KSerializer<T>) :
|
||||||
JsonTransformingSerializer<T>(tSerializer) {
|
JsonTransformingSerializer<T>(tSerializer) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@ import kotlinx.serialization.json.JsonTransformingSerializer
|
||||||
* )
|
* )
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
@Prerelease
|
|
||||||
abstract class WriteOnlySerializer<T : Any>(
|
abstract class WriteOnlySerializer<T : Any>(
|
||||||
tSerializer: KSerializer<T>,
|
tSerializer: KSerializer<T>,
|
||||||
private val keysToIgnore: Set<String>,
|
private val keysToIgnore: Set<String>,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue