1
0
Fork 0
mirror of https://github.com/HenkKalkwater/harbour-sailfin.git synced 2025-09-06 10:32:44 +00:00

core: Split PlaybackManager up into smaller parts

The PlaybackManager was a giant class that handled UI bindings, fetching
stream URLS, playback logic.

It now has been split up into:

- ViewModel::PlaybackManager, which handles UI interfacing and allowing
  to swap out the Model::Playback implementation on the fly.
- Model::PlaybackManager, which is an interface for what a
  PlaybackManager must do, handling queues/playlists, and controlling a
  player.
- Model::LocalPlaybackManager, which is an Model::PlaybackManager
  implementation for playing back Jellyfin media within the application.
- Model::PlaybackReporter, which reports the current playback state to
  the Jellyfin server, for keeping track of played items.
- Model::Player, which handles playing back media from an URL and
  the usual play/pause et cetera.

In a future commit, this would allow for introducing a
Model::RemoteJellyfinPlaybackManager, to control other Jellyfin
instances.
This commit is contained in:
Chris Josten 2022-01-05 21:24:52 +01:00 committed by Henk Kalkwater
parent f91e9f88e7
commit c72c10bad4
No known key found for this signature in database
GPG key ID: A69C050E9FD9FF6A
20 changed files with 1916 additions and 684 deletions

View file

@ -42,6 +42,7 @@ SilicaItem {
property int subtitleTrack: 0
//FIXME: Once QTBUG-10822 is resolved, change to J.PlaybackManager
property var manager;
onManagerChanged: console.log(manager.player)
// Blackground to prevent the ambience from leaking through
Rectangle {
@ -53,6 +54,9 @@ SilicaItem {
id: videoOutput
source: manager
anchors.fill: parent
Component.onCompleted: {
console.log(manager.player)
}
}
VideoHud {
@ -71,14 +75,16 @@ SilicaItem {
Label {
readonly property string _playbackMethod: {
switch(manager.playMethod) {
case J.PlaybackManager.DirectPlay:
return"Direct Play"
case J.PlaybackManager.Transcoding:
case J.PlayMethod.EnumNotSet:
return "Enum not set"
case J.PlayMethod.DirectPlay:
return "Direct Play"
case J.PlayMethod.Transcode:
return "Transcoding"
case J.PlaybackManager.DirectStream:
case J.PlayMethod.DirectStream:
return "Direct Stream"
default:
return "Unknown playback method"
return "Unknown playback method '%1'".arg(manager.playMethod)
}
}
anchors.fill: parent
@ -86,6 +92,7 @@ SilicaItem {
text: item.jellyfinId + "\n" + appWindow.playbackManager.streamUrl + "\n"
+ "Playback method: " + _playbackMethod + "\n"
+ "Media status: " + manager.mediaStatus + "\n"
+ "Playback state: " + manager.playbackState + "\n"
// + player.bufferProgress + "\n"
// + player.metaData.videoCodec + "@" + player.metaData.videoFrameRate + "(" + player.metaData.videoBitRate + ")" + "\n"
// + player.metaData.audioCodec + "(" + player.metaData.audioBitRate + ")" + "\n"