forked from recloudstream/cloudstream
		
	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! | ||||||
|  |  | ||||||
|  | @ -79,7 +79,7 @@ | ||||||
|     <string name="subs_edge_type">Kiểu viền</string> |     <string name="subs_edge_type">Kiểu viền</string> | ||||||
|     <string name="subs_subtitle_elevation">Độ nâng</string> |     <string name="subs_subtitle_elevation">Độ nâng</string> | ||||||
|     <string name="subs_font">Kiểu chữ</string> |     <string name="subs_font">Kiểu chữ</string> | ||||||
| 	<string name="subs_font_size">Kích thước chữ</string> |     <string name="subs_font_size">Kích thước chữ</string> | ||||||
| 
 | 
 | ||||||
|     <string name="search_provider_text_providers">Tìm kiếm theo nhà cung cấp</string> |     <string name="search_provider_text_providers">Tìm kiếm theo nhà cung cấp</string> | ||||||
|     <string name="search_provider_text_types">Tìm kiếm theo thể loại</string> |     <string name="search_provider_text_types">Tìm kiếm theo thể loại</string> | ||||||
|  | @ -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,16 +110,20 @@ | ||||||
|     <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> | ||||||
|     <string name="use_system_brightness_settings">Sử dụng độ sáng hệ thống</string> |     <string name="use_system_brightness_settings">Sử dụng độ sáng hệ thống</string> | ||||||
|     <string name="use_system_brightness_settings_des">Sử dụng độ sáng hệ thống trong trình phát ứng dụng |     <string name="use_system_brightness_settings_des">Sử dụng độ sáng hệ thống trong trình phát ứng dụng | ||||||
|     </string> |     </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> | ||||||
| 	 | 	 | ||||||
|  | @ -232,7 +243,7 @@ | ||||||
|     <string name="resize_fill">Kéo dãn</string> |     <string name="resize_fill">Kéo dãn</string> | ||||||
|     <string name="resize_zoom">Phóng to</string> |     <string name="resize_zoom">Phóng to</string> | ||||||
| 	 | 	 | ||||||
| 	<string name="general">Tổng quan</string> |     <string name="general">Tổng quan</string> | ||||||
|     <string name="provider_lang_settings">Ngôn ngữ nhà cung cấp</string> |     <string name="provider_lang_settings">Ngôn ngữ nhà cung cấp</string> | ||||||
|     <string name="app_layout">Giao diện App</string> |     <string name="app_layout">Giao diện App</string> | ||||||
|     <string name="preferred_media_settings">Thể loại ưu tiên</string> |     <string name="preferred_media_settings">Thể loại ưu tiên</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…
	
	Add table
		Add a link
		
	
		Reference in a new issue