From 2204564de90ea2d09f1f8314705607d4ff48763f Mon Sep 17 00:00:00 2001 From: tuan041 <30403510+tuan041@users.noreply.github.com> Date: Mon, 14 Feb 2022 06:50:59 +0700 Subject: [PATCH 1/3] Updated Vietnamese translation (#649) --- app/src/main/res/values-vi/strings.xml | 33 +++++++++++++++++++------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 41809a6f..299d6a4a 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -79,7 +79,7 @@ Kiểu viền Độ nâng Kiểu chữ - Kích thước chữ + Kích thước chữ Tìm kiếm theo nhà cung cấp Tìm kiếm theo thể loại @@ -97,7 +97,9 @@ Bạn có thể sẽ cần sử dụng VPN để xem phim này. Phim này được chiếu dưới dạng Torrent. Hãy sử dụng VPN để xem nhé - + + Siêu dữ liệu không được cung cấp bởi trang web, quá trình tải video sẽ không thành công nếu nó không tồn tại trên trang web. + Thông tin phim Đang cập nhật Không tìm thấy thông tin @@ -108,16 +110,20 @@ Điều này sẽ xóa khoảng đen của phim Phụ đề Cài đặt phụ đề + Phụ đề Chromecast + Cài đặt phụ đề Chromecast + Điều chỉnh tốc độ khi xem phim Có thể điều chỉnh tốc độ phát phim Vuốt để tua nhanh Bạn có thể vuốt trái hoặc phải để tua nhanh khi đang xem phim Vuốt để điều chỉnh âm lượng và độ sáng Vuốt từ dưới lên trên ở bên trái hoặc phải đều điều chỉnh độ sáng và âm lượng - Nhấn 2 lần đề tua + Nhấn 2 lần để tua + Chạm 2 lần để tạm dừng Nhấn 2 lần vào bên trái hoặc màn hình để tua trước hoặc sau - Nhấn vào giữa để tạm dừng + Nhấn vào giữa để tạm dừng Sử dụng độ sáng hệ thống Sử dụng độ sáng hệ thống trong trình phát ứng dụng @@ -154,14 +160,16 @@ Không có mùa nào Tập Tập - S - E + M + T + Không thấy tập Xóa Tệp Xóa Tạm Dừng Tiếp Tục Điều này sẽ xóa %s\nBạn có chắc chắn muốn xóa? + %dm\ncòn lại Đang Chiếu Hoàn Thành @@ -187,6 +195,7 @@ Hoạt Hình Anime Torrent + Phim Tài Liệu Phim Lẻ @@ -215,7 +224,7 @@ Bạn đang dùng phiên bản mới nhất Kiểm tra cập nhật phiển bản mới - Khóa Màn Hình + Khóa Thu Phóng Phụ Đề Tua Nhanh @@ -223,6 +232,8 @@ Không hiển thị lại Cập nhật Tự động chọn chất lượng phim + Kích thước video cache + Rất hữu ích để bỏ chặn ISP Đường dẫn tải xuống @@ -232,7 +243,7 @@ Kéo dãn Phóng to - Tổng quan + Tổng quan Ngôn ngữ nhà cung cấp Giao diện App Thể loại ưu tiên @@ -242,7 +253,7 @@ Giao diện điện thoại Màu chính - Chủ đề ứng dụng + Chủ đề App tài khoản @@ -275,5 +286,9 @@ Đã tải %s Chọn tệp Tệp đã tải + Chính + Hỗ trợ + Lý lịch + Nguồn From 5ba3b1f6854dfc5da722ab3aa16cb8ff08e67d52 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Mon, 14 Feb 2022 13:50:05 +0100 Subject: [PATCH 2/3] improved the Sflix bypass --- .../movieproviders/SflixProvider.kt | 45 ++++++++++++++----- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt index 9b0cb2a0..c22c4bbb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt @@ -7,6 +7,7 @@ import com.lagradost.cloudstream3.APIHolder.unixTimeMS import com.lagradost.cloudstream3.LoadResponse.Companion.addActors import com.lagradost.cloudstream3.LoadResponse.Companion.setDuration import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall +import com.lagradost.cloudstream3.network.AppResponse import com.lagradost.cloudstream3.network.WebViewResolver import com.lagradost.cloudstream3.network.getRequestCreator import com.lagradost.cloudstream3.network.text @@ -365,17 +366,41 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() { return code.reversed() } + + /** + * Generates a session + * */ + private suspend fun negotiateNewSid(baseUrl: String): PollingData? { + // Tries multiple times + for (i in 1..5) { + val jsonText = + app.get("$baseUrl&t=${generateTimeStamp()}").text.replaceBefore("{", "") +// println("Negotiated sid $jsonText") + parseJson(jsonText)?.let { return it } + delay(1000L * i) + } + return null + } + + /** + * Generates a new session if the request fails + * */ + private suspend fun getUpdatedData(response: AppResponse, data: PollingData, baseUrl: String) : PollingData { + if (!response.response.isSuccessful){ + return negotiateNewSid(baseUrl) ?: data + } + return data + } + override suspend fun extractorVerifierJob(extractorData: String?) { if (extractorData == null) return - val jsonText = - app.get("$extractorData&t=${generateTimeStamp()}").text.replaceBefore("{", "") - val data = parseJson(jsonText) val headers = mapOf( "User-Agent" to USER_AGENT, "Referer" to "https://rabbitstream.net/" ) + var data = negotiateNewSid(extractorData) ?: return // 40 is hardcoded, dunno how it's generated, but it seems to work everywhere. // This request is obligatory app.post( @@ -389,7 +414,7 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() { "$extractorData&t=${generateTimeStamp()}&sid=${data.sid}", headers = headers ) - //.also { println("First get ${it.text}") } +// .also { println("First get ${it.text}") } .text.replaceBefore("{", "") ).sid // This response is used in the post requests. Same contents in all it seems. @@ -406,14 +431,13 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() { // Prevents them from fucking us over with doing a while(true){} loop val interval = maxOf(data.pingInterval?.toLong()?.plus(2000) ?: return, 10000L) var reconnect = false - // New SID can be negotiated as above, but not implemented yet as it seems rare. while (true) { val authData = if (reconnect) """ 42["_reconnect", "$reconnectSid"] """.trimIndent() else authInt val url = "${extractorData}&t=${generateTimeStamp()}&sid=${data.sid}" - app.post(url, data = authData, headers = headers) + data = getUpdatedData(app.post(url, data = authData, headers = headers), data, extractorData) //.also { println("Sflix post job ${it.text}") } Log.d(this.name, "Running Sflix job $url") @@ -423,15 +447,16 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() { "${extractorData}&t=${generateTimeStamp()}&sid=${data.sid}", timeout = 60, headers = headers - ).text //.also { println("Sflix get job $it") } - if (getResponse.contains("sid")) { + ) +// .also { println("Sflix get job ${it.text}") } + if (getResponse.text.contains("sid")) { reconnect = true -// println("Reconnecting") +// println("Reconnecting") } } // Always waits even if the get response is instant, to prevent a while true loop. if (time < interval - 4000) - delay(interval) + delay(4000) } } From 08c3350666f1ff5a54fd0df97a2edd22ff2086b3 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Mon, 14 Feb 2022 14:37:17 +0100 Subject: [PATCH 3/3] moar fixes --- .../com/lagradost/cloudstream3/MainAPI.kt | 1 - .../movieproviders/SflixProvider.kt | 39 ++++++++++++++----- .../cloudstream3/network/WebViewResolver.kt | 2 + 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index f60cbba6..c19a1292 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -36,7 +36,6 @@ object APIHolder { AllAnimeProvider(), AnimekisaProvider(), //ShiroProvider(), // v2 fucked me - //AnimePaheProvider(), //ddos guard AnimeFlickProvider(), AnimeflvnetProvider(), diff --git a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt index c22c4bbb..6b9c6592 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/movieproviders/SflixProvider.kt @@ -308,7 +308,7 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() { // Some smarter ws11 or w10 selection might be required in the future. val extractorData = - "https://ws10.rabbitstream.net/socket.io/?EIO=4&transport=polling" + "https://ws11.rabbitstream.net/socket.io/?EIO=4&transport=polling" val sources = resolved.first?.let { app.baseClient.newCall(it).execute().text } ?: return@suspendSafeApiCall @@ -384,19 +384,25 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() { /** * Generates a new session if the request fails + * @return the data and if it is new. * */ - private suspend fun getUpdatedData(response: AppResponse, data: PollingData, baseUrl: String) : PollingData { - if (!response.response.isSuccessful){ - return negotiateNewSid(baseUrl) ?: data + private suspend fun getUpdatedData( + response: AppResponse, + data: PollingData, + baseUrl: String + ): Pair { + if (!response.response.isSuccessful) { + return negotiateNewSid(baseUrl)?.let { + it to true + } ?: data to false } - return data + return data to false } override suspend fun extractorVerifierJob(extractorData: String?) { if (extractorData == null) return val headers = mapOf( - "User-Agent" to USER_AGENT, "Referer" to "https://rabbitstream.net/" ) @@ -431,13 +437,26 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() { // Prevents them from fucking us over with doing a while(true){} loop val interval = maxOf(data.pingInterval?.toLong()?.plus(2000) ?: return, 10000L) var reconnect = false + var newAuth = false while (true) { - val authData = if (reconnect) """ - 42["_reconnect", "$reconnectSid"] - """.trimIndent() else authInt + val authData = + when { + newAuth -> "40" + reconnect -> """42["_reconnect", "$reconnectSid"]""" + else -> authInt + } val url = "${extractorData}&t=${generateTimeStamp()}&sid=${data.sid}" - data = getUpdatedData(app.post(url, data = authData, headers = headers), data, extractorData) + + getUpdatedData( + app.post(url, data = authData, headers = headers), + data, + extractorData + ).also { + newAuth = it.second + data = it.first + } + //.also { println("Sflix post job ${it.text}") } Log.d(this.name, "Running Sflix job $url") diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt b/app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt index 9aa44a08..095bb3f2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt @@ -125,6 +125,8 @@ class WebViewResolver(val interceptUrl: Regex, val additionalUrls: List = ".srt", ".ts", ".gif", + // Warning, this might fuck some future sites, but it's used to make Sflix work. + "wss://" ) /** NOTE! request.requestHeaders is not perfect!