1
0
Fork 0
mirror of https://github.com/HenkKalkwater/harbour-sailfin.git synced 2025-09-04 01:42:44 +00:00

Add user-configurable playback settings

* PlaybackManager has been updated to workaround limitiations in
  QtMultimedia
* PlaybackManager now sends the DeviceProfile to the server when
  determining the playback url. This makes the Jellyfin server send
  information back about transcoding.
* The DeviceProfile type has been changed from an QJsonObject into the
  DTO generated by the OpenAPI descripton.
* A settings page has been added on SailfishOS that allows the user to
  configure the PlaybackManager to their whishes.
* The DebugInfo page on SailfishOS now persists its settings (closes #8)
This commit is contained in:
Chris Josten 2021-09-08 21:44:42 +02:00
parent 64ad37707c
commit 6bfe783bec
13 changed files with 388 additions and 196 deletions

View file

@ -69,12 +69,23 @@ SilicaItem {
}
Label {
readonly property string _playbackMethod: {
switch(manager.playMethod) {
case J.PlaybackManager.DirectPlay:
return"Direct Play"
case J.PlaybackManager.Transcoding:
return "Transcoding"
case J.PlaybackManager.DirectStream:
return "Direct Stream"
default:
return "Unknown playback method"
}
}
anchors.fill: parent
anchors.margins: Theme.horizontalPageMargin
text: item.jellyfinId + "\n" + appWindow.playbackManager.streamUrl + "\n"
+ (manager.playMethod === J.PlaybackManager.DirectPlay ? "Direct Play" : "Transcoding") + "\n"
+ manager.position + "\n"
+ manager.mediaStatus + "\n"
+ "Playback method: " + _playbackMethod + "\n"
+ "Media status: " + manager.mediaStatus + "\n"
// + player.bufferProgress + "\n"
// + player.metaData.videoCodec + "@" + player.metaData.videoFrameRate + "(" + player.metaData.videoBitRate + ")" + "\n"
// + player.metaData.audioCodec + "(" + player.metaData.audioBitRate + ")" + "\n"

View file

@ -22,6 +22,7 @@ import Sailfish.Silica 1.0
import QtMultimedia 5.6
import nl.netsoj.chris.Jellyfin 1.0
import Nemo.Configuration 1.0
import Nemo.Notifications 1.0
import Nemo.KeepAlive 1.2
@ -41,9 +42,10 @@ ApplicationWindow {
property var itemData: pageStack.currentPage.itemData
// Bad way to implement settings, but it'll do for now.
property bool showDebugInfo: true
property alias showDebugInfo: config.showDebugInfo
property bool _hidePlaybackBar: false
bottomMargin: playbackBar.visibleSize
ApiClient {
id: _apiClient
@ -132,6 +134,12 @@ ApplicationWindow {
Component.onCompleted: playbackBar.parent = __silica_applicationwindow_instance._rotatingItem
}
ConfigurationGroup {
id: config
path: "/nl/netsoj/chris/Sailfin"
property bool showDebugInfo: false
}
//FIXME: proper error handling
Connections {
target: apiClient

View file

@ -117,6 +117,13 @@ Page {
text: qsTr("Other")
}
IconListItem {
//: Settings list item for settings related to streaming
text: qsTr("Streaming settings")
iconSource: "image://theme/icon-m-cloud-download"
onClicked: pageStack.push(Qt.resolvedUrl("settings/StreamingPage.qml"))
}
IconListItem {
//: Debug information settings menu itemy
text: qsTr("Debug information")

View file

@ -18,6 +18,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
import QtQuick 2.6
import Sailfish.Silica 1.0
import Nemo.Configuration 1.0
import nl.netsoj.chris.Jellyfin 1.0 as J
@ -30,6 +31,12 @@ Page {
// The effective value will be restricted by ApplicationWindow.allowedOrientations
allowedOrientations: Orientation.All
ConfigurationGroup {
id: config
path: "/nl/netsoj/chris/Sailfin"
property bool showDebugInfo: false
}
SilicaFlickable {
anchors.fill: parent
contentHeight: content.height
@ -42,8 +49,8 @@ Page {
TextSwitch {
text: qsTr("Show debug information")
checked: appWindow.showDebugInfo
onCheckedChanged: appWindow.showDebugInfo = checked
checked: config.showDebugInfo
onCheckedChanged: config.showDebugInfo = checked
}
SectionHeader {

View file

@ -0,0 +1,67 @@
/*
Sailfin: a Jellyfin client written using Qt
Copyright (C) 2021 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 "../.."
Page {
id: page
// The effective value will be restricted by ApplicationWindow.allowedOrientations
allowedOrientations: Orientation.All
SilicaFlickable {
anchors.fill: parent
contentHeight: content.height
Column {
id: content
width: parent.width
PageHeader {
title: qsTr("Streaming settings")
}
TextSwitch {
text: qsTr("Allow transcoding")
description: qsTr("If enabled, Sailfin may request the Jellyfin server " +
"to transcode media to a more suitable media format for this device. " +
"It is recommended to leave this enabled unless your server is weak.")
checked: appWindow.apiClient.settings.allowTranscoding
onCheckedChanged: appWindow.apiClient.settings.allowTranscoding = checked
}
Slider {
minimumValue: 0
maximumValue: 64 * 1024 * 1024
stepSize: 1024 * 128
valueText: qsTr("%1 mbps").arg((value / 1024 / 1024).toPrecision(4))
value: appWindow.apiClient.settings.maxStreamingBitRate
onDownChanged: if (!down) appWindow.apiClient.settings.maxStreamingBitRate = value
label: qsTr("Maximum streaming bitrate")
width: parent.width
}
}
}
}