From fa1118a7f3227c5ab54ab47296444dcd7e699142 Mon Sep 17 00:00:00 2001 From: Chris Josten Date: Sun, 27 Sep 2020 17:59:11 +0200 Subject: [PATCH] Added video playback error screen --- harbour-sailfin.pro | 1 + qml/components/VideoPlayer.qml | 7 ++- qml/components/videoplayer/VideoError.qml | 69 +++++++++++++++++++++++ translations/harbour-sailfin.ts | 28 +++++++++ 4 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 qml/components/videoplayer/VideoError.qml diff --git a/harbour-sailfin.pro b/harbour-sailfin.pro index 917c7fc..8363b91 100644 --- a/harbour-sailfin.pro +++ b/harbour-sailfin.pro @@ -48,6 +48,7 @@ DISTFILES += \ qml/components/itemdetails/SeriesDetails.qml \ qml/components/itemdetails/UnsupportedDetails.qml \ qml/components/itemdetails/VideoTrackSelector.qml \ + qml/components/videoplayer/VideoError.qml \ qml/components/videoplayer/VideoHud.qml \ qml/cover/CoverPage.qml \ qml/cover/PosterCover.qml \ diff --git a/qml/components/VideoPlayer.qml b/qml/components/VideoPlayer.qml index 73d8f30..59ec599 100644 --- a/qml/components/VideoPlayer.qml +++ b/qml/components/VideoPlayer.qml @@ -17,7 +17,7 @@ SilicaItem { property int progress readonly property bool landscape: videoOutput.contentRect.width > videoOutput.contentRect.height property MediaPlayer player - readonly property bool hudVisible: !hud.hidden + readonly property bool hudVisible: !hud.hidden || player.error !== MediaPlayer.NoError property alias audioTrack: mediaSource.audioIndex property alias subtitleTrack: mediaSource.subtitleIndex @@ -74,6 +74,11 @@ SilicaItem { } } + VideoError { + anchors.fill: videoOutput + player: playerRoot.player + } + function stop() { player.stop() player.source = "" diff --git a/qml/components/videoplayer/VideoError.qml b/qml/components/videoplayer/VideoError.qml new file mode 100644 index 0000000..346945f --- /dev/null +++ b/qml/components/videoplayer/VideoError.qml @@ -0,0 +1,69 @@ +import QtQuick 2.6 +import Sailfish.Silica 1.0 +import QtMultimedia 5.6 + +Rectangle { + id: videoError + property MediaPlayer player + color: pal.palette.overlayBackgroundColor + opacity: player.error === MediaPlayer.NoError ? 0.0 : 1.0 + Behavior on opacity { FadeAnimator {} } + + SilicaItem { + id: pal + } + + Column { + anchors.centerIn: parent + anchors.margins: Theme.horizontalPageMargin + + Label { + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: Theme.fontSizeExtraLarge + color: Theme.errorColor + text: { + switch(player.error) { + case MediaPlayer.ResourceError: + //: Video playback error: out of resources + qsTr("Resource allocation error") + break; + case MediaPlayer.FormatError: + //: Video playback error: unsupported format/codec + qsTr("Video format unsupported") + break; + case MediaPlayer.NetworkError: + //: Video playback error: network error + qsTr("Network error") + break; + case MediaPlayer.AccessDenied: + //: Video playback error: access denied + qsTr("Access denied") + break; + case MediaPlayer.ServiceMissing: + //: Video playback error: the media cannot be played because the media service could not be instantiated. + qsTr("Media service missing") + break; + } + } + } + + Label { + wrapMode: Text.WordWrap + text: player.errorString + color: Theme.errorColor + width: videoError.width - Theme.horizontalPageMargin * 2 + horizontalAlignment: Text.AlignHCenter + } + + Item { width: 1; height: Theme.paddingLarge; } + + ButtonLayout { + Button { + //: Button to retry loading a video after a failure + text: qsTr("Retry") + onClicked: player.play() + } + } + } + +} diff --git a/translations/harbour-sailfin.ts b/translations/harbour-sailfin.ts index 50ce80e..ade2e76 100644 --- a/translations/harbour-sailfin.ts +++ b/translations/harbour-sailfin.ts @@ -267,6 +267,34 @@ + + VideoError + + Resource allocation error + Video playback error: out of resources + + + + Video format unsupported + Video playback error: unsupported format/codec + + + + Network error + Video playback error: network error + + + + Access denied + Video playback error: access denied + + + + Media service missing + Video playback error: the media cannot be played because the media service could not be instantiated. + + + VideoTrackSelector