diff --git a/build.gradle.kts b/build.gradle.kts
index defd2851502..cca263dd422 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,5 +1,6 @@
plugins {
alias(libs.plugins.android.application) apply false
+ alias(libs.plugins.android.lint) apply false
alias(libs.plugins.android.multiplatform.library) apply false
alias(libs.plugins.buildkonfig) apply false // Universal build config
alias(libs.plugins.dokka) apply false
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 1d29aab0495..24f69824c86 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -112,6 +112,7 @@ work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "w
[plugins]
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
+android-lint = { id = "com.android.lint", version.ref = "androidGradlePlugin" }
android-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "androidGradlePlugin" }
buildkonfig = { id = "com.codingfeline.buildkonfig", version.ref = "buildkonfigGradlePlugin" }
dokka = { id = "org.jetbrains.dokka", version.ref = "dokkaGradlePlugin" }
diff --git a/library/build.gradle.kts b/library/build.gradle.kts
index 5e2b5909882..392552739ff 100644
--- a/library/build.gradle.kts
+++ b/library/build.gradle.kts
@@ -7,6 +7,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
plugins {
id("maven-publish") // Gradle core plugin
+ alias(libs.plugins.android.lint)
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.android.multiplatform.library)
alias(libs.plugins.buildkonfig)
diff --git a/library/lint.xml b/library/lint.xml
new file mode 100644
index 00000000000..6f4e202227b
--- /dev/null
+++ b/library/lint.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt
index 43f7f4070ed..ada8d5cd893 100644
--- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt
+++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt
@@ -2502,7 +2502,7 @@ constructor(
fun Episode.addDate(date: String?, format: String = "yyyy-MM-dd") {
try {
- this.date = SimpleDateFormat(format).parse(date ?: return)?.time
+ this.date = SimpleDateFormat(format, Locale.getDefault()).parse(date ?: return)?.time
} catch (e: Exception) {
logError(e)
}
diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt
index 06c5ec321c5..dba2e926787 100644
--- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt
+++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt
@@ -17,12 +17,12 @@ open class ContentX : ExtractorApi() {
val iSource = app.get(url, referer=extRef).text
val iExtract = Regex("""window\.openPlayer\('([^']+)'""").find(iSource)!!.groups[1]?.value ?: throw ErrorLoadingException("iExtract is null")
- val subUrls = mutableSetOf()
+ val subUrls = mutableSetOf()
Regex("""\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(iSource).forEach {
val (subUrl, subLang) = it.destructured
- if (subUrl in subUrls) { return@forEach }
- subUrls.add(subUrl)
+ if (subUrl in subUrls) { return@forEach }
+ subUrls.add(subUrl)
subtitleCallback.invoke(
newSubtitleFile(
diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/DoodExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/DoodExtractor.kt
index 58b6396a85a..e1fd47fffab 100644
--- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/DoodExtractor.kt
+++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/DoodExtractor.kt
@@ -77,7 +77,7 @@ open class DoodLaExtractor : ExtractorApi() {
override var name = "DoodStream"
override var mainUrl = "https://dood.la"
override val requiresReferer = false
-
+
private val alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
override suspend fun getUrl(
@@ -87,18 +87,17 @@ open class DoodLaExtractor : ExtractorApi() {
callback: (ExtractorLink) -> Unit
) {
val embedUrl = url.replace("/d/", "/e/")
- val req = app.get(embedUrl)
+ val req = app.get(embedUrl)
val host = getBaseUrl(req.url)
val response0 = req.text
- val md5 = host + (Regex("/pass_md5/[^']*").find(response0)?.value ?: return)
+ val md5 = host + (Regex("/pass_md5/[^']*").find(response0)?.value ?: return)
val trueUrl = app.get(md5, referer = req.url).text + createHashTable() + "?token=" + md5.substringAfterLast("/")
-
- val quality = Regex("\\d{3,4}p")
+ val quality = Regex("\\d{3,4}p")
.find(response0.substringAfter("").substringBefore(""))
?.groupValues
?.getOrNull(0)
-
- callback.invoke(
+
+ callback.invoke(
newExtractorLink(
this.name,
this.name,
@@ -108,19 +107,17 @@ open class DoodLaExtractor : ExtractorApi() {
this.quality = getQualityFromName(quality)
}
)
-
}
-
-private fun createHashTable(): String {
- return buildString {
- repeat(10) {
- append(alphabet.random())
+
+ private fun createHashTable(): String {
+ return buildString {
+ repeat(10) {
+ append(alphabet.random())
+ }
}
}
-}
-
-private fun getBaseUrl(url: String): String {
+ private fun getBaseUrl(url: String): String {
return URI(url).let {
"${it.scheme}://${it.host}"
}
diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filegram.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filegram.kt
index df7e0337365..7baa62710ba 100644
--- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filegram.kt
+++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filegram.kt
@@ -32,32 +32,29 @@ open class Filegram : ExtractorApi() {
"Sec-Fetch-Site" to "same-site",
"user-agent" to USER_AGENT,
)
-
+
val doc = app.get(getEmbedUrl(url), referer = referer).document
val unpackedJs = unpackJs(doc).toString()
- val videoUrl = Regex("""file:\s*"([^"]+\.m3u8[^"]*)"""").find(unpackedJs)?.groupValues?.get(1)
+ val videoUrl = Regex("""file:\s*"([^"]+\.m3u8[^"]*)"""").find(unpackedJs)?.groupValues?.get(1)
if (videoUrl != null) {
M3u8Helper.generateM3u8(
- this.name,
- fixUrl(videoUrl),
- "$mainUrl/",
- headers = header
- ).forEach(callback)
+ this.name,
+ fixUrl(videoUrl),
+ "$mainUrl/",
+ headers = header
+ ).forEach(callback)
}
}
- private fun unpackJs(script: Element): String? {
- return script.select("script").find { it.data().contains("eval(function(p,a,c,k,e,d)") }
- ?.data()?.let { getAndUnpack(it) }
- }
-
- private fun getEmbedUrl(url: String): String {
- return if (!url.contains("/embed-")) {
- val videoId = url.substringAfter("$mainUrl/")
- "$mainUrl/embed-$videoId"
- } else {
- url
- }
- }
+ private fun unpackJs(script: Element): String? {
+ return script.select("script").find { it.data().contains("eval(function(p,a,c,k,e,d)") }
+ ?.data()?.let { getAndUnpack(it) }
+ }
+ private fun getEmbedUrl(url: String): String {
+ return if (!url.contains("/embed-")) {
+ val videoId = url.substringAfter("$mainUrl/")
+ "$mainUrl/embed-$videoId"
+ } else url
+ }
}
diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt
index bacd658bbad..9654e5f3805 100644
--- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt
+++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt
@@ -15,12 +15,12 @@ open class RapidVid : ExtractorApi() {
val extRef = referer ?: ""
val videoReq = app.get(url, referer=extRef).text
- val subUrls = mutableSetOf()
+ val subUrls = mutableSetOf()
Regex("""captions\",\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(videoReq).forEach {
val (subUrl, subLang) = it.destructured
- if (subUrl in subUrls) { return@forEach }
- subUrls.add(subUrl)
+ if (subUrl in subUrls) { return@forEach }
+ subUrls.add(subUrl)
subtitleCallback.invoke(
newSubtitleFile(
diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt
index c8796896c09..1348f74d501 100644
--- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt
+++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt
@@ -29,7 +29,7 @@ open class TRsTX : ExtractorApi() {
)
}
- val vidLinks = mutableSetOf()
+ val vidLinks = mutableSetOf()
val vidMap = mutableListOf