diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 8f5c6286636..bf499d2a77e 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -27,7 +27,7 @@ jobs: cache-read-only: false - name: Run Gradle - run: ./gradlew assemblePrereleaseDebug lint check + run: ./gradlew assemblePrereleaseDebug - name: Upload Artifact uses: actions/upload-artifact@v7 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 66a55ae8830..2a86d06cb48 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -267,7 +267,7 @@ dependencies { implementation(libs.qrcode.kotlin) // QR Code for PIN Auth on TV // Extensions & Other Libs - implementation(libs.jsoup) // HTML Parser + implementation(libs.jsoup) // HTML Parser (Deprecated usage) implementation(libs.rhino) // Run JavaScript implementation(libs.safefile) // To Prevent the URI File Fu*kery coreLibraryDesugaring(libs.desugar.jdk.libs.nio) // NIO Flavor Needed for NewPipeExtractor diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 90583011d19..b061436ddca 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -2064,7 +2064,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa app.get( "https://raw.githubusercontent.com/recloudstream/.github/master/connectivitycheck", timeout = 5 - ).text.trim() == "ok" + ).text().trim() == "ok" } catch (t: Throwable) { false } diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt index 9efa88a37f6..f9c76ad19ae 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt @@ -6,7 +6,8 @@ import androidx.annotation.AnyThread import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.debugWarning import com.lagradost.cloudstream3.mvvm.safe -import com.lagradost.nicehttp.Requests.Companion.await +import com.lagradost.cloudstream3.okHttpClient +import com.lagradost.nicehttp.RequestsCompat.await import com.lagradost.nicehttp.cookies import kotlinx.coroutines.runBlocking import okhttp3.Headers @@ -102,7 +103,8 @@ class CloudflareKiller : Interceptor { val headers = getHeaders(request.headers.toMap() + userAgentMap, cookies + request.cookies) - return app.baseClient.newCall( + @Suppress("DEPRECATION_ERROR") + return okHttpClient.newCall( request.newBuilder() .headers(headers) .build() @@ -135,4 +137,4 @@ class CloudflareKiller : Interceptor { val cookies = savedCookies[request.url.host] ?: return null return proceed(request, cookies) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/DdosGuardKiller.kt b/app/src/main/java/com/lagradost/cloudstream3/network/DdosGuardKiller.kt index b5783f78c6e..ceb04d8676d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/DdosGuardKiller.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/DdosGuardKiller.kt @@ -2,6 +2,7 @@ package com.lagradost.cloudstream3.network import androidx.annotation.AnyThread import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.okHttpClient import com.lagradost.nicehttp.Requests import com.lagradost.nicehttp.cookies import kotlinx.coroutines.runBlocking @@ -34,7 +35,7 @@ class DdosGuardKiller(private val alwaysBypass: Boolean) : Interceptor { ddosBypassPath = ddosBypassPath ?: Regex("'(.*?)'").find( app.get( "https://check.ddos-guard.net/check.js" - ).text + ).text() )?.groupValues?.get(1) val cookies = @@ -48,10 +49,10 @@ class DdosGuardKiller(private val alwaysBypass: Boolean) : Interceptor { } val headers = getHeaders(request.headers.toMap(), cookies + request.cookies) - return app.baseClient.newCall( + return okHttpClient.newCall( request.newBuilder() .headers(headers) .build() ).execute() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt index 6234297d080..6302d02217e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt @@ -8,6 +8,10 @@ import com.lagradost.cloudstream3.USER_AGENT import com.lagradost.cloudstream3.mvvm.safe import com.lagradost.nicehttp.Requests import com.lagradost.nicehttp.ignoreAllSSLErrors +import io.ktor.client.* +import io.ktor.client.engine.okhttp.* +import io.ktor.client.plugins.* +import io.ktor.client.plugins.cache.* import okhttp3.Cache import okhttp3.Headers import okhttp3.Headers.Companion.toHeaders @@ -18,48 +22,42 @@ import java.security.Security // Backwards compatible constructor, mark as deprecated later fun Requests.initClient(context: Context) { - this.baseClient = buildDefaultClient(context) + this.baseClient = buildDefaultKtorClient(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) { - this.baseClient = buildDefaultClient(context, ignoreSSL) + this.baseClient = buildDefaultKtorClient(context, ignoreSSL) } - // Backwards compatible constructor, mark as deprecated later fun buildDefaultClient(context: Context): OkHttpClient { return buildDefaultClient(context, false) } -/** 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 { safe { Security.insertProviderAt(Conscrypt.newProvider(), 1) } - + val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) val dns = settingsManager.getInt(context.getString(R.string.dns_pref), 0) - val baseClient = OkHttpClient.Builder() + + return OkHttpClient.Builder() .followRedirects(true) .followSslRedirects(true) - .apply { - if (ignoreSSL) { - ignoreAllSSLErrors() - } - } + .apply { if (ignoreSSL) ignoreAllSSLErrors() } .cache( - // Note that you need to add a ResponseInterceptor to make this 100% active. - // The server response dictates if and when stuff should be cached. Cache( directory = File(context.cacheDir, "http_cache"), maxSize = 50L * 1024L * 1024L // 50 MiB ) - ).apply { + ) + .apply { when (dns) { 1 -> addGoogleDns() 2 -> addCloudFlareDns() -// 3 -> addOpenDns() 4 -> addAdGuardDns() 5 -> addDNSWatchDns() 6 -> addQuad9Dns() @@ -67,9 +65,23 @@ fun buildDefaultClient(context: Context, ignoreSSL: Boolean = false): OkHttpClie 8 -> addCanadianShieldDns() } } - // Needs to be build as otherwise the other builders will change this object .build() - return baseClient +} + +/** + * Builds a Ktor [HttpClient] using the OkHttp engine configured with the same + * settings as [buildDefaultClient] — cache, DNS, SSL, etc. + */ +fun buildDefaultKtorClient(context: Context, ignoreSSL: Boolean = false): HttpClient { + val okHttpClient = buildDefaultClient(context, ignoreSSL) + return HttpClient(OkHttp) { + install(HttpTimeout) + install(HttpCache) + install(HttpRequestRetry) { noRetry() } + engine { + preconfigured = okHttpClient + } + } } private val DEFAULT_HEADERS = mapOf("user-agent" to USER_AGENT) @@ -89,4 +101,4 @@ fun getHeaders( }) else mapOf() val tempHeaders = (DEFAULT_HEADERS + headers + cookieMap) return tempHeaders.toHeaders() -} \ No newline at end of file +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt index 07d6aaa37bc..65eda36ea2c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -144,7 +144,7 @@ object RepositoryManager { val response = app.get(convertRawGitUrl(pluginUrls)) // Normal parsed function not working? // return response.parsedSafe() - tryParseJson>(response.text)?.toList() ?: emptyList() + tryParseJson>(response.text())?.toList() ?: emptyList() } catch (t: Throwable) { logError(t) emptyList() @@ -177,7 +177,7 @@ object RepositoryManager { // Prevent corrupting the plugin file if the operation fails val tempFile = File.createTempFile(file.name, ".tmp", context.cacheDir) - val body = app.get(convertRawGitUrl(pluginUrl)).okhttpResponse.body + val body = app.get(convertRawGitUrl(pluginUrl)).body() body.byteStream().use { body -> tempFile.outputStream().use { fileSteam -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt index 85a806f0b12..6fe3c32a6c7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt @@ -41,7 +41,7 @@ object VotingApi { val id = transformUrl(pluginUrl) val url = "$API_DOMAIN/increment/$id" Log.d(LOGKEY, "Requesting POST: $url") - return app.post(url, emptyMap()) + return app.post(url) { headers = emptyMap() } .parsedSafe()?.count != null } diff --git a/app/src/main/java/com/lagradost/cloudstream3/services/PackageInstallerService.kt b/app/src/main/java/com/lagradost/cloudstream3/services/PackageInstallerService.kt index fa7754718b5..ce4abcacd13 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/services/PackageInstallerService.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/services/PackageInstallerService.kt @@ -80,7 +80,7 @@ class PackageInstallerService : Service() { ApkInstaller.InstallProgressStatus.Downloading ) - val body = app.get(url).body + val body = app.get(url).body() val inputStream = body.byteStream() installer = ApkInstaller(this) val totalSize = body.contentLength() diff --git a/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubProvider.kt index 9e6f241fb95..ceb7e034987 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubProvider.kt @@ -81,7 +81,7 @@ class SubtitleResource { url: String, nameGenerator: (String, File) -> String? = { _, _ -> null } ) { - val source = app.get(url).okhttpResponse.body.source() + val source = app.get(url).body().source() val zip = downloadFile(source) val realFiles = unzip(zip) zip.deleteRecursively() diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Addic7ed.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Addic7ed.kt index 144efff99ce..31d67e19cf7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Addic7ed.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Addic7ed.kt @@ -65,8 +65,8 @@ class Addic7ed : SubtitleAPI() { ) } - val response = app.get(url = "$HOST/search.php?search=$searchQuery&Submit=Search") - val hostDocument = response.document + val response = app.get("$HOST/search.php?search=$searchQuery&Submit=Search") + val hostDocument = response.document() // 1st case: found one movie or episode. Redirected to $HOST/movie/1234 or $HOST/serie/show-name/$seasonNum/$epNum/ep-name if (response.url.contains("/movie/") || response.url.contains("/serie/")) @@ -78,7 +78,7 @@ class Addic7ed : SubtitleAPI() { val doc = app.get( "$HOST/ajax_loadShow.php?show=$showId&season=$seasonNum&langs=|$langNumAddic7ed|&hd=0&hi=0", referer = "$HOST/" - ).document + ).document() // get direct subtitles links from list return doc.select("#season tbody tr").mapNotNull { node -> @@ -105,7 +105,7 @@ class Addic7ed : SubtitleAPI() { // filter download page by language. Do not work for movies :/ if (downloadPage.contains("/serie/")) downloadPage = downloadPage.substringBeforeLast("/") + "/$langNumAddic7ed" - val doc = app.get(url = downloadPage).document + val doc = app.get(url = downloadPage).document() // get subtitles links from download page return doc.select(".tabel95 .tabel95 tr:has(.language):contains($langName)").mapNotNull { node -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt index 441eb1bf296..673a12b1c01 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt @@ -273,7 +273,7 @@ class AniListApi : SyncAPI() { //headers = mapOf(), data = data,//(if (vars == null) mapOf("query" to q) else mapOf("query" to q, "variables" to vars)) timeout = 5000 // REASONABLE TIMEOUT - ).text.replace("\\", "") + ).text().replace("\\", "") return res.toKotlinObject() } catch (e: Exception) { logError(e) @@ -456,7 +456,7 @@ class AniListApi : SyncAPI() { "https://graphql.anilist.co", data = mapOf("query" to q), cacheTime = 0, - ).text + ).text() return tryParseJson(data) ?: throw ErrorLoadingException("Error parsing $data") } @@ -524,7 +524,7 @@ class AniListApi : SyncAPI() { ) ), //(if (vars == null) mapOf("query" to q) else mapOf("query" to q, "variables" to vars)) timeout = 5 // REASONABLE TIMEOUT - ).text.replace("\\/", "/") + ).text().replace("\\/", "/") } diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/MALApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/MALApi.kt index 0809ccc43a6..ad3641f8236 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/MALApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/MALApi.kt @@ -237,7 +237,7 @@ class MALApi : SyncAPI() { url, headers = mapOf( "Authorization" to "Bearer $auth" ) - ).text + ).text() return parseJson(res).let { malAnime -> SyncAPI.SyncResult( id = internalId.toString(), @@ -541,7 +541,7 @@ class MALApi : SyncAPI() { url, headers = mapOf( "Authorization" to "Bearer ${token.accessToken}", ), cacheTime = 0 - ).text + ).text() return res.toKotlinObject() } @@ -594,7 +594,7 @@ class MALApi : SyncAPI() { "Authorization" to "Bearer ${token.accessToken}" ), data = data - ).text + ).text() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt index d7e10c81441..18c4033ddd7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt @@ -86,6 +86,7 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.debugAssert import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.safe +import com.lagradost.cloudstream3.okHttpClient import com.lagradost.cloudstream3.ui.player.CustomDecoder.Companion.fixSubtitleAlignment import com.lagradost.cloudstream3.ui.player.live.LiveHelper import com.lagradost.cloudstream3.ui.player.live.PREFERRED_LIVE_OFFSET @@ -733,18 +734,19 @@ class CS3IPlayer : IPlayer { private var simpleCache: SimpleCache? = null - /// Create a small factory for small things, no cache, no cronet + // Create a small factory for small things, no cache, no cronet private fun createOnlineSource( headers: Map?, interceptor: Interceptor? ): HttpDataSource.Factory { val client = if (interceptor == null) { - app.baseClient + okHttpClient } else { - app.baseClient.newBuilder() + okHttpClient.newBuilder() .addInterceptor(interceptor) .build() } + val source = OkHttpDataSource.Factory(client).setUserAgent(USER_AGENT) if (!headers.isNullOrEmpty()) { @@ -799,7 +801,7 @@ class CS3IPlayer : IPlayer { val source = if (interceptor == null) { if (engine == null) { Log.d(TAG, "Using DefaultHttpDataSource for $link") - OkHttpDataSource.Factory(app.baseClient).setUserAgent(userAgent) + OkHttpDataSource.Factory(okHttpClient).setUserAgent(userAgent) } else { Log.d(TAG, "Using CronetDataSource for $link") CronetDataSource.Factory(engine, Executors.newSingleThreadExecutor()) @@ -811,13 +813,13 @@ class CS3IPlayer : IPlayer { } } else { Log.d(TAG, "Using OkHttpDataSource for $link") - val client = app.baseClient.newBuilder() + val client = okHttpClient.newBuilder() .addInterceptor(interceptor) .build() OkHttpDataSource.Factory(client).setUserAgent(userAgent) } - // Do no include empty referer, if the provider wants those they can use the header map. + // Do not include empty referer, if the provider wants those they can use the header map. val refererMap = if (link.referer.isBlank()) emptyMap() else mapOf("referer" to link.referer) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/Torrent.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/Torrent.kt index 2e554f75eaf..1c24ca7e4f6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/Torrent.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/Torrent.kt @@ -38,7 +38,7 @@ object Torrent { return try { app.get( "$TORRENT_SERVER_URL/echo", - ).text.isNotEmpty() + ).text().isNotEmpty() } catch (e: ConnectException) { // `Failed to connect to /127.0.0.1:8090` if the server is down false diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchSuggestionApi.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchSuggestionApi.kt index 8dbd7817898..382b7918406 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchSuggestionApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchSuggestionApi.kt @@ -57,7 +57,7 @@ object SearchSuggestionApi { * Parses the TMDB search response and extracts movie/TV show titles. * Filters to only include movies, TV shows, and anime. */ - private fun parseSuggestions(response: NiceResponse): List { + private suspend fun parseSuggestions(response: NiceResponse): List { return try { val parsed = response.parsed() parsed.results diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt index b01f6e07e27..4c886988779 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt @@ -94,7 +94,7 @@ object InAppUpdater { val url = "https://api.github.com/repos/$GITHUB_USER_NAME/$GITHUB_REPO/releases" val headers = mapOf("Accept" to "application/vnd.github.v3+json") val response = parseJson>( - app.get(url, headers = headers).text + app.get(url, headers = headers).text() ).toList() val versionRegex = Regex("""(.*?((\d+)\.(\d+)\.(\d+))\.apk)""") @@ -149,7 +149,7 @@ object InAppUpdater { val releaseUrl = "https://api.github.com/repos/$GITHUB_USER_NAME/$GITHUB_REPO/releases" val headers = mapOf("Accept" to "application/vnd.github.v3+json") val response = parseJson>( - app.get(releaseUrl, headers = headers).text + app.get(releaseUrl, headers = headers).text() ).toList() val found = response.lastOrNull { rel -> @@ -194,7 +194,7 @@ object InAppUpdater { val sink: BufferedSink = downloadedFile.sink().buffer() updateLock.withLock { - sink.writeAll(app.get(url).body.source()) + sink.writeAll(app.get(url).body().source()) sink.close() openApk(this, Uri.fromFile(downloadedFile)) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt index 6e74fa00a5c..392586dc3fb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt @@ -70,7 +70,7 @@ object SyncUtil { //Gogoanime, Twistmoe and 9anime val url = "https://raw.githubusercontent.com/MALSync/MAL-Sync-Backup/master/data/pages/$site/$slug.json" - val response = app.get(url, cacheTime = 1, cacheUnit = TimeUnit.DAYS).text + val response = app.get(url, cacheTime = 1, cacheUnit = TimeUnit.DAYS).text() val mapped = tryParseJson(response) val overrideMal = mapped?.malId ?: mapped?.mal?.id ?: mapped?.anilist?.malId diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/downloader/DownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/downloader/DownloadManager.kt index 7cb1906679a..114f07d7728 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/downloader/DownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/downloader/DownloadManager.kt @@ -821,7 +821,7 @@ object VideoDownloadManager { referer = referer, verify = false ) - val requestStream = request.body.byteStream() + val requestStream = request.body().byteStream() var read: Int diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 80e342c2cb2..f2d88071030 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -38,7 +38,7 @@ media3 = "1.9.3" navigationKtx = "2.9.8" newpipeextractor = "v0.26.3" nextlibMedia3 = "1.9.3-0.12.0" -nicehttp = "0.4.18" +nicehttp = "ea97cfd14d" overlappingpanels = "0.1.5" paletteKtx = "1.0.0" preferenceKtx = "1.2.1" @@ -113,7 +113,7 @@ navigation-ui-ktx = { module = "androidx.navigation:navigation-ui-ktx", version. newpipeextractor = { module = "com.github.teamnewpipe:NewPipeExtractor", version.ref = "newpipeextractor" } nextlib-media3ext = { module = "io.github.anilbeesetti:nextlib-media3ext", version.ref = "nextlibMedia3" } nextlib-mediainfo = { module = "io.github.anilbeesetti:nextlib-mediainfo", version.ref = "nextlibMedia3" } -nicehttp = { module = "com.github.Blatzar:NiceHttp", version.ref = "nicehttp" } +nicehttp = { module = "com.github.Luna712.NiceHttp-kmp:library", version.ref = "nicehttp" } overlappingpanels = { module = "com.github.discord:OverlappingPanels", version.ref = "overlappingpanels" } palette-ktx = { module = "androidx.palette:palette-ktx", version.ref = "paletteKtx" } preference-ktx = { module = "androidx.preference:preference-ktx", version.ref = "preferenceKtx" } diff --git a/library/src/androidMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.android.kt b/library/src/androidMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.android.kt index 2f9c9b628cd..299ba9cc9b3 100644 --- a/library/src/androidMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.android.kt +++ b/library/src/androidMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.android.kt @@ -14,6 +14,7 @@ import com.lagradost.cloudstream3.utils.Coroutines.atomicListOf import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.Coroutines.mainWork import com.lagradost.cloudstream3.utils.Coroutines.runOnMainThread +import com.lagradost.nicehttp.NiceResponse import com.lagradost.nicehttp.requestCreator import io.ktor.http.Url import io.ktor.http.decodeURLPart @@ -228,12 +229,12 @@ actual class WebViewResolver actual constructor( useOkhttp && request.method == "GET" -> app.get( webViewUrl, headers = request.requestHeaders - ).okhttpResponse.toWebResourceResponse() + ).toWebResourceResponse() useOkhttp && request.method == "POST" -> app.post( webViewUrl, headers = request.requestHeaders - ).okhttpResponse.toWebResourceResponse() + ).toWebResourceResponse() else -> super.shouldInterceptRequest( view, @@ -294,16 +295,16 @@ fun WebResourceRequest.toRequest(): Request? { } } -fun Response.toWebResourceResponse(): WebResourceResponse { - val contentTypeValue = this.header("Content-Type") +suspend fun NiceResponse.toWebResourceResponse(): WebResourceResponse { + val contentTypeValue = this.headers["Content-Type"] // 1. contentType. 2. charset val typeRegex = Regex("""(.*);(?:.*charset=(.*)(?:|;)|)""") return if (contentTypeValue != null) { val found = typeRegex.find(contentTypeValue) val contentType = found?.groupValues?.getOrNull(1)?.ifBlank { null } ?: contentTypeValue val charset = found?.groupValues?.getOrNull(2)?.ifBlank { null } - WebResourceResponse(contentType, charset, this.body.byteStream()) + WebResourceResponse(contentType, charset, this.body().byteStream()) } else { - WebResourceResponse("application/octet-stream", null, this.body.byteStream()) + WebResourceResponse("application/octet-stream", null, this.body().byteStream()) } } diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt index ffc0a938d3c..361ce99faca 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt @@ -189,12 +189,12 @@ object APIHolder { referer = referer, cacheTime = 0 ) - .text + .text() .substringAfter("releases/") .substringBefore("/") val recapToken = app.get("https://www.google.com/recaptcha/api2/anchor?ar=1&hl=en&size=invisible&cb=cs3&k=$key&co=$domain&v=$vToken") - .document + .document() .selectFirst("#recaptcha-token")?.attr("value") if (recapToken != null) { return app.post( @@ -207,7 +207,7 @@ object APIHolder { "sa" to "", "reason" to "q" ), cacheTime = 0 - ).text + ).text() .substringAfter("rresp\",\"") .substringBefore("\"") } diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainActivity.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainActivity.kt index 127b075daae..5576156b81d 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainActivity.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainActivity.kt @@ -4,6 +4,8 @@ import com.lagradost.cloudstream3.utils.AppUtils.parseJson import com.lagradost.cloudstream3.utils.AppUtils.toJson import com.lagradost.nicehttp.Requests import com.lagradost.nicehttp.ResponseParser +import io.ktor.client.engine.okhttp.OkHttpEngine +import okhttp3.OkHttpClient import kotlin.reflect.KClass // Short name for requests client to make it nicer to use @@ -31,6 +33,11 @@ var app = Requests(responseParser = jsonResponseParser).apply { defaultHeaders = mapOf("user-agent" to USER_AGENT) } +// TODO: Remove usage of this by migrating interceptors and media3 to ktor +@InternalAPI +val okHttpClient = (app.baseClient.engine as? OkHttpEngine) + ?.config?.preconfigured ?: OkHttpClient() + /** 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. */ @Prerelease diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Acefile.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Acefile.kt index a86c5f01a83..6b1f66c6990 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Acefile.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Acefile.kt @@ -16,7 +16,7 @@ open class Acefile : ExtractorApi() { callback: (ExtractorLink) -> Unit ) { val id = "/(?:d|download|player|f|file)/(\\w+)".toRegex().find(url)?.groupValues?.get(1) - val script = getAndUnpack(app.get("$mainUrl/player/${id ?: return}").text) + val script = getAndUnpack(app.get("$mainUrl/player/${id ?: return}").text()) val service = """service\s*=\s*['"]([^'"]+)""".toRegex().find(script)?.groupValues?.get(1) val serverUrl = """['"](\S+check&id\S+?)['"]""".toRegex().find(script)?.groupValues?.get(1) ?.replace("\"+service+\"", service ?: return) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Blogger.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Blogger.kt index a9f4a3eb99a..4fc2ac6c7de 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Blogger.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Blogger.kt @@ -12,7 +12,7 @@ open class Blogger : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?): List { val sources = mutableListOf() - with(app.get(url).document) { + with(app.get(url).document()) { this.select("script").map { script -> if (script.data().contains("\"streams\":[")) { val data = script.data().substringAfter("\"streams\":[") diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Cda.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Cda.kt index 5c9f58efca9..dce60c4921e 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Cda.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Cda.kt @@ -24,7 +24,7 @@ open class Cda : ExtractorApi() { "User-Agent" to USER_AGENT, "Cookie" to "cda.player=html5" ) - ).document + ).document() val dataRaw = doc.selectFirst("[player_data]")?.attr("player_data") ?: return null val playerData = tryParseJson(dataRaw) ?: return null return listOf( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/CloudMailRuExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/CloudMailRuExtractor.kt index 7f6d980493c..9be76d5b6c9 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/CloudMailRuExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/CloudMailRuExtractor.kt @@ -29,7 +29,7 @@ open class CloudMailRu : ExtractorApi() { ) val vidId = url.substringAfter("public/").encodeToByteArray() val vidIdEnc = base64Encode(vidId) - val videoReq = app.get(url, headers=headers).text + val videoReq = app.get(url, headers=headers).text() val regex = Regex(pattern = "videowl_view\":\\{\"count\":\"1\",\"url\":\"([^\"]*)\"\\}", options = setOf(RegexOption.IGNORE_CASE)) val videoMatch = regex.find(videoReq)?.groupValues?.get(1).toString() val videoUrl = "$videoMatch/0p/$vidIdEnc.m3u8?double_encode=1" 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 dba2e926787..8e0141623aa 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt @@ -14,7 +14,7 @@ open class ContentX : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { val extRef = referer ?: "" - val iSource = app.get(url, referer=extRef).text + 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() @@ -32,7 +32,7 @@ open class ContentX : ExtractorApi() { ) } - val vidSource = app.get("${mainUrl}/source2.php?v=${iExtract}", referer=extRef).text + val vidSource = app.get("${mainUrl}/source2.php?v=${iExtract}", referer=extRef).text() val vidExtract = Regex("""file\":\"([^\"]+)""").find(vidSource)!!.groups[1]?.value ?: throw ErrorLoadingException("vidExtract is null") val m3uLink = vidExtract.replace("\\", "") @@ -50,7 +50,7 @@ open class ContentX : ExtractorApi() { val iDublaj = Regex(""",\"([^']+)\",\"Türkçe""").find(iSource)!!.groups[1]?.value if (iDublaj != null) { - val dublajSource = app.get("${mainUrl}/source2.php?v=${iDublaj}", referer=extRef).text + val dublajSource = app.get("${mainUrl}/source2.php?v=${iDublaj}", referer=extRef).text() val dublajExtract = Regex("""file\":\"([^\"]+)""").find(dublajSource)!!.groups[1]?.value ?: throw ErrorLoadingException("dublajExtract is null") val dublajLink = dublajExtract.replace("\\", "") diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Dailymotion.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Dailymotion.kt index 4732cafcf6f..542724b5210 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Dailymotion.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Dailymotion.kt @@ -33,7 +33,7 @@ open class Dailymotion : ExtractorApi() { val id = getVideoId(embedUrl) ?: return val metaDataUrl = "$baseUrl/player/metadata/video/$id" - val response = app.get(metaDataUrl, referer = embedUrl).text + val response = app.get(metaDataUrl, referer = embedUrl).text() val gson = Gson() val meta = gson.fromJson(response, MetaData::class.java) 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 bce017276ad..5b8b79bf19e 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/DoodExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/DoodExtractor.kt @@ -109,7 +109,7 @@ open class DoodLaExtractor : ExtractorApi() { val embedUrl = url.replace("/d/", "/e/") val req = app.get(embedUrl) val host = getBaseUrl(req.url) - val response0 = req.text + val response0 = req.text() 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") diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Embedgram.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Embedgram.kt index 474f4edfaf2..6bb1f6941b7 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Embedgram.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Embedgram.kt @@ -19,7 +19,7 @@ open class Embedgram : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val document = app.get(url, referer = referer).document + val document = app.get(url, referer = referer).document() val link = document.select("video source:last-child").attr("src") val quality = document.select("video source:last-child").attr("title") callback.invoke( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/EmturbovidExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/EmturbovidExtractor.kt index f4a5cdb2b18..6d684e52d01 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/EmturbovidExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/EmturbovidExtractor.kt @@ -16,9 +16,9 @@ open class EmturbovidExtractor : ExtractorApi() { val response = app.get( url, referer = referer ?: "$mainUrl/" ) - val playerScript = - response.document.selectXpath("//script[contains(text(),'var urlPlay')]") - .html() + val playerScript = response.document() + .select("script:contains(var urlPlay)") + .html() val sources = mutableListOf() if (playerScript.isNotBlank()) { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Evolaod.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Evolaod.kt index 8fc71e55b78..e3cca0d1d81 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Evolaod.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Evolaod.kt @@ -17,10 +17,10 @@ open class Evoload : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?): List { val id = url.replace("https://evoload.io/e/", "") // wanted media id - val csrv_token = app.get("https://csrv.evosrv.com/captcha?m412548=").text // whatever that is - val captchaPass = app.get("https://cd2.evosrv.com/html/jsx/e.jsx").text.take(300).split("captcha_pass = '")[1].split("\'")[0] //extract the captcha pass from the js response (located in the 300 first chars) + val csrv_token = app.get("https://csrv.evosrv.com/captcha?m412548=").text() // whatever that is + val captchaPass = app.get("https://cd2.evosrv.com/html/jsx/e.jsx").text().take(300).split("captcha_pass = '")[1].split("\'")[0] //extract the captcha pass from the js response (located in the 300 first chars) val payload = mapOf("code" to id, "csrv_token" to csrv_token, "pass" to captchaPass) - val r = app.post("https://evoload.io/SecurePlayer", data=(payload)).text + val r = app.post("https://evoload.io/SecurePlayer", data=(payload)).text() val link = Regex("src\":\"(.*?)\"").find(r)?.destructured?.component1() ?: return listOf() return listOf( newExtractorLink( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Fastream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Fastream.kt index 94ddaf61e0e..9802917e85b 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Fastream.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Fastream.kt @@ -30,9 +30,9 @@ open class Fastream : ExtractorApi() { "file_code" to id, "auto" to "1" ) - ).document + ).document() } else { - app.get(url, referer = url).document + app.get(url, referer = url).document() } response.select("script").amap { script -> if (getPacked(script.data()) != null) { 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 7756f729087..4a37f417906 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filegram.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filegram.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.extractors +import com.fleeksoft.ksoup.nodes.Element import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.USER_AGENT import com.lagradost.cloudstream3.app @@ -7,7 +8,6 @@ import com.lagradost.cloudstream3.extractors.helper.JwPlayerHelper import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.getAndUnpack -import org.jsoup.nodes.Element open class Filegram : ExtractorApi() { override val name = "Filegram" @@ -32,7 +32,7 @@ open class Filegram : ExtractorApi() { "user-agent" to USER_AGENT, ) - val doc = app.get(getEmbedUrl(url), referer = referer).document + val doc = app.get(getEmbedUrl(url), referer = referer).document() val unpackedJs = unpackJs(doc).toString() JwPlayerHelper.extractStreamLinks(unpackedJs, name, mainUrl, callback, subtitleCallback, headers = header) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filemoon.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filemoon.kt index ad4def1defc..338a2c38cb1 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filemoon.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filemoon.kt @@ -47,10 +47,10 @@ open class FilemoonV2 : ExtractorApi() { ) val initialResponse = app.get(url, defaultHeaders) - val iframeSrcUrl = initialResponse.document.selectFirst("iframe")?.attr("src") + val iframeSrcUrl = initialResponse.document().selectFirst("iframe")?.attr("src") if (iframeSrcUrl.isNullOrEmpty()) { - val fallbackScriptData = initialResponse.document + val fallbackScriptData = initialResponse.document() .selectFirst("script:containsData(function(p,a,c,k,e,d))") ?.data().orEmpty() val unpackedScript = JsUnpacker(fallbackScriptData).unpack() @@ -74,7 +74,7 @@ open class FilemoonV2 : ExtractorApi() { val iframeHeaders = defaultHeaders + ("Accept-Language" to "en-US,en;q=0.5") val iframeResponse = app.get(iframeSrcUrl, headers = iframeHeaders) - val iframeScriptData = iframeResponse.document + val iframeScriptData = iframeResponse.document() .selectFirst("script:containsData(function(p,a,c,k,e,d))") ?.data().orEmpty() diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filesim.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filesim.kt index 51e127e3fef..4bdd92435f0 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filesim.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filesim.kt @@ -60,7 +60,7 @@ open class Filesim : ExtractorApi() { val embedUrl = url.replace("/download/", "/e/") var pageResponse = app.get(embedUrl, referer = referer) - val iframeElement = pageResponse.document.selectFirst("iframe") + val iframeElement = pageResponse.document().selectFirst("iframe") if (iframeElement != null) { val iframeUrl = iframeElement.attr("src") pageResponse = app.get( @@ -73,10 +73,10 @@ open class Filesim : ExtractorApi() { ) } - val scriptData = if (!getPacked(pageResponse.text).isNullOrEmpty()) { - getAndUnpack(pageResponse.text) + val scriptData = if (!getPacked(pageResponse.text()).isNullOrEmpty()) { + getAndUnpack(pageResponse.text()) } else { - pageResponse.document.selectFirst("script:containsData(sources:)")?.data() + pageResponse.document().selectFirst("script:containsData(sources:)")?.data() } val linkFound = JwPlayerHelper.extractStreamLinks(scriptData.orEmpty(), name, mainUrl, callback, subtitleCallback) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GDMirrorbot.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GDMirrorbot.kt index ba297067e73..abffcc8797f 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GDMirrorbot.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GDMirrorbot.kt @@ -30,7 +30,7 @@ open class GDMirrorbot : ExtractorApi() { val (sid, host) = if (!url.contains("key=")) { Pair(url.substringAfterLast("embed/"), getBaseUrl(app.get(url).url)) } else { - var pageText = app.get(url).text + var pageText = app.get(url).text() val finalId = Regex("""FinalID\s*=\s*"([^"]+)"""").find(pageText)?.groupValues?.get(1) val myKey = Regex("""myKey\s*=\s*"([^"]+)"""").find(pageText)?.groupValues?.get(1) val idType = Regex("""idType\s*=\s*"([^"]+)"""").find(pageText)?.groupValues?.get(1) ?: "imdbid" @@ -45,7 +45,7 @@ open class GDMirrorbot : ExtractorApi() { } else { "$mainUrl/mymovieapi?$idType=$finalId&key=$myKey" } - pageText = app.get(apiUrl).text + pageText = app.get(apiUrl).text() } val jsonElement = JsonParser.parseString(pageText) @@ -63,7 +63,7 @@ open class GDMirrorbot : ExtractorApi() { } val postData = mapOf("sid" to sid) - val responseText = app.post("$host/embedhelper.php", data = postData).text + val responseText = app.post("$host/embedhelper.php", data = postData).text() val rootElement = JsonParser.parseString(responseText) if (!rootElement.isJsonObject) return diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GUpload.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GUpload.kt index 7daaa55cc94..d8029fcbfb2 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GUpload.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GUpload.kt @@ -21,7 +21,7 @@ open class GUpload: ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val response = app.get(url, referer = referer).text + val response = app.get(url, referer = referer).text() val playerConfigEncoded = response.substringAfter("decodePayload('").substringBefore("');") val playerConfigString = base64Decode(playerConfigEncoded).substringAfter("|") diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GamoVideo.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GamoVideo.kt index 85212e6bb5b..f3ca2bf6804 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GamoVideo.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GamoVideo.kt @@ -18,7 +18,7 @@ open class GamoVideo : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - app.get(url, referer = referer).document.select("script") + app.get(url, referer = referer).document().select("script") .firstOrNull { JwPlayerHelper.canParseJwScript(it.data()) }!!.let { JwPlayerHelper.extractStreamLinks(it.data(), name, mainUrl, callback, subtitleCallback) } diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt index 5fc55aac63f..a6150b8cd5a 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt @@ -1,11 +1,11 @@ package com.lagradost.cloudstream3.extractors import com.fasterxml.jackson.annotation.JsonProperty +import com.fleeksoft.ksoup.nodes.Element import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.extractors.helper.AesHelper.cryptoAESHandler import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson -import org.jsoup.nodes.Element class DatabaseGdrive2 : Gdriveplayer() { override var mainUrl = "https://databasegdriveplayer.co" @@ -75,7 +75,7 @@ open class Gdriveplayer : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val document = app.get(url).document + val document = app.get(url).document() val eval = unpackJs(document)?.replace("\\", "") ?: return val data = Regex("data='(\\S+?)'").first(eval) ?: return diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gofile.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gofile.kt index 2b42e42c77e..c21a9c44cba 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gofile.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gofile.kt @@ -28,7 +28,7 @@ open class Gofile : ExtractorApi() { "$mainApi/accounts", ).parsedSafe()?.data?.token ?: return - val globalRes = app.get("$mainUrl/dist/js/config.js").text + val globalRes = app.get("$mainUrl/dist/js/config.js").text() val wt = Regex("""appdata\.wt\s*=\s*[\"']([^\"']+)[\"']""").find(globalRes)?.groupValues?.get(1) ?: return val headers = mapOf( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt index 37adad018d6..b30bc459202 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt @@ -18,7 +18,7 @@ class GoodstreamExtractor : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - app.get(url).document.select("script").map { script -> + app.get(url).document().select("script").map { script -> if (script.data().contains(Regex("file|player"))) { val urlRegex = Regex("file: \"(https:\\/\\/[a-z0-9.\\/-_?=&]+)\",") urlRegex.find(script.data())?.groupValues?.get(1).let { link -> diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt index 1ccd3e4d510..3fc1ed0f562 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt @@ -17,7 +17,7 @@ open class HDMomPlayer : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { val m3uLink:String? val extRef = referer ?: "" - val iSource = app.get(url, referer=extRef).text + val iSource = app.get(url, referer=extRef).text() val bePlayer = Regex("""bePlayer\('([^']+)',\s*'(\{[^\}]+\})'\);""").find(iSource)?.groupValues if (bePlayer != null) { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HubCloud.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HubCloud.kt index a974df15c46..e8c187e0f74 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HubCloud.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HubCloud.kt @@ -33,7 +33,7 @@ class HubCloud : ExtractorApi() { if ("hubcloud.php" in realUrl) { realUrl } else { - val rawHref = app.get(realUrl).document.select("#download").attr("href") + val rawHref = app.get(realUrl).document().select("#download").attr("href") if (rawHref.startsWith("http", ignoreCase = true)) { rawHref } else { @@ -50,7 +50,7 @@ class HubCloud : ExtractorApi() { return } - val document = app.get(href).document + val document = app.get(href).document() val size = document.selectFirst("i#size")?.text().orEmpty() val header = document.selectFirst("div.card-header")?.text().orEmpty() diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Hxfile.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Hxfile.kt index 8f8a0c0cec2..ec75273fe6a 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Hxfile.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Hxfile.kt @@ -45,7 +45,7 @@ open class Hxfile : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val document = app.get(url, allowRedirects = redirect, referer = referer).document + val document = app.get(url, allowRedirects = redirect, referer = referer).document() with(document) { this.select("script").map { script -> if (getPacked(script.data()) != null) { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/InternetArchive.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/InternetArchive.kt index 1ac6c789cbb..e0bd3078575 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/InternetArchive.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/InternetArchive.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.extractors +import com.fleeksoft.ksoup.nodes.Document import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.logError @@ -9,7 +10,6 @@ import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.StringUtils.decodeUrl import com.lagradost.cloudstream3.utils.newExtractorLink -import org.jsoup.nodes.Document open class InternetArchive : ExtractorApi() { override val mainUrl = "https://archive.org" @@ -34,7 +34,7 @@ open class InternetArchive : ExtractorApi() { ) { val document = archivedItems[url] ?: run { try { - val doc = app.get(url).document + val doc = app.get(url).document() archivedItems[url] = doc doc } catch (e: Exception) { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/JWPlayer.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/JWPlayer.kt index 324640355c4..cdb2a0a73e8 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/JWPlayer.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/JWPlayer.kt @@ -60,7 +60,7 @@ open class JWPlayer : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val script = app.get(url).document.selectFirst("script:containsData(sources:)") ?: return + val script = app.get(url).document().selectFirst("script:containsData(sources:)") ?: return JwPlayerHelper.extractStreamLinks(script.data(), name, mainUrl, callback, subtitleCallback) } } \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Jeniusplay.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Jeniusplay.kt index 896228b5110..c9a9aadae2f 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Jeniusplay.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Jeniusplay.kt @@ -21,7 +21,7 @@ open class Jeniusplay : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val document = app.get(url, referer = "$mainUrl/").document + val document = app.get(url, referer = "$mainUrl/").document() val hash = url.split("/").last().substringAfter("data=") val m3uLink = app.post( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Krakenfiles.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Krakenfiles.kt index b605a39c6b4..56f12a3dad6 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Krakenfiles.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Krakenfiles.kt @@ -20,7 +20,7 @@ open class Krakenfiles : ExtractorApi() { callback: (ExtractorLink) -> Unit ) { val id = Regex("/(?:view|embed-video)/([\\da-zA-Z]+)").find(url)?.groupValues?.get(1) - val doc = app.get("$mainUrl/embed-video/$id").document + val doc = app.get("$mainUrl/embed-video/$id").document() val link = doc.selectFirst("source")?.attr("src") callback.invoke( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/LuluStream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/LuluStream.kt index dec67959410..6d92bb40a78 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/LuluStream.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/LuluStream.kt @@ -42,7 +42,7 @@ open class LuluStream : ExtractorApi() { "auto" to "1", "referer" to (referer ?: "") ) - ).document + ).document() post.selectFirst("script:containsData(vplayer)")?.data() ?.let { script -> JwPlayerHelper.extractStreamLinks(script, name, mainUrl, callback, subtitleCallback) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Maxstream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Maxstream.kt index 51b0827d207..371d3ebaea2 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Maxstream.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Maxstream.kt @@ -10,7 +10,7 @@ open class Maxstream : ExtractorApi() { override val requiresReferer = false override suspend fun getUrl(url: String, referer: String?): List? { val extractedLinksList: MutableList = mutableListOf() - val response = app.get(url).text + val response = app.get(url).text() val jstounpack = Regex("cript\">eval((.|\\n)*?)").find(response)?.groups?.get(1)?.value val unpacjed = JsUnpacker(jstounpack).unpack() val extractedUrl = unpacjed?.let { Regex("""src:"((.|\n)*?)",type""").find(it) }?.groups?.get(1)?.value.toString() diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mediafire.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mediafire.kt index 57eb3bd091e..495a5832107 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mediafire.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mediafire.kt @@ -19,7 +19,7 @@ open class Mediafire : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val res = app.get(url, referer = referer).document + val res = app.get(url, referer = referer).document() val title = res.select("div.dl-btn-label").text() val video = res.selectFirst("a#downloadButton")?.attr("href") diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Moviehab.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Moviehab.kt index b7e65e65b94..63c5bf6e522 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Moviehab.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Moviehab.kt @@ -23,7 +23,7 @@ open class Moviehab : ExtractorApi() { callback: (ExtractorLink) -> Unit ) { val res = app.get(url) - res.document.select("video#player").let { + res.document().select("video#player").let { //should redirect first for making it works val link = app.get("$mainUrl/${it.select("source").attr("src")}", referer = url).url M3u8Helper.generateM3u8( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mvidoo.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mvidoo.kt index 84b8187237d..6b4944ed056 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mvidoo.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mvidoo.kt @@ -26,7 +26,7 @@ open class Mvidoo : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val document = app.get(url, referer = referer).text + val document = app.get(url, referer = referer).text() val data = Regex("""\{var\s*[^\s]+\s*=\s*(\[[^]]+])""").find(document)?.groupValues?.get(1) ?.removeSurrounding("[", "]")?.replace("\"", "")?.replace("\\x", "")?.split(",")?.map { it.decodeHex() }?.reversed()?.joinToString("") ?: return Regex("source\\s*src=\"([^\"]+)").find(data)?.groupValues?.get(1)?.let { link -> diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt index 69c3b775978..0a88639f450 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt @@ -30,7 +30,7 @@ open class Odnoklassniki : ExtractorApi() { "User-Agent" to USER_AGENT, ) val embedUrl = url.replace("/video/","/videoembed/") - val videoReq = app.get(embedUrl, headers=headers).text.replace("\\"", "\"").replace("\\\\", "\\") + val videoReq = app.get(embedUrl, headers=headers).text().replace("\\"", "\"").replace("\\\\", "\\") .replace(Regex("\\\\u([0-9A-Fa-f]{4})")) { matchResult -> matchResult.groupValues[1].toInt(16).toChar().toString() } diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt index f96387d75c1..4efd20589be 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt @@ -30,8 +30,8 @@ open class PeaceMakerst : ExtractorApi() { "X-Requested-With" to "XMLHttpRequest" ) ) - if (response.text.contains("teve2.com.tr\\/embed\\/")) { - val teve2Id = response.text.substringAfter("teve2.com.tr\\/embed\\/").substringBefore("\"") + if (response.text().contains("teve2.com.tr\\/embed\\/")) { + val teve2Id = response.text().substringAfter("teve2.com.tr\\/embed\\/").substringBefore("\"") val teve2Response = app.get( "https://www.teve2.com.tr/action/media/${teve2Id}", referer = "https://www.teve2.com.tr/embed/${teve2Id}" diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt index c59022abbb7..a5ecfb5d83a 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt @@ -21,7 +21,7 @@ open class PlayLtXyz: ExtractorApi() { var idUser = "" var idFile = "" var bodyText = "" - val doc = app.get(url, referer = referer).document + val doc = app.get(url, referer = referer).document() //Log.i(this.name, "Result => (url, script) $url / ${doc.select("script")}") bodyText = doc.select("script").firstOrNull { val text = it.toString() @@ -55,7 +55,7 @@ open class PlayLtXyz: ExtractorApi() { val data = app.post(posturl, headers = ajaxHead, data = ajaxData) //Log.i(this.name, "Result => (posturl) $posturl") if (data.isSuccessful) { - val itemstr = data.text + val itemstr = data.text() Log.i(this.name, "Result => (data) $itemstr") tryParseJson(itemstr)?.let { item -> val linkUrl = item.data ?: "" diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayerVoxzer.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayerVoxzer.kt index 950dbfef6c9..6b808d472d4 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayerVoxzer.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayerVoxzer.kt @@ -13,7 +13,7 @@ open class PlayerVoxzer : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?): List? { val listurl = url.replace("/view/","/list/") - val urltext = app.get(listurl, referer = url).text + val urltext = app.get(listurl, referer = url).text() val m3u8regex = Regex("((https:|http:)\\/\\/.*\\.m3u8)") val sources = mutableListOf() val listm3 = m3u8regex.find(urltext)?.value diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Rabbitstream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Rabbitstream.kt index 3f7408eb390..5e31e410edb 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Rabbitstream.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Rabbitstream.kt @@ -43,7 +43,7 @@ class Megacloud : Rabbitstream() { } private suspend fun getKeys(): List> { - val script = app.get(scriptUrl).text + val script = app.get(scriptUrl).text() fun matchingKey(value: String): String { return Regex(",$value=((?:0x)?([0-9a-fA-F]+))").find(script)?.groupValues?.get(1) ?.removePrefix("0x") ?: throw ErrorLoadingException("Failed to match the key") 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 822a5eed78d..9910014449d 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt @@ -13,7 +13,7 @@ open class RapidVid : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { val extRef = referer ?: "" - val videoReq = app.get(url, referer=extRef).text + val videoReq = app.get(url, referer=extRef).text() val subUrls = mutableSetOf() Regex("""captions\",\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(videoReq).forEach { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SBPlay.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SBPlay.kt index 4b183c16367..8a62f1699ba 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SBPlay.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SBPlay.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.extractors +import com.fleeksoft.ksoup.Ksoup import com.lagradost.cloudstream3.APIHolder.unixTimeMS import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.logError @@ -8,7 +9,6 @@ import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.getPostForm import com.lagradost.cloudstream3.utils.newExtractorLink -import org.jsoup.Jsoup //class SBPlay1 : SBPlay() { // override var mainUrl = "https://sbplay1.com" @@ -24,8 +24,8 @@ open class SBPlay : ExtractorApi() { override val requiresReferer = false override suspend fun getUrl(url: String, referer: String?): List { - val response = app.get(url, referer = referer).text - val document = Jsoup.parse(response) + val response = app.get(url, referer = referer).text() + val document = Ksoup.parse(response) val links = ArrayList() @@ -39,16 +39,16 @@ open class SBPlay : ExtractorApi() { val mode = it.groupValues[2] val hash = it.groupValues[3] val href = "https://sbplay.one/dl?op=download_orig&id=$id&mode=$mode&hash=$hash" - val hrefResponse = app.get(href).text + val hrefResponse = app.get(href).text() app.post( "https://sbplay.one/?op=notifications&open=&_=$unixTimeMS", referer = href ) - val hrefDocument = Jsoup.parse(hrefResponse) + val hrefDocument = Ksoup.parse(hrefResponse) val hrefSpan = hrefDocument.selectFirst("span > a") if (hrefSpan == null) { getPostForm(href, hrefResponse)?.let { form -> - val postDocument = Jsoup.parse(form) + val postDocument = Ksoup.parse(form) val downloadBtn = postDocument.selectFirst("a.downloadbtn")?.attr("href") if (downloadBtn.isNullOrEmpty()) { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SecvideoOnline.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SecvideoOnline.kt index 6b807417b7e..daf75b993ad 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SecvideoOnline.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SecvideoOnline.kt @@ -24,7 +24,7 @@ open class SecvideoOnline : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val doc = app.get(url, referer = referer).document + val doc = app.get(url, referer = referer).document() for (script in doc.select("script")) { val files = fileListRegex.findAll(script.data()) .mapNotNull { it.groupValues.getOrNull(1)?.split(",") } diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Sendvid.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Sendvid.kt index 514b802d451..9791a755545 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Sendvid.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Sendvid.kt @@ -15,7 +15,7 @@ open class Sendvid : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val doc = app.get(url).document + val doc = app.get(url).document() val urlString = doc.select("head meta[property=og:video:secure_url]").attr("content") if (urlString.contains("m3u8")) { generateM3u8( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt index 4c28549e576..314e3a58fd0 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt @@ -13,7 +13,7 @@ open class SibNet : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { val extRef = referer ?: "" - val iSource = app.get(url, referer=extRef).text + val iSource = app.get(url, referer=extRef).text() var m3uLink = Regex("""player.src\(\[\{src: \"([^\"]+)""").find(iSource)?.groupValues?.get(1) ?: throw ErrorLoadingException("m3u link not found") m3uLink = "${mainUrl}${m3uLink}" diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt index be95940e0c1..1ac5a104fe2 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt @@ -14,7 +14,7 @@ open class Sobreatsesuyp : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { val extRef = referer ?: "" - val videoReq = app.get(url, referer = extRef).text + val videoReq = app.get(url, referer = extRef).text() val file = Regex("""file\":\"([^\"]+)""").find(videoReq)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found") val postLink = "${mainUrl}/" + file.replace("\\", "") @@ -31,7 +31,7 @@ open class Sobreatsesuyp : ExtractorApi() { for (item in postJson) { if (item.file == null || item.title == null) continue - val videoData = app.post("${mainUrl}/playlist/${item.file.substring(1)}.txt", referer = extRef).text + val videoData = app.post("${mainUrl}/playlist/${item.file.substring(1)}.txt", referer = extRef).text() callback.invoke( newExtractorLink( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamEmbed.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamEmbed.kt index c89f4d226cb..7b2846d6bbf 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamEmbed.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamEmbed.kt @@ -19,7 +19,7 @@ open class StreamEmbed : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val jsonString = app.get(url, referer = mainUrl).text + val jsonString = app.get(url, referer = mainUrl).text() .substringAfter("var video = ").substringBefore(";") val video = parseJson
(jsonString) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamSilk.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamSilk.kt index f5ac6e6c6b0..b78e7341eca 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamSilk.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamSilk.kt @@ -18,7 +18,7 @@ open class StreamSilk : ExtractorApi() { callback: (ExtractorLink) -> Unit ) { val response = app.get(url, headers = mapOf("Accept" to "*/*")) - response.document.select("script").firstOrNull { + response.document().select("script").firstOrNull { it.html().contains("h,u,n,t,e,r") }?.html()?.let { hunted -> JsHunter(hunted).dehunt()?.let { script -> diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamTape.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamTape.kt index 211b5ecf946..2da73553e2f 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamTape.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamTape.kt @@ -31,7 +31,7 @@ open class StreamTape : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?): List? { with(app.get(url)) { var result = - this.document.select("script").firstOrNull { it.html().contains("botlink').innerHTML") } + this.document().select("script").firstOrNull { it.html().contains("botlink').innerHTML") } ?.html()?.lines()?.firstOrNull{ it.contains("botlink').innerHTML") }?.let { val scriptContent = it.substringAfter(").innerHTML").replaceFirst("=", "var url =") diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt index 58aa25c8cd1..5ca3c7c438e 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt @@ -178,12 +178,12 @@ open class StreamWishExtractor : ExtractorApi() { val pageResponse = app.get(resolveEmbedUrl(url), referer = referer) val playerScriptData = when { - !getPacked(pageResponse.text).isNullOrEmpty() -> getAndUnpack(pageResponse.text) - pageResponse.document.select("script").any { it.html().contains("jwplayer(\"vplayer\").setup(") } -> - pageResponse.document.select("script").firstOrNull { + !getPacked(pageResponse.text()).isNullOrEmpty() -> getAndUnpack(pageResponse.text()) + pageResponse.document().select("script").any { it.html().contains("jwplayer(\"vplayer\").setup(") } -> + pageResponse.document().select("script").firstOrNull { it.html().contains("jwplayer(\"vplayer\").setup(") }?.html() - else -> pageResponse.document.selectFirst("script:containsData(sources:)")?.data() + else -> pageResponse.document().selectFirst("script:containsData(sources:)")?.data() } val linkFound = JwPlayerHelper.extractStreamLinks(playerScriptData.orEmpty(), name, mainUrl, callback, subtitleCallback, headers) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamhub.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamhub.kt index 2cb9a5e5dc1..d840a76816b 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamhub.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamhub.kt @@ -19,7 +19,7 @@ open class Streamhub : ExtractorApi() { } override suspend fun getUrl(url: String, referer: String?): List? { - val response = app.get(url).text + val response = app.get(url).text() Regex("eval((.|\\n)*?)").find(response)?.groupValues?.get(1)?.let { jsEval -> JsUnpacker("eval$jsEval").unpack()?.let { unPacked -> Regex("sources:\\[\\{src:\"(.*?)\"").find(unPacked)?.groupValues?.get(1)?.let { link -> diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamoUpload.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamoUpload.kt index b7f618e9553..58b2a8dbb59 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamoUpload.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamoUpload.kt @@ -20,7 +20,7 @@ open class StreamoUpload : ExtractorApi() { callback: (ExtractorLink) -> Unit ) { val response = app.get(url, referer = referer) - response.document.select("script").map { script -> + response.document().select("script").map { script -> if (getPacked(script.data()) != null) { val data = getAndUnpack(script.data()) JwPlayerHelper.extractStreamLinks(data, name, mainUrl, callback, subtitleCallback) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamplay.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamplay.kt index 9886300aa18..a8dac673734 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamplay.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamplay.kt @@ -25,7 +25,7 @@ open class Streamplay : ExtractorApi() { val mainServer = Url(redirectUrl).let { "${it.protocol.name}://${it.host}" } val key = redirectUrl.substringAfter("embed-").substringBefore(".html") val token = - request.document.select("script").find { it.data().contains("sitekey:") }?.data() + request.document().select("script").find { it.data().contains("sitekey:") }?.data() ?.substringAfterLast("sitekey: '")?.substringBefore("',")?.let { captchaKey -> getCaptchaToken( redirectUrl, @@ -43,7 +43,7 @@ open class Streamplay : ExtractorApi() { "Accept" to "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Content-Type" to "application/x-www-form-urlencoded" ) - ).document.select("script").find { script -> + ).document().select("script").find { script -> script.data().contains("eval(function(p,a,c,k,e,d)") }?.let { val data = getAndUnpack(it.data()).substringAfter("sources=[").substringBefore(",desc") diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Supervideo.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Supervideo.kt index 5e47dd2decf..5e321b217b4 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Supervideo.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Supervideo.kt @@ -18,7 +18,7 @@ open class Supervideo : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val response = app.get(url).text + val response = app.get(url).text() val jstounpack = Regex("eval((.|\\n)*?)").find(response)?.groups?.get(1)?.value val unpacked = JsUnpacker(jstounpack).unpack() 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 1348f74d501..1345da96cdf 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt @@ -15,7 +15,7 @@ open class TRsTX : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { val extRef = referer ?: "" - val videoReq = app.get(url, referer=extRef).text + val videoReq = app.get(url, referer=extRef).text() val file = Regex("""file\":\"([^\"]+)""").find(videoReq)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found") val postLink = "${mainUrl}/" + file.replace("\\", "") @@ -35,7 +35,7 @@ open class TRsTX : ExtractorApi() { if (item.file == null || item.title == null) continue val fileUrl = "${mainUrl}/playlist/" + item.file.substring(1) + ".txt" - val videoData = app.post(fileUrl, referer=extRef).text + val videoData = app.post(fileUrl, referer=extRef).text() if (videoData in vidLinks) { continue } vidLinks.add(videoData) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Tantifilm.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Tantifilm.kt index 4e330d1a77a..2ac30d2c69b 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Tantifilm.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Tantifilm.kt @@ -27,7 +27,7 @@ open class Tantifilm : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?): List? { val link = "$mainUrl/api/source/${url.substringAfterLast("/")}" - val response = app.post(link).text.replace("""\""","") + val response = app.post(link).text().replace("""\""","") val jsonvideodata = parseJson(response) return jsonvideodata.data.map { newExtractorLink( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Up4Stream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Up4Stream.kt index b72213e66ea..ec85acdb946 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Up4Stream.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Up4Stream.kt @@ -29,7 +29,7 @@ open class Up4Stream : ExtractorApi() { // redirect from "wait 5 seconds" page to actual movie page val redirectResponse = app.get(url, cookies = mapOf("id" to movieId)) - val redirectForm = redirectResponse.document.selectFirst("form[method=POST]") ?: return + val redirectForm = redirectResponse.document().selectFirst("form[method=POST]") ?: return val redirectUrl = fixUrl(redirectForm.attr("action")) val redirectParams = redirectForm.select("input[type=hidden]").associate { input -> input.attr("name") to input.attr("value") @@ -37,7 +37,7 @@ open class Up4Stream : ExtractorApi() { // wait for 5 seconds, otherwise the below md5 hash is invalid delay(5000) - val response = app.post(redirectUrl, data = redirectParams).document + val response = app.post(redirectUrl, data = redirectParams).document() // starting here, this works similar to many other extractors like StreamWish val extractedpack = diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt index 09e47d037dd..098572dab8d 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt @@ -18,7 +18,7 @@ open class UpstreamExtractor : ExtractorApi() { callback: (ExtractorLink) -> Unit ) { //Log.i(this.name, "Result => (no extractor) ${url}") - val doc = app.get(url, referer = referer).text + val doc = app.get(url, referer = referer).text() if (doc.isNotBlank()) { var reg = Regex("(?<=master)(.*)(?=hls)") val result = reg.find(doc)?.groupValues?.map { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userload.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userload.kt index 08dcb634ed1..0b9ed9ab644 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userload.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userload.kt @@ -86,11 +86,11 @@ open class Userload : ExtractorApi() { val extractedLinksList: MutableList = mutableListOf() - val response = app.get(url).text + val response = app.get(url).text() val jsToUnpack = Regex("ext/javascript\">eval((.|\\n)*?)").find(response)?.groups?.get(1)?.value val unpacked = JsUnpacker(jsToUnpack).unpack() val videoJs = app.get("$mainUrl/api/assets/userload/js/videojs.js") - val videoJsToDecode = videoJs.text + val videoJsToDecode = videoJs.text() val values = decodeVideoJs(videoJsToDecode) val morocco = unpacked!!.split(";").filter { it.contains(values[0]) }[0].split("=")[1].drop(1).dropLast(1) val mycountry = unpacked.split(";").filter { it.contains(values[1]) }[0].split("=")[1].drop(1).dropLast(1) @@ -98,8 +98,8 @@ open class Userload : ExtractorApi() { "morocco" to morocco, "mycountry" to mycountry )) - val videoLink = videoLinkPage.text - val nameSource = app.get(url).document.head().selectFirst("title")!!.text() + val videoLink = videoLinkPage.text() + val nameSource = app.get(url).document().head().selectFirst("title")!!.text() extractedLinksList.add( newExtractorLink( name, diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userscloud.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userscloud.kt index b7cd03c9ec3..615dd28859d 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userscloud.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userscloud.kt @@ -18,7 +18,7 @@ open class Userscloud : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val res = app.get(url).document + val res = app.get(url).document() val video = res.selectFirst("video#vjsplayer source")?.attr("src") val quality = res.selectFirst("div.innerTB h2 b")?.text() callback.invoke( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Uservideo.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Uservideo.kt index 307825998b1..f6c3002813d 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Uservideo.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Uservideo.kt @@ -20,11 +20,11 @@ open class Uservideo : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val script = app.get(url).document.selectFirst("script:containsData(hosts =)")?.data() + val script = app.get(url).document().selectFirst("script:containsData(hosts =)")?.data() val host = script?.substringAfter("hosts = [\"")?.substringBefore("\"];") val servers = script?.substringAfter("servers = \"")?.substringBefore("\";") - val sources = app.get("$host/s/$servers").text.substringAfter("\"sources\":[").substringBefore("],").let { + val sources = app.get("$host/s/$servers").text().substringAfter("\"sources\":[").substringBefore("],").let { AppUtils.tryParseJson>("[$it]") } val quality = Regex("(\\d{3,4})[Pp]").find(url)?.groupValues?.getOrNull(1)?.toIntOrNull() diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vicloud.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vicloud.kt index 6b82ee454e8..b2b526458a1 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vicloud.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vicloud.kt @@ -20,7 +20,7 @@ open class Vicloud : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val id = Regex("\"apiQuery\":\"(.*?)\"").find(app.get(url).text)?.groupValues?.getOrNull(1) + val id = Regex("\"apiQuery\":\"(.*?)\"").find(app.get(url).text())?.groupValues?.getOrNull(1) app.get( "$mainUrl/api/?$id=&_=$unixTimeMS", headers = mapOf( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidHidePro.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidHidePro.kt index 849b2b6d96b..5a0674ca313 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidHidePro.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidHidePro.kt @@ -76,10 +76,10 @@ open class VidHidePro : ExtractorApi() { ) val response = app.get(getEmbedUrl(url), referer = referer) - val script = if (!getPacked(response.text).isNullOrEmpty()) { - getAndUnpack(response.text) + val script = if (!getPacked(response.text()).isNullOrEmpty()) { + getAndUnpack(response.text()) } else { - response.document.selectFirst("script:containsData(sources:)")?.data() + response.document().selectFirst("script:containsData(sources:)")?.data() } ?: return JwPlayerHelper.extractStreamLinks(script, name, mainUrl, callback, subtitleCallback, headers) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt index a23f6b683a3..0547d9f3b93 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt @@ -13,7 +13,7 @@ open class VidMoxy : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { val extRef = referer ?: "" - val videoReq = app.get(url, referer=extRef).text + val videoReq = app.get(url, referer=extRef).text() val subUrls = mutableSetOf() Regex("""captions\",\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(videoReq).forEach { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidStack.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidStack.kt index 63ceb1f3dfc..64738663a0d 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidStack.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidStack.kt @@ -38,7 +38,7 @@ open class VidStack : ExtractorApi() { val hash = url.substringAfterLast("#").substringAfter("/") val baseurl = getBaseUrl(url) - val encoded = app.get("$baseurl/api/v1/video?id=$hash", headers = headers).text.trim() + val encoded = app.get("$baseurl/api/v1/video?id=$hash", headers = headers).text().trim() val key = "kiemtienmua911ca" val ivList = listOf("1234567890oiuytr", "0123456789abcdef") diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Videa.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Videa.kt index 59d7a7f2e35..e2a2f9bad4b 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Videa.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Videa.kt @@ -34,9 +34,8 @@ class Videa : ExtractorApi() { val webUrl = getXmlUrl(currentUrl) { cookie -> /* no-op, cookie not used */ } ?: return val response = app.get(webUrl) - val body = response.body + val body = response.body() val rawBytes = body.bytes() - body.close() // Check if response starts with XML declaration val isXml = rawBytes.size >= 5 && @@ -75,7 +74,7 @@ class Videa : ExtractorApi() { // You tried to use a video here return null } - val html = response.text + val html = response.text() // Extract sl cookie if present response.headers["Set-Cookie"]?.let { cookieHeader -> @@ -94,7 +93,7 @@ class Videa : ExtractorApi() { // Get player page to extract tokens val playerResponse = app.get(playerUrl) - val playerHtml = playerResponse.text + val playerHtml = playerResponse.text() // Update cookie from player response playerResponse.headers["Set-Cookie"]?.let { cookieHeader -> diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt index bc94ae0cc2a..6bbd13d04fa 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt @@ -19,7 +19,7 @@ open class VideoSeyred : ExtractorApi() { val videoUrl = "${mainUrl}/playlist/${videoId}.json" val responseRaw = app.get(videoUrl) - val responseList: List = tryParseJson>(responseRaw.text) ?: throw ErrorLoadingException("VideoSeyred") + val responseList: List = tryParseJson>(responseRaw.text()) ?: throw ErrorLoadingException("VideoSeyred") val response = responseList[0] for (track in response.tracks) { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidmoly.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidmoly.kt index 11927c50752..15d05deac4c 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidmoly.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidmoly.kt @@ -40,7 +40,7 @@ open class Vidmoly : ExtractorApi() { else url val script = app.get(newUrl, headers = headers, referer = referer) - .document.select("script") + .document().select("script") .firstOrNull { it.data().contains("sources:") } ?.data() diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidoza.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidoza.kt index df663f97f6c..2a078034000 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidoza.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidoza.kt @@ -25,7 +25,7 @@ open class Vidoza: ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val response = app.get(url).document + val response = app.get(url).document() val script = response.selectFirst("script:containsData(sourcesCode)")?.data() ?: throw RuntimeException("couldn't find script containing video data") diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidsonic.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidsonic.kt index 49560d45689..f042c2da9d6 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidsonic.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidsonic.kt @@ -32,7 +32,7 @@ class Vidsonic() : ExtractorApi() { // }; // const _0x7 = _0x2(_0x1); <-- now contains the stream URL - val response = app.get(url).text + val response = app.get(url).text() val encodedStreamUrl = response .substringAfter("const _0x1 = ") .substringBefore(";") diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vinovo.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vinovo.kt index e905543a83a..f490390990c 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vinovo.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vinovo.kt @@ -28,7 +28,7 @@ open class VinovoTo : ExtractorApi() { val fixedUrl = url.replace("/d/", "/e/") val resp = app.get(fixedUrl, referer = referer) - val doc = resp.document + val doc = resp.document() val videoBaseUrl = doc.selectFirst("video")?.attr("data-base") ?: return val videoToken = doc.selectFirst("meta[name=token]")?.attr("content") ?: return diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VkExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VkExtractor.kt index 8e454087436..5661f5fdaa3 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VkExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VkExtractor.kt @@ -35,7 +35,7 @@ open class VkExtractor : ExtractorApi() { "Cache-Control" to "no-cache" ) val cookie = app.get(url, headers = headers, allowRedirects = false).cookies - val response = app.get(url, headers = headers, allowRedirects = false, cookies = cookie).text + val response = app.get(url, headers = headers, allowRedirects = false, cookies = cookie).text() val listUrl = listOf("url", "dash_sep", "hls") listUrl.forEach { linkType -> diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Voe.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Voe.kt index 67eb49c9a55..00ca90dc19f 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Voe.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Voe.kt @@ -62,11 +62,11 @@ open class Voe : ExtractorApi() { callback: (ExtractorLink) -> Unit ) { var res = app.get(url, referer = referer) - val redirectUrl = redirectRegex.find(res.document.data())?.groupValues?.get(1) + val redirectUrl = redirectRegex.find(res.document().data())?.groupValues?.get(1) if (redirectUrl != null) { res = app.get(redirectUrl, referer = referer) } - val encodedString = res.document.selectFirst("script[type=application/json]")?.data()?.trim()?.substringAfter("[\"")?.substringBeforeLast("\"]") + val encodedString = res.document().selectFirst("script[type=application/json]")?.data()?.trim()?.substringAfter("[\"")?.substringBeforeLast("\"]") if (encodedString == null) { println("encoded string not found.") return diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vtbe.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vtbe.kt index 2fdd7082a34..cbff69bf7e8 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vtbe.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vtbe.kt @@ -19,7 +19,7 @@ open class Vtbe : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val response = app.get(url,referer=mainUrl).document + val response = app.get(url,referer=mainUrl).document() val extractedpack = response.selectFirst("script:containsData(function(p,a,c,k,e,d))")?.data().toString() JsUnpacker(extractedpack).unpack()?.let { unPacked -> JwPlayerHelper.extractStreamLinks(unPacked, name, mainUrl, callback, subtitleCallback) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Wibufile.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Wibufile.kt index 61413feccba..2d5f734c0f0 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Wibufile.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Wibufile.kt @@ -19,7 +19,7 @@ open class Wibufile : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val res = app.get(url).text + val res = app.get(url).text() val video = Regex("src: ['\"](.*?)['\"]").find(res)?.groupValues?.get(1) callback.invoke( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/YourUpload.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/YourUpload.kt index 9f2d6bde042..cdb6deb46ed 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/YourUpload.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/YourUpload.kt @@ -15,7 +15,7 @@ open class YourUpload: ExtractorApi() { override suspend fun getUrl(url: String, referer: String?): List { val sources = mutableListOf() - with(app.get(url).document) { + with(app.get(url).document()) { val quality = Regex("\\d{3,4}p").find(this.select("title").text())?.groupValues?.get(0) this.select("script").map { script -> if (script.data().contains("var jwplayerOptions = {")) { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Zplayer.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Zplayer.kt index d17b427d73d..5ea231ea1af 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Zplayer.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Zplayer.kt @@ -28,7 +28,7 @@ open class ZplayerV2 : ExtractorApi() { override val requiresReferer = false override suspend fun getUrl(url: String, referer: String?): List { - val doc = app.get(url).document + val doc = app.get(url).document() val sources = mutableListOf() doc.select("script").map { script -> if (script.data().contains("eval(function(p,a,c,k,e,d)")) { @@ -38,7 +38,7 @@ open class ZplayerV2 : ExtractorApi() { it.value }.toList().amap { urlm3u8 -> if (urlm3u8.contains("m3u8")) { - val testurl = app.get(urlm3u8, headers = mapOf("Referer" to url)).text + val testurl = app.get(urlm3u8, headers = mapOf("Referer" to url)).text() if (testurl.contains("EXTM3U")) { M3u8Helper.generateM3u8( name, diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt index 39be8c9d609..d62ae6b4e90 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt @@ -15,7 +15,7 @@ class AsianEmbedHelper { callback: (ExtractorLink) -> Unit ) { // Fetch links - val doc = app.get(url).document + val doc = app.get(url).document() val links = doc.select("div#list-server-more > ul > li.linkserver") if (!links.isNullOrEmpty()) { links.amap { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt index 31618a32b95..c3d96b40432 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt @@ -1,6 +1,7 @@ package com.lagradost.cloudstream3.extractors.helper import com.fasterxml.jackson.annotation.JsonProperty +import com.fleeksoft.ksoup.nodes.Document import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.base64Decode import com.lagradost.cloudstream3.base64DecodeArray @@ -13,7 +14,6 @@ import com.lagradost.cloudstream3.utils.M3u8Helper import com.lagradost.cloudstream3.utils.getQualityFromName import com.lagradost.cloudstream3.utils.newExtractorLink import io.ktor.http.Url -import org.jsoup.nodes.Document import javax.crypto.Cipher import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.SecretKeySpec @@ -82,7 +82,7 @@ object GogoHelper { var document: Document? = iframeDocument val foundIv = - iv ?: (document ?: app.get(iframeUrl).document.also { document = it }) + iv ?: (document ?: app.get(iframeUrl).document().also { document = it }) .select("""div.wrapper[class*=container]""") .attr("class").split("-").lastOrNull() ?: return@safeApiCall val foundKey = secretKey ?: getKey(base64Decode(id) + foundIv) ?: return@safeApiCall @@ -94,7 +94,7 @@ object GogoHelper { val encryptedId = cryptoHandler(id, foundIv, foundKey) val encryptRequestData = if (isUsingAdaptiveData) { // Only fetch the document if necessary - val realDocument = document ?: app.get(iframeUrl).document + val realDocument = document ?: app.get(iframeUrl).document() val dataEncrypted = realDocument.select("script[data-name='episode']").attr("data-value") val headers = cryptoHandler(dataEncrypted, foundIv, foundKey, false) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/VstreamhubHelper.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/VstreamhubHelper.kt index e79422ebce9..39a23c5db49 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/VstreamhubHelper.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/VstreamhubHelper.kt @@ -20,7 +20,7 @@ class VstreamhubHelper { ) { if (url.startsWith(baseUrl)) { // Fetch links - val doc = app.get(url).document.select("script") + val doc = app.get(url).document().select("script") doc.forEach { val innerText = it.toString() if (!innerText.isNullOrEmpty()) { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/metaproviders/MyDramaList.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/metaproviders/MyDramaList.kt index e7e1175f032..31d9e0f7674 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/metaproviders/MyDramaList.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/metaproviders/MyDramaList.kt @@ -29,8 +29,8 @@ import com.lagradost.cloudstream3.newTvSeriesLoadResponse import com.lagradost.cloudstream3.newTvSeriesSearchResponse import com.lagradost.cloudstream3.utils.AppUtils.parseJson import com.lagradost.cloudstream3.utils.AppUtils.toJson -import okhttp3.Interceptor -import okhttp3.Response +import com.lagradost.nicehttp.HeadersInterceptor +import io.ktor.http.HttpHeaders //Reference: https://mydramalist.github.io/MDL-API/ abstract class MyDramaListAPI : MainAPI() { @@ -48,19 +48,9 @@ abstract class MyDramaListAPI : MainAPI() { val API_KEY: String = BuildConfig.MDL_API_KEY const val API_HOST = "https://api.mydramalist.com/v1" const val SITE_HOST = "https://mydramalist.com" - private val headerInterceptor = MyDramaListInterceptor() - } - - /** Automatically adds required api headers */ - private class MyDramaListInterceptor : Interceptor { - override fun intercept(chain: Interceptor.Chain): Response { - return chain.proceed( - chain.request().newBuilder() - .removeHeader("user-agent") - .addHeader("user-agent", "Dart/3.6 (dart:io)") - .addHeader("mdl-api-key", API_KEY) - .build() - ) + private val headerInterceptor = HeadersInterceptor { + header(HttpHeaders.UserAgent, "Dart/3.6 (dart:io)") + header("mdl-api-key", API_KEY) } } @@ -74,21 +64,19 @@ abstract class MyDramaListAPI : MainAPI() { ) override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse { - val list = app.get( - url = "${request.data}&limit=20&page=$page&lang=en-US", + val list = app.get("${request.data}&limit=20&page=$page&lang=en-US") { interceptor = headerInterceptor - ).parsed().map { element -> + }.parsed().map { element -> element.toSearchResponse() } return newHomePageResponse(request.name, list) } override suspend fun search(query: String): List? { - return app.post( - url = "$API_HOST/search/titles", - data = mapOf("q" to query), + return app.post("$API_HOST/search/titles") { + data = mapOf("q" to query) interceptor = headerInterceptor - ).parsed().map { element -> + }.parsed().map { element -> element.toSearchResponse() } } @@ -125,10 +113,9 @@ abstract class MyDramaListAPI : MainAPI() { override suspend fun load(url: String): LoadResponse { val data = parseJson(url) - return app.get( - url = "$API_HOST/titles/${data.media?.id}", + return app.get("$API_HOST/titles/${data.media?.id}") { interceptor = headerInterceptor - ).parsed().toLoadResponse(data) + }.parsed().toLoadResponse(data) } private suspend fun Media.toLoadResponse(data: Data): LoadResponse { @@ -275,10 +262,9 @@ abstract class MyDramaListAPI : MainAPI() { @JsonProperty("updated_at") val updatedAt: Long, ) { suspend fun fetchCredits(): List { - val actors = app.get( - url = "$API_HOST/titles/$id/credits", + val actors = app.get("$API_HOST/titles/$id/credits") { interceptor = headerInterceptor - ).parsed().cast.map { + }.parsed().cast.map { ActorData( Actor( name = it.name, @@ -291,17 +277,15 @@ abstract class MyDramaListAPI : MainAPI() { } suspend fun fetchRecommendations(): Recommendations { - return app.get( - url = "$API_HOST/titles/$id/recommendations", + return app.get("$API_HOST/titles/$id/recommendations") { interceptor = headerInterceptor - ).parsed() + }.parsed() } suspend fun fetchTrailer(): String? { - return app.get( - url = "$SITE_HOST/v1/trailers/${trailer?.id}", + return app.get("$SITE_HOST/v1/trailers/${trailer?.id}") { interceptor = headerInterceptor - ).parsedSafe()?.trailer?.trailerDetails?.source + }.parsedSafe()?.trailer?.trailerDetails?.source } fun fixGenres(): List { @@ -316,10 +300,9 @@ abstract class MyDramaListAPI : MainAPI() { } private suspend fun Media.fetchEpisodes(): List { - return app.get( - url = "$API_HOST/titles/${this.id}/episodes", + return app.get("$API_HOST/titles/${this.id}/episodes") { interceptor = headerInterceptor - ).parsed().map { + }.parsed().map { it.episodes }.flatten().map { ep -> val link = LinkData( diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt index f9167d08c2e..c28040ca04e 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.utils import com.fasterxml.jackson.annotation.JsonIgnore +import com.fleeksoft.ksoup.Ksoup import com.lagradost.cloudstream3.AudioFile import com.lagradost.cloudstream3.IDownloadableMinimum import com.lagradost.cloudstream3.Prerelease @@ -318,7 +319,6 @@ import io.ktor.http.decodeURLPart import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.ensureActive -import org.jsoup.Jsoup import kotlin.coroutines.cancellation.CancellationException import kotlin.uuid.ExperimentalUuidApi import kotlin.uuid.Uuid @@ -1319,7 +1319,7 @@ fun httpsify(url: String): String { } suspend fun getPostForm(requestUrl: String, html: String): String? { - val document = Jsoup.parse(html) + val document = Ksoup.parse(html) val inputs = document.select("Form > input") if (inputs.size < 4) return null var op: String? = null @@ -1351,7 +1351,7 @@ suspend fun getPostForm(requestUrl: String, html: String): String? { "accept" to "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" ), data = mapOf("op" to op, "id" to id, "mode" to mode, "hash" to hash) - ).text + ).text() } fun ExtractorApi.fixUrl(url: String): String { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/M3u8Helper.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/M3u8Helper.kt index 00d448d94dc..2604afe5993 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/M3u8Helper.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/M3u8Helper.kt @@ -128,7 +128,7 @@ object M3u8Helper2 { returnThis: Boolean = true ): List { val list = mutableListOf() - val response = app.get(m3u8.streamUrl, headers = m3u8.headers, verify = false).text + val response = app.get(m3u8.streamUrl, headers = m3u8.headers, verify = false).text() val parsed = HlsPlaylistParser.parse( m3u8.streamUrl, response, @@ -233,9 +233,8 @@ object M3u8Helper2 { val ts = allTsLinks[index] val tsResponse = app.get(ts.url, headers = headers, verify = false) - val body = tsResponse.body + val body = tsResponse.body() val tsData = body.bytes() - body.close() if (tsData.isEmpty()) throw ErrorLoadingException("no data") return if (isEncrypted) { @@ -266,7 +265,7 @@ object M3u8Helper2 { playlistStream.streamUrl, headers = playlistStream.headers, verify = false - ).text + ).text() val parsed = HlsPlaylistParser.parse(playlistStream.streamUrl, playlistResponse) if (parsed != null) { @@ -331,9 +330,8 @@ object M3u8Helper2 { encryptionIv = match[3].encodeToByteArray() val encryptionKeyResponse = app.get(encryptionUrl, headers = playlistStream.headers, verify = false) - val body = encryptionKeyResponse.body + val body = encryptionKeyResponse.body() encryptionData = body.bytes() - body.close() } else { encryptionState = false } diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/UnshortenUrl.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/UnshortenUrl.kt index ed04c255b3a..9f71bec455c 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/UnshortenUrl.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/UnshortenUrl.kt @@ -66,7 +66,7 @@ object ShortLink { } suspend fun unshortenAdfly(url: String): String { - val html = app.get(url).text + val html = app.get(url).text() val ysmm = Regex("""var ysmm =.*;?""").find(html)!!.value if (ysmm.isNotEmpty()) { var left = "" @@ -165,12 +165,12 @@ object ShortLink { } suspend fun unshortenNuovoLink(url: String): String { - return app.get(url, allowRedirects = true).document.selectFirst("a")!!.attr("href") + return app.get(url, allowRedirects = true).document().selectFirst("a")!!.attr("href") } suspend fun unshortenUprot(url: String): String { - val page = app.get(url).text + val page = app.get(url).text() Regex("""]+href="([^"]+)".*Continue""").findAll(page) .map { it.value.replace(""" @@ -186,7 +186,7 @@ object ShortLink { } suspend fun unshortenIsecure(url: String): String { - val doc = app.get(url).document + val doc = app.get(url).document() return doc.selectFirst("iframe")?.attr("src")?.trim() ?: url } }