1
0
Fork 0
mirror of https://github.com/HenkKalkwater/harbour-sailfin.git synced 2024-11-22 17:25:17 +00:00
harbour-sailfin/sailfish/qml/pages/itemdetails/VideoPage.qml

110 lines
4 KiB
QML
Raw Permalink Normal View History

/*
Sailfin: a Jellyfin client written using Qt
Copyright (C) 2020-2024 Chris Josten
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
import QtQuick 2.6
import Sailfish.Silica 1.0
import nl.netsoj.chris.Jellyfin 1.0 as J
import "../../components"
import "../.."
/**
* Fallback page for everything that's a video, but we haven't a more specific page for, like
* the FilmPage or EpisodePage.
*/
BaseDetailPage {
id: detailPage
property alias title: pageHeader.title
property alias subtitle: pageHeader.description
default property alias _data: content.data
property real _playbackProsition: itemData.userData.playbackPositionTicks
readonly property bool _userdataReady: itemLoader.status === J.ItemLoader.Ready && itemData.userData !== null
property string imageSource: Utils.itemImageUrl(apiClient.baseUrl, itemData, "Primary", {"maxWidth": parent.width})
property string imageBlurhash: itemData.imageBlurHashes["Primary"][itemData.imageTags["Primary"]]
SilicaFlickable {
anchors.fill: parent
contentHeight: content.height + Theme.paddingLarge
visible: itemData.status !== J.ItemLoader.Error
VerticalScrollDecorator {}
Column {
id: content
width: parent.width
spacing: Theme.paddingMedium
PageHeader {
id: pageHeader
title: itemData.name
description: qsTr("Run time: %2").arg(Utils.ticksToText(itemData.runTimeTicks))
}
PlayToolbar {
id: toolbar
width: parent.width
imageSource: detailPage.imageSource
imageAspectRatio: Constants.horizontalVideoAspectRatio
imageBlurhash: detailPage.imageBlurhash
maxHeight: detailPage.height / 2
Binding on favourited {
when: _userdataReady
value: itemData.userData.favorite
}
Binding on playProgress {
when: _userdataReady
value: itemData.userData.playedPercentage / 100
}
onPlayPressed: pageStack.push(Qt.resolvedUrl("../VideoPage.qml"),
2021-02-13 23:21:49 +00:00
{"itemData": itemData,
"audioTrack": trackSelector.audioTrack,
"subtitleTrack": trackSelector.subtitleTrack,
2021-02-13 23:21:49 +00:00
"resume": resume})
}
VideoTrackSelector {
id: trackSelector
width: parent.width
2021-08-22 23:46:57 +00:00
audioTracks: itemData.audioStreams
videoTracks: itemData.videoStreams
subtitleTracks: itemData.subtitleStreams
}
Label {
2021-09-10 03:18:05 +00:00
visible: appWindow.showDebugInfo
leftPadding: Theme.horizontalPageMargin
rightPadding: Theme.horizontalPageMargin
width: parent.width
2021-08-22 23:46:57 +00:00
text: "Video %1, audio %2, subtitle %3".arg(trackSelector.videoTrack).arg(trackSelector.audioTrack).arg(trackSelector.subtitleTrack)
}
}
}
Connections {
target: itemLoader
onStatusChanged: {
if (status === J.ItemLoader.Ready) {
console.log(itemData.mediaStreams)
}
}
}
}