mirror of
				https://github.com/recloudstream/cloudstream.git
				synced 2024-08-15 01:53:11 +00:00 
			
		
		
		
	trailers fix + crash fix
This commit is contained in:
		
							parent
							
								
									abeda3e758
								
							
						
					
					
						commit
						7a6d16d2c1
					
				
					 12 changed files with 91 additions and 33 deletions
				
			
		|  | @ -236,8 +236,8 @@ object APIHolder { | |||
|         val defaultSet = default.map { it.toString() }.toSet() | ||||
|         val currentPrefMedia = try { | ||||
|             PreferenceManager.getDefaultSharedPreferences(this) | ||||
|             .getStringSet(this.getString(R.string.prefer_media_type_key), defaultSet) | ||||
|             ?.mapNotNull { it.toIntOrNull() ?: return@mapNotNull null } | ||||
|                 .getStringSet(this.getString(R.string.prefer_media_type_key), defaultSet) | ||||
|                 ?.mapNotNull { it.toIntOrNull() ?: return@mapNotNull null } | ||||
|         } catch (e: Throwable) { | ||||
|             null | ||||
|         } ?: default | ||||
|  | @ -891,8 +891,11 @@ data class TvSeriesSearchResponse( | |||
| ) : SearchResponse | ||||
| 
 | ||||
| data class TrailerData( | ||||
|     var mirros: List<ExtractorLink>, | ||||
|     var subtitles: List<SubtitleFile> = emptyList(), | ||||
|     val extractorUrl: String, | ||||
|     val referer: String?, | ||||
|     val raw: Boolean, | ||||
|     //var mirros: List<ExtractorLink>, | ||||
|     //var subtitles: List<SubtitleFile> = emptyList(), | ||||
| ) | ||||
| 
 | ||||
| interface LoadResponse { | ||||
|  | @ -971,7 +974,8 @@ interface LoadResponse { | |||
|             addRaw: Boolean = false | ||||
|         ) { | ||||
|             if (!isTrailersEnabled || trailerUrl.isNullOrBlank()) return | ||||
|             val links = arrayListOf<ExtractorLink>() | ||||
|             this.trailers.add(TrailerData(trailerUrl, referer, addRaw)) | ||||
|             /*val links = arrayListOf<ExtractorLink>() | ||||
|             val subs = arrayListOf<SubtitleFile>() | ||||
|             if (!loadExtractor( | ||||
|                     trailerUrl, | ||||
|  | @ -995,12 +999,13 @@ interface LoadResponse { | |||
|                 ) | ||||
|             } else { | ||||
|                 this.trailers.add(TrailerData(links, subs)) | ||||
|             } | ||||
|             }*/ | ||||
|         } | ||||
| 
 | ||||
|         /* | ||||
|         fun LoadResponse.addTrailer(newTrailers: List<ExtractorLink>) { | ||||
|             trailers.addAll(newTrailers.map { TrailerData(listOf(it)) }) | ||||
|         } | ||||
|         }*/ | ||||
| 
 | ||||
|         suspend fun LoadResponse.addTrailer( | ||||
|             trailerUrls: List<String>?, | ||||
|  | @ -1008,7 +1013,8 @@ interface LoadResponse { | |||
|             addRaw: Boolean = false | ||||
|         ) { | ||||
|             if (!isTrailersEnabled || trailerUrls == null) return | ||||
|             val trailers = trailerUrls.filter { it.isNotBlank() }.apmap { trailerUrl -> | ||||
|             trailers.addAll(trailerUrls.map { TrailerData(it, referer, addRaw) }) | ||||
|             /*val trailers = trailerUrls.filter { it.isNotBlank() }.apmap { trailerUrl -> | ||||
|                 val links = arrayListOf<ExtractorLink>() | ||||
|                 val subs = arrayListOf<SubtitleFile>() | ||||
|                 if (!loadExtractor( | ||||
|  | @ -1031,7 +1037,7 @@ interface LoadResponse { | |||
|                     links to subs | ||||
|                 } | ||||
|             }.map { (links, subs) -> TrailerData(links, subs) } | ||||
|             this.trailers.addAll(trailers) | ||||
|             this.trailers.addAll(trailers)*/ | ||||
|         } | ||||
| 
 | ||||
|         fun LoadResponse.addImdbId(id: String?) { | ||||
|  |  | |||
|  | @ -127,8 +127,8 @@ fun CoroutineScope.launchSafe( | |||
|     val obj: suspend CoroutineScope.() -> Unit = { | ||||
|         try { | ||||
|             block() | ||||
|         } catch (e: Exception) { | ||||
|             logError(e) | ||||
|         } catch (throwable: Throwable) { | ||||
|             logError(throwable) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -84,8 +84,8 @@ object RepositoryManager { | |||
|             // Normal parsed function not working? | ||||
|             // return response.parsedSafe() | ||||
|             tryParseJson<Array<SitePlugin>>(response.text)?.toList() ?: emptyList() | ||||
|         } catch (e : Exception) { | ||||
|             logError(e) | ||||
|         } catch (t : Throwable) { | ||||
|             logError(t) | ||||
|             emptyList() | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -279,8 +279,8 @@ class SelectSourceController(val view: ImageView, val activity: ControllerActivi | |||
|                     val currentPosition = remoteMediaClient?.approximateStreamPosition | ||||
|                     if (currentDuration != null && currentPosition != null) | ||||
|                         DataStoreHelper.setViewPos(epData.id, currentPosition, currentDuration) | ||||
|                 } catch (e : Exception) { | ||||
|                     logError(e) | ||||
|                 } catch (t : Throwable) { | ||||
|                     logError(t) | ||||
|                 } | ||||
| 
 | ||||
|                 if (itemCount != null && itemCount - currentIdIndex == 1 && !isLoadingMore) { | ||||
|  |  | |||
|  | @ -148,10 +148,10 @@ class DownloadHeaderAdapter( | |||
|                             ), | ||||
|                             mbString | ||||
|                         ) | ||||
|                 } catch (e : Exception) { | ||||
|                 } catch (t : Throwable) { | ||||
|                     // you probably formatted incorrectly | ||||
|                     extraInfo.text = "Error" | ||||
|                     logError(e) | ||||
|                     logError(t) | ||||
|                 } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -112,9 +112,9 @@ class DownloadViewModel : ViewModel() { | |||
|             _usedBytes.postValue(localTotalBytes - localBytesAvailable - localDownloadedBytes) | ||||
|             _availableBytes.postValue(localBytesAvailable) | ||||
|             _downloadBytes.postValue(localDownloadedBytes) | ||||
|         } catch (e : Exception) { | ||||
|         } catch (t : Throwable) { | ||||
|             _downloadBytes.postValue(0) | ||||
|             logError(e) | ||||
|             logError(t) | ||||
|         } | ||||
| 
 | ||||
|         _headerCards.postValue(visual) | ||||
|  |  | |||
|  | @ -304,6 +304,11 @@ fun SelectPopup.getOptions(context: Context): List<String> { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| data class ExtractedTrailerData( | ||||
|     var mirros: List<ExtractorLink>, | ||||
|     var subtitles: List<SubtitleFile> = emptyList(), | ||||
| ) | ||||
| 
 | ||||
| class ResultViewModel2 : ViewModel() { | ||||
|     private var currentResponse: LoadResponse? = null | ||||
| 
 | ||||
|  | @ -349,9 +354,9 @@ class ResultViewModel2 : ViewModel() { | |||
|         MutableLiveData(Some.None) | ||||
|     val episodesCountText: LiveData<Some<UiText>> = _episodesCountText | ||||
| 
 | ||||
|     private val _trailers: MutableLiveData<List<TrailerData>> = MutableLiveData(mutableListOf()) | ||||
|     val trailers: LiveData<List<TrailerData>> = _trailers | ||||
| 
 | ||||
|     private val _trailers: MutableLiveData<List<ExtractedTrailerData>> = | ||||
|         MutableLiveData(mutableListOf()) | ||||
|     val trailers: LiveData<List<ExtractedTrailerData>> = _trailers | ||||
| 
 | ||||
|     private val _dubSubSelections: MutableLiveData<List<Pair<UiText?, DubStatus>>> = | ||||
|         MutableLiveData(emptyList()) | ||||
|  | @ -1784,12 +1789,58 @@ class ResultViewModel2 : ViewModel() { | |||
|         return ResumeWatchingStatus(progress = progress, isMovie = isMovie, result = episode) | ||||
|     } | ||||
| 
 | ||||
|     private fun loadTrailers(loadResponse: LoadResponse) = ioSafe { | ||||
|         _trailers.postValue(getTrailers(loadResponse, 3)) // we dont want to fetch too many trailers | ||||
|     } | ||||
| 
 | ||||
|     private suspend fun getTrailers( | ||||
|         loadResponse: LoadResponse, | ||||
|         limit: Int = 0 | ||||
|     ): List<ExtractedTrailerData> = | ||||
|         coroutineScope { | ||||
|             var currentCount = 0 | ||||
|             return@coroutineScope loadResponse.trailers.apmap { trailerData -> | ||||
|                 try { | ||||
|                     val links = arrayListOf<ExtractorLink>() | ||||
|                     val subs = arrayListOf<SubtitleFile>() | ||||
|                     if (!loadExtractor( | ||||
|                             trailerData.extractorUrl, | ||||
|                             trailerData.referer, | ||||
|                             { subs.add(it) }, | ||||
|                             { links.add(it) }) && trailerData.raw | ||||
|                     ) { | ||||
|                         arrayListOf( | ||||
|                             ExtractorLink( | ||||
|                                 "", | ||||
|                                 "Trailer", | ||||
|                                 trailerData.extractorUrl, | ||||
|                                 trailerData.referer ?: "", | ||||
|                                 Qualities.Unknown.value, | ||||
|                                 trailerData.extractorUrl.contains(".m3u8") | ||||
|                             ) | ||||
|                         ) to arrayListOf() | ||||
|                     } else { | ||||
|                         links to subs | ||||
|                     }.also { (extractor, _) -> | ||||
|                         if (extractor.isNotEmpty() && limit != 0) { | ||||
|                             currentCount++ | ||||
|                             if (currentCount >= limit) { | ||||
|                                 cancel() | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } catch (e: Throwable) { | ||||
|                     logError(e) | ||||
|                     null | ||||
|                 } | ||||
|             }.filterNotNull().map { (links, subs) -> ExtractedTrailerData(links, subs) } | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|     // this instantly updates the metadata on the page | ||||
|     private fun postPage(loadResponse: LoadResponse, apiRepository: APIRepository) { | ||||
|         _recommendations.postValue(loadResponse.recommendations ?: emptyList()) | ||||
|         _page.postValue(Resource.Success(loadResponse.toResultData(apiRepository))) | ||||
|         _trailers.postValue(loadResponse.trailers) | ||||
|     } | ||||
| 
 | ||||
|     fun hasLoaded() = currentResponse != null | ||||
|  | @ -1914,6 +1965,7 @@ class ResultViewModel2 : ViewModel() { | |||
|                         ) | ||||
|                     ) | ||||
| 
 | ||||
|                     loadTrailers(data.value) | ||||
|                     postSuccessful( | ||||
|                         data.value, | ||||
|                         updateEpisodes = true, | ||||
|  |  | |||
|  | @ -246,8 +246,8 @@ class SyncViewModel : ViewModel() { | |||
|         if (syncs.containsKey(aniListApi.idPrefix)) { | ||||
|             try { // swap can throw error | ||||
|                 Collections.swap(current, current.indexOfFirst { it.first == aniListApi.idPrefix }, 0) | ||||
|             } catch (e : Exception) { | ||||
|                 logError(e) | ||||
|             } catch (t : Throwable) { | ||||
|                 logError(t) | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -136,8 +136,8 @@ object UIHelper { | |||
|                     navigation, arguments | ||||
|                 ) | ||||
|             } | ||||
|         } catch (e : Exception) { | ||||
|             logError(e) | ||||
|         } catch (t : Throwable) { | ||||
|             logError(t) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1612,8 +1612,8 @@ object VideoDownloadManager { | |||
|                     .mapIndexed { index, any -> DownloadQueueResumePackage(index, any) } | ||||
|                     .toTypedArray() | ||||
|             setKey(KEY_RESUME_QUEUE_PACKAGES, dQueue) | ||||
|         } catch (e : Exception) { | ||||
|             logError(e) | ||||
|         } catch (t : Throwable) { | ||||
|             logError(t) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -53,8 +53,8 @@ class CenterZoomLayoutManager : LinearLayoutManager { | |||
|                             largestTag = tag | ||||
|                         } | ||||
|                     } | ||||
|                 } catch (e : Exception) { | ||||
|                     logError(e) | ||||
|                 } catch (t : Throwable) { | ||||
|                     logError(t) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue