/* 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 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"), {"itemData": itemData, "audioTrack": trackSelector.audioTrack, "subtitleTrack": trackSelector.subtitleTrack, "resume": resume}) } VideoTrackSelector { id: trackSelector width: parent.width audioTracks: itemData.audioStreams videoTracks: itemData.videoStreams subtitleTracks: itemData.subtitleStreams } Label { visible: appWindow.showDebugInfo leftPadding: Theme.horizontalPageMargin rightPadding: Theme.horizontalPageMargin width: parent.width 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) } } } }