extract MprisService singleton, share player state between bar and lock screen
This commit is contained in:
parent
438362c6d1
commit
a7eca009e4
4 changed files with 34 additions and 25 deletions
|
|
@ -1,5 +1,4 @@
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import Quickshell.Services.Mpris
|
|
||||||
import Quickshell.Services.Pipewire
|
import Quickshell.Services.Pipewire
|
||||||
import "../services" as S
|
import "../services" as S
|
||||||
import "../applets" as C
|
import "../applets" as C
|
||||||
|
|
@ -50,12 +49,7 @@ Item {
|
||||||
color: Qt.rgba(S.Theme.base01.r, S.Theme.base01.g, S.Theme.base01.b, 0.7)
|
color: Qt.rgba(S.Theme.base01.r, S.Theme.base01.g, S.Theme.base01.b, 0.7)
|
||||||
border.color: Qt.rgba(S.Theme.base03.r, S.Theme.base03.g, S.Theme.base03.b, 0.3)
|
border.color: Qt.rgba(S.Theme.base03.r, S.Theme.base03.g, S.Theme.base03.b, 0.3)
|
||||||
border.width: 1
|
border.width: 1
|
||||||
visible: (S.Modules.lock.mpris ?? true) && _mprisPlayer !== null
|
visible: (S.Modules.lock.mpris ?? true) && S.MprisService.player !== null
|
||||||
|
|
||||||
readonly property var _mprisPlayers: (Mpris.players.values ?? []).filter(p => p.trackTitle || p.playbackState === MprisPlaybackState.Playing || p.playbackState === MprisPlaybackState.Paused)
|
|
||||||
property int _playerIdx: 0
|
|
||||||
readonly property var _mprisPlayer: _mprisPlayers[_playerIdx] ?? _mprisPlayers[0] ?? null
|
|
||||||
readonly property bool _playing: _mprisPlayer?.playbackState === MprisPlaybackState.Playing
|
|
||||||
|
|
||||||
C.MprisApplet {
|
C.MprisApplet {
|
||||||
id: _mprisContent
|
id: _mprisContent
|
||||||
|
|
@ -63,15 +57,13 @@ Item {
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.topMargin: 8
|
anchors.topMargin: 8
|
||||||
player: _mprisCard._mprisPlayer
|
player: S.MprisService.player
|
||||||
players: _mprisCard._mprisPlayers
|
players: S.MprisService.players
|
||||||
playing: _mprisCard._playing
|
playing: S.MprisService.playing
|
||||||
playerIdx: _mprisCard._playerIdx
|
playerIdx: S.MprisService.playerIdx
|
||||||
accentColor: S.Theme.base0D
|
accentColor: S.Theme.base0D
|
||||||
cachedArt: _mprisCard._mprisPlayer?.trackArtUrl ?? ""
|
cachedArt: S.MprisService.player?.trackArtUrl ?? ""
|
||||||
onPlayerSwitched: idx => {
|
onPlayerSwitched: idx => S.MprisService.switchPlayer(idx)
|
||||||
_mprisCard._playerIdx = idx;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,14 +13,9 @@ M.BarSection {
|
||||||
visible: opacity > 0
|
visible: opacity > 0
|
||||||
tooltip: ""
|
tooltip: ""
|
||||||
|
|
||||||
property int _playerIdx: 0
|
readonly property var _players: S.MprisService.players
|
||||||
readonly property var _players: (Mpris.players.values ?? []).filter(p => p.trackTitle || p.playbackState === MprisPlaybackState.Playing || p.playbackState === MprisPlaybackState.Paused)
|
readonly property MprisPlayer player: S.MprisService.player
|
||||||
readonly property MprisPlayer player: _players[_playerIdx] ?? _players[0] ?? null
|
readonly property bool playing: S.MprisService.playing
|
||||||
readonly property bool playing: player?.playbackState === MprisPlaybackState.Playing
|
|
||||||
|
|
||||||
// Reset index if current player disappears
|
|
||||||
on_PlayersChanged: if (_playerIdx >= _players.length)
|
|
||||||
_playerIdx = 0
|
|
||||||
property string _cachedArt: ""
|
property string _cachedArt: ""
|
||||||
property string _artTrack: ""
|
property string _artTrack: ""
|
||||||
|
|
||||||
|
|
@ -132,9 +127,9 @@ M.BarSection {
|
||||||
accentColor: root.accentColor
|
accentColor: root.accentColor
|
||||||
cachedArt: root._cachedArt
|
cachedArt: root._cachedArt
|
||||||
cavaBars: root._cavaBars
|
cavaBars: root._cavaBars
|
||||||
playerIdx: root._playerIdx
|
playerIdx: S.MprisService.playerIdx
|
||||||
onPlayerSwitched: idx => {
|
onPlayerSwitched: idx => {
|
||||||
root._playerIdx = idx;
|
S.MprisService.switchPlayer(idx);
|
||||||
hoverPanel.keepOpen(400);
|
hoverPanel.keepOpen(400);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
21
shell/services/MprisService.qml
Normal file
21
shell/services/MprisService.qml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
pragma Singleton
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
import Quickshell.Services.Mpris
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
readonly property var players: (Mpris.players.values ?? []).filter(p => p.trackTitle || p.playbackState === MprisPlaybackState.Playing || p.playbackState === MprisPlaybackState.Paused)
|
||||||
|
property int playerIdx: 0
|
||||||
|
readonly property MprisPlayer player: players[playerIdx] ?? players[0] ?? null
|
||||||
|
readonly property bool playing: player?.playbackState === MprisPlaybackState.Playing
|
||||||
|
|
||||||
|
// Reset index if current player disappears
|
||||||
|
onPlayersChanged: if (playerIdx >= players.length)
|
||||||
|
playerIdx = 0
|
||||||
|
|
||||||
|
function switchPlayer(idx) {
|
||||||
|
playerIdx = idx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,3 +8,4 @@ singleton NotifService 1.0 NotifService.qml
|
||||||
NotifItem 1.0 NotifItem.qml
|
NotifItem 1.0 NotifItem.qml
|
||||||
singleton LockService 1.0 LockService.qml
|
singleton LockService 1.0 LockService.qml
|
||||||
singleton BacklightService 1.0 BacklightService.qml
|
singleton BacklightService 1.0 BacklightService.qml
|
||||||
|
singleton MprisService 1.0 MprisService.qml
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue