mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
caaf23d261
4 changed files with 85 additions and 25 deletions
|
@ -36,7 +36,6 @@ object APIHolder {
|
||||||
AllAnimeProvider(),
|
AllAnimeProvider(),
|
||||||
AnimekisaProvider(),
|
AnimekisaProvider(),
|
||||||
//ShiroProvider(), // v2 fucked me
|
//ShiroProvider(), // v2 fucked me
|
||||||
//AnimePaheProvider(), //ddos guard
|
|
||||||
AnimeFlickProvider(),
|
AnimeFlickProvider(),
|
||||||
AnimeflvnetProvider(),
|
AnimeflvnetProvider(),
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.lagradost.cloudstream3.APIHolder.unixTimeMS
|
||||||
import com.lagradost.cloudstream3.LoadResponse.Companion.addActors
|
import com.lagradost.cloudstream3.LoadResponse.Companion.addActors
|
||||||
import com.lagradost.cloudstream3.LoadResponse.Companion.setDuration
|
import com.lagradost.cloudstream3.LoadResponse.Companion.setDuration
|
||||||
import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall
|
import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall
|
||||||
|
import com.lagradost.cloudstream3.network.AppResponse
|
||||||
import com.lagradost.cloudstream3.network.WebViewResolver
|
import com.lagradost.cloudstream3.network.WebViewResolver
|
||||||
import com.lagradost.cloudstream3.network.getRequestCreator
|
import com.lagradost.cloudstream3.network.getRequestCreator
|
||||||
import com.lagradost.cloudstream3.network.text
|
import com.lagradost.cloudstream3.network.text
|
||||||
|
@ -307,7 +308,7 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() {
|
||||||
|
|
||||||
// Some smarter ws11 or w10 selection might be required in the future.
|
// Some smarter ws11 or w10 selection might be required in the future.
|
||||||
val extractorData =
|
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 }
|
val sources = resolved.first?.let { app.baseClient.newCall(it).execute().text }
|
||||||
?: return@suspendSafeApiCall
|
?: return@suspendSafeApiCall
|
||||||
|
@ -365,17 +366,47 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() {
|
||||||
return code.reversed()
|
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<PollingData?>(jsonText)?.let { return it }
|
||||||
|
delay(1000L * i)
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
): Pair<PollingData, Boolean> {
|
||||||
|
if (!response.response.isSuccessful) {
|
||||||
|
return negotiateNewSid(baseUrl)?.let {
|
||||||
|
it to true
|
||||||
|
} ?: data to false
|
||||||
|
}
|
||||||
|
return data to false
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun extractorVerifierJob(extractorData: String?) {
|
override suspend fun extractorVerifierJob(extractorData: String?) {
|
||||||
if (extractorData == null) return
|
if (extractorData == null) return
|
||||||
|
|
||||||
val jsonText =
|
|
||||||
app.get("$extractorData&t=${generateTimeStamp()}").text.replaceBefore("{", "")
|
|
||||||
val data = parseJson<PollingData>(jsonText)
|
|
||||||
val headers = mapOf(
|
val headers = mapOf(
|
||||||
"User-Agent" to USER_AGENT,
|
|
||||||
"Referer" to "https://rabbitstream.net/"
|
"Referer" to "https://rabbitstream.net/"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var data = negotiateNewSid(extractorData) ?: return
|
||||||
// 40 is hardcoded, dunno how it's generated, but it seems to work everywhere.
|
// 40 is hardcoded, dunno how it's generated, but it seems to work everywhere.
|
||||||
// This request is obligatory
|
// This request is obligatory
|
||||||
app.post(
|
app.post(
|
||||||
|
@ -389,7 +420,7 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() {
|
||||||
"$extractorData&t=${generateTimeStamp()}&sid=${data.sid}",
|
"$extractorData&t=${generateTimeStamp()}&sid=${data.sid}",
|
||||||
headers = headers
|
headers = headers
|
||||||
)
|
)
|
||||||
//.also { println("First get ${it.text}") }
|
// .also { println("First get ${it.text}") }
|
||||||
.text.replaceBefore("{", "")
|
.text.replaceBefore("{", "")
|
||||||
).sid
|
).sid
|
||||||
// This response is used in the post requests. Same contents in all it seems.
|
// This response is used in the post requests. Same contents in all it seems.
|
||||||
|
@ -406,14 +437,26 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() {
|
||||||
// Prevents them from fucking us over with doing a while(true){} loop
|
// Prevents them from fucking us over with doing a while(true){} loop
|
||||||
val interval = maxOf(data.pingInterval?.toLong()?.plus(2000) ?: return, 10000L)
|
val interval = maxOf(data.pingInterval?.toLong()?.plus(2000) ?: return, 10000L)
|
||||||
var reconnect = false
|
var reconnect = false
|
||||||
// New SID can be negotiated as above, but not implemented yet as it seems rare.
|
var newAuth = false
|
||||||
while (true) {
|
while (true) {
|
||||||
val authData = if (reconnect) """
|
val authData =
|
||||||
42["_reconnect", "$reconnectSid"]
|
when {
|
||||||
""".trimIndent() else authInt
|
newAuth -> "40"
|
||||||
|
reconnect -> """42["_reconnect", "$reconnectSid"]"""
|
||||||
|
else -> authInt
|
||||||
|
}
|
||||||
|
|
||||||
val url = "${extractorData}&t=${generateTimeStamp()}&sid=${data.sid}"
|
val url = "${extractorData}&t=${generateTimeStamp()}&sid=${data.sid}"
|
||||||
app.post(url, data = authData, headers = headers)
|
|
||||||
|
getUpdatedData(
|
||||||
|
app.post(url, data = authData, headers = headers),
|
||||||
|
data,
|
||||||
|
extractorData
|
||||||
|
).also {
|
||||||
|
newAuth = it.second
|
||||||
|
data = it.first
|
||||||
|
}
|
||||||
|
|
||||||
//.also { println("Sflix post job ${it.text}") }
|
//.also { println("Sflix post job ${it.text}") }
|
||||||
Log.d(this.name, "Running Sflix job $url")
|
Log.d(this.name, "Running Sflix job $url")
|
||||||
|
|
||||||
|
@ -423,15 +466,16 @@ class SflixProvider(providerUrl: String, providerName: String) : MainAPI() {
|
||||||
"${extractorData}&t=${generateTimeStamp()}&sid=${data.sid}",
|
"${extractorData}&t=${generateTimeStamp()}&sid=${data.sid}",
|
||||||
timeout = 60,
|
timeout = 60,
|
||||||
headers = headers
|
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
|
reconnect = true
|
||||||
// println("Reconnecting")
|
// println("Reconnecting")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Always waits even if the get response is instant, to prevent a while true loop.
|
// Always waits even if the get response is instant, to prevent a while true loop.
|
||||||
if (time < interval - 4000)
|
if (time < interval - 4000)
|
||||||
delay(interval)
|
delay(4000)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -125,6 +125,8 @@ class WebViewResolver(val interceptUrl: Regex, val additionalUrls: List<Regex> =
|
||||||
".srt",
|
".srt",
|
||||||
".ts",
|
".ts",
|
||||||
".gif",
|
".gif",
|
||||||
|
// Warning, this might fuck some future sites, but it's used to make Sflix work.
|
||||||
|
"wss://"
|
||||||
)
|
)
|
||||||
|
|
||||||
/** NOTE! request.requestHeaders is not perfect!
|
/** NOTE! request.requestHeaders is not perfect!
|
||||||
|
|
|
@ -98,6 +98,8 @@
|
||||||
<string name="vpn_might_be_needed">Bạn có thể sẽ cần sử dụng VPN để xem phim này.</string>
|
<string name="vpn_might_be_needed">Bạn có thể sẽ cần sử dụng VPN để xem phim này.</string>
|
||||||
<string name="vpn_torrent">Phim này được chiếu dưới dạng Torrent. Hãy sử dụng VPN để xem nhé</string>
|
<string name="vpn_torrent">Phim này được chiếu dưới dạng Torrent. Hãy sử dụng VPN để xem nhé</string>
|
||||||
|
|
||||||
|
<string name="provider_info_meta">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.</string>
|
||||||
|
|
||||||
<string name="torrent_plot">Thông tin phim</string>
|
<string name="torrent_plot">Thông tin phim</string>
|
||||||
<string name="normal_no_plot">Đang cập nhật</string>
|
<string name="normal_no_plot">Đang cập nhật</string>
|
||||||
<string name="torrent_no_plot">Không tìm thấy thông tin</string>
|
<string name="torrent_no_plot">Không tìm thấy thông tin</string>
|
||||||
|
@ -108,13 +110,17 @@
|
||||||
<string name="player_size_settings_des">Điều này sẽ xóa khoảng đen của phim</string>
|
<string name="player_size_settings_des">Điều này sẽ xóa khoảng đen của phim</string>
|
||||||
<string name="player_subtitles_settings">Phụ đề</string>
|
<string name="player_subtitles_settings">Phụ đề</string>
|
||||||
<string name="player_subtitles_settings_des">Cài đặt phụ đề</string>
|
<string name="player_subtitles_settings_des">Cài đặt phụ đề</string>
|
||||||
|
<string name="chromecast_subtitles_settings">Phụ đề Chromecast</string>
|
||||||
|
<string name="chromecast_subtitles_settings_des">Cài đặt phụ đề Chromecast</string>
|
||||||
|
|
||||||
<string name="eigengraumode_settings">Điều chỉnh tốc độ khi xem phim</string>
|
<string name="eigengraumode_settings">Điều chỉnh tốc độ khi xem phim</string>
|
||||||
<string name="eigengraumode_settings_des">Có thể điều chỉnh tốc độ phát phim</string>
|
<string name="eigengraumode_settings_des">Có thể điều chỉnh tốc độ phát phim</string>
|
||||||
<string name="swipe_to_seek_settings">Vuốt để tua nhanh</string>
|
<string name="swipe_to_seek_settings">Vuốt để tua nhanh</string>
|
||||||
<string name="swipe_to_seek_settings_des">Bạn có thể vuốt trái hoặc phải để tua nhanh khi đang xem phim</string>
|
<string name="swipe_to_seek_settings_des">Bạn có thể vuốt trái hoặc phải để tua nhanh khi đang xem phim</string>
|
||||||
<string name="swipe_to_change_settings">Vuốt để điều chỉnh âm lượng và độ sáng</string>
|
<string name="swipe_to_change_settings">Vuốt để điều chỉnh âm lượng và độ sáng</string>
|
||||||
<string name="swipe_to_change_settings_des">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</string>
|
<string name="swipe_to_change_settings_des">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</string>
|
||||||
<string name="double_tap_to_seek_settings">Nhấn 2 lần đề tua</string>
|
<string name="double_tap_to_seek_settings">Nhấn 2 lần để tua</string>
|
||||||
|
<string name="double_tap_to_pause_settings">Chạm 2 lần để tạm dừng</string>
|
||||||
<string name="double_tap_to_seek_settings_des">Nhấn 2 lần vào bên trái hoặc màn hình để tua trước hoặc sau
|
<string name="double_tap_to_seek_settings_des">Nhấn 2 lần vào bên trái hoặc màn hình để tua trước hoặc sau
|
||||||
</string>
|
</string>
|
||||||
<string name="double_tap_to_pause_settings_des">Nhấn vào giữa để tạm dừng</string>
|
<string name="double_tap_to_pause_settings_des">Nhấn vào giữa để tạm dừng</string>
|
||||||
|
@ -154,14 +160,16 @@
|
||||||
<string name="no_season">Không có mùa nào</string>
|
<string name="no_season">Không có mùa nào</string>
|
||||||
<string name="episode">Tập</string>
|
<string name="episode">Tập</string>
|
||||||
<string name="episodes">Tập</string>
|
<string name="episodes">Tập</string>
|
||||||
<string name="season_short">S</string>
|
<string name="season_short">M</string>
|
||||||
<string name="episode_short">E</string>
|
<string name="episode_short">T</string>
|
||||||
|
<string name="no_episodes_found">Không thấy tập</string>
|
||||||
|
|
||||||
<string name="delete_file">Xóa Tệp</string>
|
<string name="delete_file">Xóa Tệp</string>
|
||||||
<string name="delete">Xóa</string>
|
<string name="delete">Xóa</string>
|
||||||
<string name="pause">Tạm Dừng</string>
|
<string name="pause">Tạm Dừng</string>
|
||||||
<string name="resume">Tiếp Tục</string>
|
<string name="resume">Tiếp Tục</string>
|
||||||
<string name="delete_message">Điều này sẽ xóa %s\nBạn có chắc chắn muốn xóa?</string>
|
<string name="delete_message">Điều này sẽ xóa %s\nBạn có chắc chắn muốn xóa?</string>
|
||||||
|
<string name="resume_time_left" formatted="true">%dm\ncòn lại</string>
|
||||||
|
|
||||||
<string name="status_ongoing">Đang Chiếu</string>
|
<string name="status_ongoing">Đang Chiếu</string>
|
||||||
<string name="status_completed">Hoàn Thành</string>
|
<string name="status_completed">Hoàn Thành</string>
|
||||||
|
@ -187,6 +195,7 @@
|
||||||
<string name="cartoons">Hoạt Hình</string>
|
<string name="cartoons">Hoạt Hình</string>
|
||||||
<string name="anime">Anime</string>
|
<string name="anime">Anime</string>
|
||||||
<string name="torrent">Torrent</string>
|
<string name="torrent">Torrent</string>
|
||||||
|
<string name="documentaries">Phim Tài Liệu</string>
|
||||||
|
|
||||||
<!--singular-->
|
<!--singular-->
|
||||||
<string name="movies_singular">Phim Lẻ</string>
|
<string name="movies_singular">Phim Lẻ</string>
|
||||||
|
@ -215,7 +224,7 @@
|
||||||
<string name="no_update_found">Bạn đang dùng phiên bản mới nhất</string>
|
<string name="no_update_found">Bạn đang dùng phiên bản mới nhất</string>
|
||||||
<string name="check_for_update">Kiểm tra cập nhật phiển bản mới</string>
|
<string name="check_for_update">Kiểm tra cập nhật phiển bản mới</string>
|
||||||
|
|
||||||
<string name="video_lock">Khóa Màn Hình</string>
|
<string name="video_lock">Khóa</string>
|
||||||
<string name="video_aspect_ratio_resize">Thu Phóng</string>
|
<string name="video_aspect_ratio_resize">Thu Phóng</string>
|
||||||
<string name="video_source">Phụ Đề</string>
|
<string name="video_source">Phụ Đề</string>
|
||||||
<string name="video_skip_op">Tua Nhanh</string>
|
<string name="video_skip_op">Tua Nhanh</string>
|
||||||
|
@ -223,6 +232,8 @@
|
||||||
<string name="dont_show_again">Không hiển thị lại</string>
|
<string name="dont_show_again">Không hiển thị lại</string>
|
||||||
<string name="update">Cập nhật</string>
|
<string name="update">Cập nhật</string>
|
||||||
<string name="watch_quality_pref">Tự động chọn chất lượng phim</string>
|
<string name="watch_quality_pref">Tự động chọn chất lượng phim</string>
|
||||||
|
<string name="video_cache_settings">Kích thước video cache</string>
|
||||||
|
<string name="dns_pref_summary">Rất hữu ích để bỏ chặn ISP</string>
|
||||||
|
|
||||||
<string name="download_path_pref">Đường dẫn tải xuống</string>
|
<string name="download_path_pref">Đường dẫn tải xuống</string>
|
||||||
|
|
||||||
|
@ -242,7 +253,7 @@
|
||||||
<string name="phone_layout">Giao diện điện thoại</string>
|
<string name="phone_layout">Giao diện điện thoại</string>
|
||||||
|
|
||||||
<string name="primary_color_settings">Màu chính</string>
|
<string name="primary_color_settings">Màu chính</string>
|
||||||
<string name="app_theme_settings">Chủ đề ứng dụng</string>
|
<string name="app_theme_settings">Chủ đề App</string>
|
||||||
|
|
||||||
<!-- account stuff -->
|
<!-- account stuff -->
|
||||||
<string name="account">tài khoản</string>
|
<string name="account">tài khoản</string>
|
||||||
|
@ -275,5 +286,9 @@
|
||||||
<string name="player_loaded_subtitles" formatted="true">Đã tải %s</string>
|
<string name="player_loaded_subtitles" formatted="true">Đã tải %s</string>
|
||||||
<string name="player_load_subtitles">Chọn tệp</string>
|
<string name="player_load_subtitles">Chọn tệp</string>
|
||||||
<string name="downloaded_file">Tệp đã tải</string>
|
<string name="downloaded_file">Tệp đã tải</string>
|
||||||
|
<string name="actor_main">Chính</string>
|
||||||
|
<string name="actor_supporting">Hỗ trợ</string>
|
||||||
|
<string name="actor_background">Lý lịch</string>
|
||||||
|
|
||||||
|
<string name="home_source">Nguồn</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue