diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt index 66d5e6831..228c17f8c 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt @@ -121,27 +121,14 @@ class ErrorPanelHelper( ErrorActivity.reportError(context, errorInfo) } - errorTextView.setText( - when (errorInfo.throwable) { - is AgeRestrictedContentException -> R.string.restricted_video_no_stream - is GeographicRestrictionException -> R.string.georestricted_content - is PaidContentException -> R.string.paid_content - is PrivateContentException -> R.string.private_content - is SoundCloudGoPlusContentException -> R.string.soundcloud_go_plus_content - is YoutubeMusicPremiumContentException -> R.string.youtube_music_premium_content - is ContentNotAvailableException -> R.string.content_not_available - is ContentNotSupportedException -> R.string.content_not_supported - else -> { - // show retry button only for content which is not unavailable or unsupported - errorRetryButton.isVisible = true - if (errorInfo.throwable != null && errorInfo.throwable!!.isNetworkRelated) { - R.string.network_error - } else { - R.string.error_snackbar_message - } - } - } - ) + errorTextView.setText(getExceptionDescription(errorInfo.throwable)) + + if (errorInfo.throwable !is ContentNotAvailableException && + errorInfo.throwable !is ContentNotSupportedException + ) { + // show retry button only for content which is not unavailable or unsupported + errorRetryButton.isVisible = true + } } setRootVisible() @@ -189,5 +176,27 @@ class ErrorPanelHelper( companion object { val TAG: String = ErrorPanelHelper::class.simpleName!! val DEBUG: Boolean = MainActivity.DEBUG + + @StringRes + public fun getExceptionDescription(throwable: Throwable?): Int { + return when (throwable) { + is AgeRestrictedContentException -> R.string.restricted_video_no_stream + is GeographicRestrictionException -> R.string.georestricted_content + is PaidContentException -> R.string.paid_content + is PrivateContentException -> R.string.private_content + is SoundCloudGoPlusContentException -> R.string.soundcloud_go_plus_content + is YoutubeMusicPremiumContentException -> R.string.youtube_music_premium_content + is ContentNotAvailableException -> R.string.content_not_available + is ContentNotSupportedException -> R.string.content_not_supported + else -> { + // show retry button only for content which is not unavailable or unsupported + if (throwable != null && throwable.isNetworkRelated) { + R.string.network_error + } else { + R.string.error_snackbar_message + } + } + } + } } } diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/InternalUrlsHandler.java b/app/src/main/java/org/schabi/newpipe/util/external_communication/InternalUrlsHandler.java index 39ec51ce4..104642d36 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/InternalUrlsHandler.java +++ b/app/src/main/java/org/schabi/newpipe/util/external_communication/InternalUrlsHandler.java @@ -1,9 +1,14 @@ package org.schabi.newpipe.util.external_communication; import android.content.Context; +import android.util.Log; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import org.schabi.newpipe.MainActivity; +import org.schabi.newpipe.R; +import org.schabi.newpipe.error.ErrorPanelHelper; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.exceptions.ExtractionException; @@ -24,6 +29,9 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.schedulers.Schedulers; public final class InternalUrlsHandler { + private static final String TAG = InternalUrlsHandler.class.getSimpleName(); + private static final boolean DEBUG = MainActivity.DEBUG; + private static final Pattern AMPERSAND_TIMESTAMP_PATTERN = Pattern.compile("(.*)&t=(\\d+)"); private static final Pattern HASHTAG_TIMESTAMP_PATTERN = Pattern.compile("(.*)#timestamp=(\\d+)"); @@ -148,6 +156,16 @@ public final class InternalUrlsHandler { final PlayQueue playQueue = new SinglePlayQueue(info, seconds * 1000); NavigationHelper.playOnPopupPlayer(context, playQueue, false); + }, throwable -> { + if (DEBUG) { + Log.e(TAG, "Could not play on popup: " + url, throwable); + } + new AlertDialog.Builder(context) + .setTitle(R.string.player_stream_failure) + .setMessage( + ErrorPanelHelper.Companion.getExceptionDescription(throwable)) + .setPositiveButton(R.string.ok, (v, b) -> { }) + .show(); })); return true; }