mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-13 17:22:08 -04:00
feature: persist last active player (#2184)
This commit is contained in:
@@ -124,6 +124,8 @@ Singleton {
|
|||||||
|
|
||||||
property string vpnLastConnected: ""
|
property string vpnLastConnected: ""
|
||||||
|
|
||||||
|
property string lastPlayerIdentity: ""
|
||||||
|
|
||||||
property var deviceMaxVolumes: ({})
|
property var deviceMaxVolumes: ({})
|
||||||
property var hiddenOutputDeviceNames: []
|
property var hiddenOutputDeviceNames: []
|
||||||
property var hiddenInputDeviceNames: []
|
property var hiddenInputDeviceNames: []
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ var SPEC = {
|
|||||||
|
|
||||||
vpnLastConnected: { def: "" },
|
vpnLastConnected: { def: "" },
|
||||||
|
|
||||||
|
lastPlayerIdentity: { def: "" },
|
||||||
|
|
||||||
deviceMaxVolumes: { def: {} },
|
deviceMaxVolumes: { def: {} },
|
||||||
hiddenOutputDeviceNames: { def: [] },
|
hiddenOutputDeviceNames: { def: [] },
|
||||||
hiddenInputDeviceNames: { def: [] },
|
hiddenInputDeviceNames: { def: [] },
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ DankPopout {
|
|||||||
if (currentPlayer && currentPlayer !== player && currentPlayer.canPause) {
|
if (currentPlayer && currentPlayer !== player && currentPlayer.canPause) {
|
||||||
currentPlayer.pause();
|
currentPlayer.pause();
|
||||||
}
|
}
|
||||||
MprisController.activePlayer = player;
|
MprisController.setActivePlayer(player);
|
||||||
root.__hideDropdowns();
|
root.__hideDropdowns();
|
||||||
}
|
}
|
||||||
onDeviceSelected: device => {
|
onDeviceSelected: device => {
|
||||||
|
|||||||
@@ -4,12 +4,61 @@ pragma ComponentBehavior: Bound
|
|||||||
import QtQuick
|
import QtQuick
|
||||||
import Quickshell
|
import Quickshell
|
||||||
import Quickshell.Services.Mpris
|
import Quickshell.Services.Mpris
|
||||||
|
import qs.Common
|
||||||
|
|
||||||
Singleton {
|
Singleton {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
readonly property list<MprisPlayer> availablePlayers: Mpris.players.values
|
readonly property list<MprisPlayer> availablePlayers: Mpris.players.values
|
||||||
property MprisPlayer activePlayer: availablePlayers.find(p => p.isPlaying) ?? availablePlayers.find(p => p.canControl && p.canPlay) ?? null
|
property MprisPlayer activePlayer: null
|
||||||
|
|
||||||
|
onAvailablePlayersChanged: _resolveActivePlayer()
|
||||||
|
Component.onCompleted: _resolveActivePlayer()
|
||||||
|
|
||||||
|
Instantiator {
|
||||||
|
model: root.availablePlayers
|
||||||
|
delegate: Connections {
|
||||||
|
required property MprisPlayer modelData
|
||||||
|
target: modelData
|
||||||
|
function onIsPlayingChanged() {
|
||||||
|
if (modelData.isPlaying)
|
||||||
|
root._resolveActivePlayer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _resolveActivePlayer(): void {
|
||||||
|
const playing = availablePlayers.find(p => p.isPlaying);
|
||||||
|
if (playing) {
|
||||||
|
activePlayer = playing;
|
||||||
|
_persistIdentity(playing.identity);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (activePlayer && availablePlayers.indexOf(activePlayer) >= 0)
|
||||||
|
return;
|
||||||
|
const savedId = SessionData.lastPlayerIdentity;
|
||||||
|
if (savedId) {
|
||||||
|
const match = availablePlayers.find(p => p.identity === savedId);
|
||||||
|
if (match) {
|
||||||
|
activePlayer = match;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
activePlayer = availablePlayers.find(p => p.canControl && p.canPlay) ?? null;
|
||||||
|
if (activePlayer)
|
||||||
|
_persistIdentity(activePlayer.identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setActivePlayer(player: MprisPlayer): void {
|
||||||
|
activePlayer = player;
|
||||||
|
if (player)
|
||||||
|
_persistIdentity(player.identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _persistIdentity(identity: string): void {
|
||||||
|
if (identity && SessionData.lastPlayerIdentity !== identity)
|
||||||
|
SessionData.set("lastPlayerIdentity", identity);
|
||||||
|
}
|
||||||
|
|
||||||
Timer {
|
Timer {
|
||||||
interval: 1000
|
interval: 1000
|
||||||
|
|||||||
Reference in New Issue
Block a user