forked from recloudstream/cloudstream
		
	fixed android TV auto, no download support & VLC on A11+
This commit is contained in:
		
							parent
							
								
									cf2de2d331
								
							
						
					
					
						commit
						eea424c1e8
					
				
					 7 changed files with 146 additions and 81 deletions
				
			
		|  | @ -1,20 +1,25 @@ | ||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|           xmlns:tools="http://schemas.android.com/tools" package="com.lagradost.cloudstream3"> |         xmlns:tools="http://schemas.android.com/tools" | ||||||
|  |         package="com.lagradost.cloudstream3"> | ||||||
| 
 | 
 | ||||||
|     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> |     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- I dont remember, probs has to do with downloads --> | ||||||
|     <uses-permission android:name="android.permission.INTERNET"/> |     <uses-permission android:name="android.permission.INTERNET" /> | ||||||
|     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> |     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- Downloads --> | ||||||
|     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> |     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- Downloads on low api devices--> | ||||||
|     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> |     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- some dependency needs this --> | ||||||
|     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> |     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <!-- Used for player vertical slide--> | ||||||
|     <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> |     <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <!--Used for app update--> | ||||||
|     <uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" /> |     <!--<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" /> not used atm, but code exist that requires it that are not run--> | ||||||
|  |     <permission android:name="android.permission.QUERY_ALL_PACKAGES" /> <!-- Used for getting if vlc is installed --> | ||||||
| 
 | 
 | ||||||
|     <uses-feature android:name="android.hardware.touchscreen" |     <!-- Fixes android tv fuckery --> | ||||||
|                   android:required="false"/> |     <uses-feature | ||||||
|     <uses-feature android:name="android.software.leanback" |             android:name="android.hardware.touchscreen" | ||||||
|                   android:required="false"/> |             android:required="false" /> | ||||||
|  |     <uses-feature | ||||||
|  |             android:name="android.software.leanback" | ||||||
|  |             android:required="false" /> | ||||||
| 
 | 
 | ||||||
|     <!--TODO https://stackoverflow.com/questions/41799732/chromecast-button-not-visible-in-android--> |     <!--TODO https://stackoverflow.com/questions/41799732/chromecast-button-not-visible-in-android--> | ||||||
|     <application |     <application | ||||||
|  | @ -32,19 +37,21 @@ | ||||||
|             tools:targetApi="o"> |             tools:targetApi="o"> | ||||||
|         <meta-data |         <meta-data | ||||||
|                 android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" |                 android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" | ||||||
|                 android:value="com.lagradost.cloudstream3.utils.CastOptionsProvider"/> |                 android:value="com.lagradost.cloudstream3.utils.CastOptionsProvider" /> | ||||||
| 
 | 
 | ||||||
|         <activity android:name=".ui.player.DownloadedPlayerActivity" |         <activity | ||||||
|  |                 android:name=".ui.player.DownloadedPlayerActivity" | ||||||
|                 android:screenOrientation="userLandscape" |                 android:screenOrientation="userLandscape" | ||||||
|                 android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|keyboard|keyboardHidden|navigation" |                 android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|keyboard|keyboardHidden|navigation" | ||||||
|                 android:resizeableActivity="true" |                 android:resizeableActivity="true" | ||||||
|                 android:supportsPictureInPicture="true" |                 android:supportsPictureInPicture="true" | ||||||
|                 android:exported="true"> |                 android:exported="true"> | ||||||
|             <intent-filter> |             <intent-filter> | ||||||
|                 <action android:name="android.intent.action.VIEW"/> |                 <action android:name="android.intent.action.VIEW" /> | ||||||
|                 <category android:name="android.intent.category.DEFAULT"/> |                 <category android:name="android.intent.category.DEFAULT" /> | ||||||
|                 <data android:scheme="content"/> | 
 | ||||||
|                 <data android:mimeType="video/*"/> |                 <data android:scheme="content" /> | ||||||
|  |                 <data android:mimeType="video/*" /> | ||||||
|             </intent-filter> |             </intent-filter> | ||||||
|         </activity> |         </activity> | ||||||
| 
 | 
 | ||||||
|  | @ -55,22 +62,62 @@ | ||||||
|                 android:label="@string/app_name" |                 android:label="@string/app_name" | ||||||
|                 android:resizeableActivity="true" |                 android:resizeableActivity="true" | ||||||
|                 android:supportsPictureInPicture="true"> |                 android:supportsPictureInPicture="true"> | ||||||
|             <intent-filter |             <intent-filter android:exported="true"> | ||||||
|                     android:exported="true"> |                 <action android:name="android.intent.action.MAIN" /> | ||||||
|                 <action android:name="android.intent.action.MAIN"/> | 
 | ||||||
|                 <category android:name="android.intent.category.LAUNCHER"/> |                 <category android:name="android.intent.category.LAUNCHER" /> | ||||||
|                 <category android:name="android.intent.category.LEANBACK_LAUNCHER"/> |                 <category android:name="android.intent.category.LEANBACK_LAUNCHER" /> | ||||||
|             </intent-filter> |             </intent-filter> | ||||||
|             <intent-filter |             <intent-filter android:exported="true"> | ||||||
|                     android:exported="true"> |                 <action android:name="android.intent.action.VIEW" /> | ||||||
|                 <action android:name="android.intent.action.VIEW"/> |  | ||||||
| 
 |  | ||||||
|                 <category android:name="android.intent.category.BROWSABLE"/> |  | ||||||
|                 <category android:name="android.intent.category.DEFAULT"/> |  | ||||||
| 
 | 
 | ||||||
|  |                 <category android:name="android.intent.category.BROWSABLE" /> | ||||||
|  |                 <category android:name="android.intent.category.DEFAULT" /> | ||||||
|                 <data android:scheme="https" android:host="pelisplus.icu" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="pelisplus.icu" android:pathPrefix="/"/> | ||||||
|                 <data android:scheme="https" android:host="pelisplushd.net" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="pelisplushd.net" android:pathPrefix="/"/> | ||||||
|                 <data android:scheme="https" android:host="pelismart.com" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="pelismart.com" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="melomovie.com" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="doramasyt.com" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="cinecalidad.lol" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="cuevana3.me" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="entrepeliculasyseries.nu" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="pelisflix.li" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="seriesflix.video" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="ihavenotv.com" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="lookmovie.io" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="www.vmovee.watch" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="allmoviesforyou.net" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="vidembed.cc" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="vf-film.me" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="vf-serie.org" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="french-stream.re" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="asianembed.io" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="asiaflix.app" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="bflix.ru" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="fmovies.to" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="sflix.pro" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="filman.cc" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="sflix.to" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="dopebox.to" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="solarmovie.pe" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="pinoymoviepedia.ru" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="www.pinoy-hd.xyz" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="pinoymovies.es" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="trailers.to" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="www.2embed.ru" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="dramasee.net" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="watchasian.sh" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="kdramahood.com" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="akwam.to" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="mycima.tv" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="www.egy.best" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="secretlink.xyz" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="hdm.to" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="theflix.to" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="streamingcommunity.top" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="www.tantifilm.rodeo" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="v2.apimdb.net" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="www.wcostream.com" android:pathPrefix="/"/> | ||||||
|                 <data android:scheme="https" android:host="gogoanime.film" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="gogoanime.film" android:pathPrefix="/"/> | ||||||
|                 <data android:scheme="https" android:host="allanime.site" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="allanime.site" android:pathPrefix="/"/> | ||||||
|                 <data android:scheme="https" android:host="animekisa.in" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="animekisa.in" android:pathPrefix="/"/> | ||||||
|  | @ -78,45 +125,22 @@ | ||||||
|                 <data android:scheme="https" android:host="www3.animeflv.net" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="www3.animeflv.net" android:pathPrefix="/"/> | ||||||
|                 <data android:scheme="https" android:host="tenshi.moe" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="tenshi.moe" android:pathPrefix="/"/> | ||||||
|                 <data android:scheme="https" android:host="wcostream.cc" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="wcostream.cc" android:pathPrefix="/"/> | ||||||
|                 <data android:scheme="https" android:host="bestdubbedanime.com" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="doramasyt.com" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="cinecalidad.lol" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="cuevana3.io" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="entrepeliculasyseries.nu" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="pelisflix.li" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="seriesflix.video" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="ihavenotv.com" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="www.vmovee.watch" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="www.wcostream.com" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="allmoviesforyou.net" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="monoschinos2.com" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="vidembed.cc" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="vf-film.me" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="vf-serie.org" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="french-stream.re" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="asianembed.io" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="bflix.ru" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="fmovies.to" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="sflix.pro" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="filman.cc" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="zoro.to" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="pinoymoviepedia.ru" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="www.pinoy-hd.xyz" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="pinoymovies.es" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="trailers.to" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="dramasee.net" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="watchasian.sh" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="kdramahood.com" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="akwam.io" android:pathPrefix="/"/> |  | ||||||
|                 <data android:scheme="https" android:host="animepahe.com" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="animepahe.com" android:pathPrefix="/"/> | ||||||
|                 <data android:scheme="https" android:host="9anime.center" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="dreamsub.me" android:pathPrefix="/"/> | ||||||
|                 <data android:scheme="https" android:host="asiaflix.app" android:pathPrefix="/"/> |                 <data android:scheme="https" android:host="9anime.id" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="www.animeworld.tv" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="zoro.to" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="bestdubbedanime.com" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="monoschinos2.com" android:pathPrefix="/"/> | ||||||
|  |                 <data android:scheme="https" android:host="kawaiifu.com" android:pathPrefix="/"/> | ||||||
|             </intent-filter> |             </intent-filter> | ||||||
|             <intent-filter> |             <intent-filter> | ||||||
|                 <action android:name="android.intent.action.VIEW"/> |                 <action android:name="android.intent.action.VIEW" /> | ||||||
|                 <category android:name="android.intent.category.DEFAULT"/> | 
 | ||||||
|                 <category android:name="android.intent.category.BROWSABLE"/> |                 <category android:name="android.intent.category.DEFAULT" /> | ||||||
|                 <data android:scheme="cloudstreamapp"/> |                 <category android:name="android.intent.category.BROWSABLE" /> | ||||||
|  | 
 | ||||||
|  |                 <data android:scheme="cloudstreamapp" /> | ||||||
|             </intent-filter> |             </intent-filter> | ||||||
|         </activity> |         </activity> | ||||||
| 
 | 
 | ||||||
|  | @ -125,19 +149,17 @@ | ||||||
|                 android:enabled="false" |                 android:enabled="false" | ||||||
|                 android:exported="true"> |                 android:exported="true"> | ||||||
|             <intent-filter android:exported="true"> |             <intent-filter android:exported="true"> | ||||||
|                 <action android:name="restart_service"/> |                 <action android:name="restart_service" /> | ||||||
|             </intent-filter> |             </intent-filter> | ||||||
|         </receiver> |         </receiver> | ||||||
|         <service |         <service | ||||||
|                 android:name=".services.VideoDownloadService" |                 android:name=".services.VideoDownloadService" | ||||||
|                 android:enabled="true" |                 android:enabled="true" | ||||||
|                 android:exported="false"> |                 android:exported="false"></service> | ||||||
|         </service> |  | ||||||
| 
 | 
 | ||||||
|         <activity |         <activity | ||||||
|                 android:exported="false" |                 android:exported="false" | ||||||
|                 android:name=".ui.ControllerActivity"> |                 android:name=".ui.ControllerActivity"></activity> | ||||||
|         </activity> |  | ||||||
| 
 | 
 | ||||||
|         <provider |         <provider | ||||||
|                 android:name="androidx.core.content.FileProvider" |                 android:name="androidx.core.content.FileProvider" | ||||||
|  | @ -147,7 +169,7 @@ | ||||||
|                 android:grantUriPermissions="true"> |                 android:grantUriPermissions="true"> | ||||||
|             <meta-data |             <meta-data | ||||||
|                     android:name="android.support.FILE_PROVIDER_PATHS" |                     android:name="android.support.FILE_PROVIDER_PATHS" | ||||||
|                     android:resource="@xml/provider_paths"/> |                     android:resource="@xml/provider_paths" /> | ||||||
|         </provider> |         </provider> | ||||||
|     </application> |     </application> | ||||||
| </manifest> | </manifest> | ||||||
|  | @ -160,12 +160,55 @@ class EgyBestProvider : MainAPI() { | ||||||
|         @JsonProperty("quality") val quality: Int?, |         @JsonProperty("quality") val quality: Int?, | ||||||
|         @JsonProperty("link") val link: String |         @JsonProperty("link") val link: String | ||||||
|     ) |     ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|     override suspend fun loadLinks( |     override suspend fun loadLinks( | ||||||
|         data: String, |         data: String, | ||||||
|         isCasting: Boolean, |         isCasting: Boolean, | ||||||
|         subtitleCallback: (SubtitleFile) -> Unit, |         subtitleCallback: (SubtitleFile) -> Unit, | ||||||
|         callback: (ExtractorLink) -> Unit |         callback: (ExtractorLink) -> Unit | ||||||
|     ): Boolean { |     ): Boolean { | ||||||
|  |         /*val baseURL = data.split("/")[0] + "//" + data.split("/")[2] | ||||||
|  |         val episodeSoup = app.get(data).document | ||||||
|  | 
 | ||||||
|  |         val vidstreamURL = fixUrlNull(episodeSoup.selectFirst("iframe.auto-size")?.attr("src") ) ?: throw ErrorLoadingException("No iframe") | ||||||
|  |         val videoSoup = app.get(vidstreamURL).document | ||||||
|  |         fixUrlNull( videoSoup.select("source").firstOrNull { it.hasAttr("src") }?.attr("src"))?.let { | ||||||
|  |             callback.invoke(ExtractorLink(this.name,this.name,it,"",Qualities.Unknown.value,it.contains(".m3u8"))) | ||||||
|  |         } ?: run { | ||||||
|  |             var jsCode = videoSoup.select("script")[1].data() | ||||||
|  | 
 | ||||||
|  |             val verificationToken = Regex("{'[0-9a-zA-Z_]*':'ok'}").findAll(jsCode)[0][2:-7] | ||||||
|  |             val encodedAdLinkVar = Regex("([0-9a-zA-Z_]{2,12}\[Math").findAll(jsCode)[0][1:-5] | ||||||
|  |             val encodingArraysRegEx = Regex(",[0-9a-zA-Z_]{2,12}=\[\]").findAll(jsCode) | ||||||
|  |             val firstEncodingArray = encodingArraysRegEx[1][1:-3] | ||||||
|  |             val secondEncodingArray = encodingArraysRegEx[2][1:-3] | ||||||
|  | 
 | ||||||
|  |             jsCode = Regex("^<script type=\"text/javascript\">", "", jsCode) | ||||||
|  |             jsCode = Regex("[;,]\$\('\*'\)(.*)$", ";", jsCode) | ||||||
|  |             jsCode = Regex(",ismob=(.*)\(navigator\[(.*)\]\)[,;]", ";", jsCode) | ||||||
|  |             jsCode = Regex("var a0b=function\(\)(.*)a0a\(\);",).findAll( jsCode) | ||||||
|  |             jsCode += "var link = ''; for (var i = 0; i <= $secondEncodingArray['length']; i++) { link += $firstEncodingArray[$secondEncodingArray[i]] || ''; } return [link, $encodedAdLinkVar[0]] }" | ||||||
|  | 
 | ||||||
|  |             val jsCodeReturn = executeJS(jsCode)() | ||||||
|  |             val verificationPath = jsCodeReturn[0] | ||||||
|  |             val encodedAdPath = jsCodeReturn[1] | ||||||
|  | 
 | ||||||
|  |             val adLink = baseURL + "/" + str(decode(encodedAdPath + "=" * (-len(encodedAdPath) % 4)), "utf-8") | ||||||
|  |             val session.get(adLink) | ||||||
|  | 
 | ||||||
|  |             val verificationLink = baseURL + "/tvc.php?verify=" + verificationPath | ||||||
|  |             val session.post(verificationLink, data={verificationToken: "ok"}) | ||||||
|  | 
 | ||||||
|  |             val vidstreamResponseText = session.get(vidstreamURL).text | ||||||
|  |             val videoSoup = BeautifulSoup(vidstreamResponseText, features="html.parser") | ||||||
|  | 
 | ||||||
|  |             val qualityLinksFileURL = baseURL + videoSoup.body.find("source").get("src") | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         return true*/ | ||||||
|  | 
 | ||||||
|         val requestJSON = app.get("https://api.zr5.repl.co/egybest?url=$data").text |         val requestJSON = app.get("https://api.zr5.repl.co/egybest?url=$data").text | ||||||
|         val jsonArray = parseJson<List<Sources>>(requestJSON) |         val jsonArray = parseJson<List<Sources>>(requestJSON) | ||||||
|         for (i in jsonArray) { |         for (i in jsonArray) { | ||||||
|  |  | ||||||
|  | @ -208,8 +208,8 @@ class EpisodeAdapter( | ||||||
|                 return@setOnLongClickListener true |                 return@setOnLongClickListener true | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             episodeDownloadImage.visibility = if (hasDownloadSupport) View.VISIBLE else View.GONE |             episodeDownloadImage.isVisible = hasDownloadSupport | ||||||
|             episodeDownloadBar.visibility = if (hasDownloadSupport) View.VISIBLE else View.GONE |             episodeDownloadBar.isVisible = hasDownloadSupport | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         override fun reattachDownloadButton() { |         override fun reattachDownloadButton() { | ||||||
|  |  | ||||||
|  | @ -1845,8 +1845,7 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio | ||||||
| //                                handleAction(EpisodeClickEvent(ACTION_SHOW_OPTIONS, card)) | //                                handleAction(EpisodeClickEvent(ACTION_SHOW_OPTIONS, card)) | ||||||
| //                            } | //                            } | ||||||
| 
 | 
 | ||||||
|                         result_download_movie?.visibility = |                         result_movie_progress_downloaded_holder?.isVisible = hasDownloadSupport | ||||||
|                             if (hasDownloadSupport) VISIBLE else GONE |  | ||||||
|                         if (hasDownloadSupport) { |                         if (hasDownloadSupport) { | ||||||
|                             val localId = d.getId() |                             val localId = d.getId() | ||||||
|                             val file = |                             val file = | ||||||
|  |  | ||||||
|  | @ -97,7 +97,8 @@ class SettingsFragment : PreferenceFragmentCompat() { | ||||||
| 
 | 
 | ||||||
|         private fun Context.isAutoTv(): Boolean { |         private fun Context.isAutoTv(): Boolean { | ||||||
|             val uiModeManager = getSystemService(Context.UI_MODE_SERVICE) as UiModeManager? |             val uiModeManager = getSystemService(Context.UI_MODE_SERVICE) as UiModeManager? | ||||||
|             return uiModeManager?.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION |             // AFT = Fire TV | ||||||
|  |             return uiModeManager?.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION || Build.MODEL.contains("AFT") | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         const val accountEnabled = true |         const val accountEnabled = true | ||||||
|  |  | ||||||
|  | @ -484,14 +484,13 @@ object AppUtils { | ||||||
| 
 | 
 | ||||||
|     fun Context.isAppInstalled(uri: String): Boolean { |     fun Context.isAppInstalled(uri: String): Boolean { | ||||||
|         val pm = Wrappers.packageManager(this) |         val pm = Wrappers.packageManager(this) | ||||||
|         var appInstalled = false | 
 | ||||||
|         appInstalled = try { |         return try { | ||||||
|             pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES) |             pm.getPackageInfo(uri, 0) // PackageManager.GET_ACTIVITIES | ||||||
|             true |             true | ||||||
|         } catch (e: PackageManager.NameNotFoundException) { |         } catch (e: PackageManager.NameNotFoundException) { | ||||||
|             false |             false | ||||||
|         } |         } | ||||||
|         return appInstalled |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fun getFocusRequest(): AudioFocusRequest? { |     fun getFocusRequest(): AudioFocusRequest? { | ||||||
|  |  | ||||||
|  | @ -541,6 +541,7 @@ | ||||||
|                                     android:layout_width="match_parent" />--> |                                     android:layout_width="match_parent" />--> | ||||||
| 
 | 
 | ||||||
|                             <FrameLayout |                             <FrameLayout | ||||||
|  |                                     android:id="@+id/result_movie_progress_downloaded_holder" | ||||||
|                                     android:layout_width="match_parent" |                                     android:layout_width="match_parent" | ||||||
|                                     android:layout_height="wrap_content"> |                                     android:layout_height="wrap_content"> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue