diff --git a/app/build.gradle b/app/build.gradle index 1aa62378..c14f0657 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -107,7 +107,7 @@ dependencies { testImplementation 'org.json:json:20180813' implementation 'androidx.core:core-ktx:1.8.0' - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.4.2' // need target 32 for 1.5.0 // dont change this to 1.6.0 it looks ugly af implementation 'com.google.android.material:material:1.5.0' @@ -194,7 +194,7 @@ dependencies { //implementation 'com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT' // newpipe yt - implementation 'com.github.recloudstream:NewPipeExtractor:master-SNAPSHOT' + implementation 'com.github.recloudstream:NewPipeExtractor:0.22.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' // Library/extensions searching with Levenshtein distance diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 67283de3..f442e175 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -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, - var subtitles: List = emptyList(), + val extractorUrl: String, + val referer: String?, + val raw: Boolean, + //var mirros: List, + //var subtitles: List = emptyList(), ) interface LoadResponse { @@ -971,7 +974,8 @@ interface LoadResponse { addRaw: Boolean = false ) { if (!isTrailersEnabled || trailerUrl.isNullOrBlank()) return - val links = arrayListOf() + this.trailers.add(TrailerData(trailerUrl, referer, addRaw)) + /*val links = arrayListOf() val subs = arrayListOf() if (!loadExtractor( trailerUrl, @@ -995,12 +999,13 @@ interface LoadResponse { ) } else { this.trailers.add(TrailerData(links, subs)) - } + }*/ } + /* fun LoadResponse.addTrailer(newTrailers: List) { trailers.addAll(newTrailers.map { TrailerData(listOf(it)) }) - } + }*/ suspend fun LoadResponse.addTrailer( trailerUrls: List?, @@ -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() val subs = arrayListOf() 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?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt b/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt index df585cda..a64f0d8d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt @@ -127,8 +127,8 @@ fun CoroutineScope.launchSafe( val obj: suspend CoroutineScope.() -> Unit = { try { block() - } catch (e: Exception) { - logError(e) + } catch (throwable: Throwable) { + logError(throwable) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt index c7e0ff86..ee0b60b8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -84,8 +84,8 @@ object RepositoryManager { // Normal parsed function not working? // return response.parsedSafe() tryParseJson>(response.text)?.toList() ?: emptyList() - } catch (e : Exception) { - logError(e) + } catch (t : Throwable) { + logError(t) emptyList() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt index bd918911..ad0b4399 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt @@ -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) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt index fde490e2..29bb303a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt @@ -148,10 +148,10 @@ class DownloadHeaderAdapter( ), mbString ) - } catch (e : Exception) { + } catch (t : Throwable) { // you probably formatted incorrectly extraInfo.text = "Error" - logError(e) + logError(t) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt index 8d969b0a..3a74a715 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt @@ -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) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 498eb109..e26265ec 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -304,6 +304,11 @@ fun SelectPopup.getOptions(context: Context): List { } } +data class ExtractedTrailerData( + var mirros: List, + var subtitles: List = emptyList(), +) + class ResultViewModel2 : ViewModel() { private var currentResponse: LoadResponse? = null @@ -349,9 +354,9 @@ class ResultViewModel2 : ViewModel() { MutableLiveData(Some.None) val episodesCountText: LiveData> = _episodesCountText - private val _trailers: MutableLiveData> = MutableLiveData(mutableListOf()) - val trailers: LiveData> = _trailers - + private val _trailers: MutableLiveData> = + MutableLiveData(mutableListOf()) + val trailers: LiveData> = _trailers private val _dubSubSelections: MutableLiveData>> = 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 = + coroutineScope { + var currentCount = 0 + return@coroutineScope loadResponse.trailers.apmap { trailerData -> + try { + val links = arrayListOf() + val subs = arrayListOf() + 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, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt index c5955ea0..513d68e8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt @@ -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) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index cc24ef16..ab49492a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -136,8 +136,8 @@ object UIHelper { navigation, arguments ) } - } catch (e : Exception) { - logError(e) + } catch (t : Throwable) { + logError(t) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index f74762a5..a629dad9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -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) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/widget/CenterZoomLayoutManager.kt b/app/src/main/java/com/lagradost/cloudstream3/widget/CenterZoomLayoutManager.kt index 6f5d7592..310f2a06 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/widget/CenterZoomLayoutManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/widget/CenterZoomLayoutManager.kt @@ -53,8 +53,8 @@ class CenterZoomLayoutManager : LinearLayoutManager { largestTag = tag } } - } catch (e : Exception) { - logError(e) + } catch (t : Throwable) { + logError(t) } } }