Drive media play-order off MPRIS signals instead of polling
The media service ran a 500ms repeat timer calling syncPlayingOrder() for the whole session — two CPU wakeups a second even with nothing playing. syncPlayingOrder only depends on the set of MPRIS players and each player's isPlaying state, both of which the Mpris service already signals. Replace the timer with onPlayersChanged (players appearing/disappearing) plus an Instantiator that connects isPlayingChanged for each live player, and a Component.onCompleted for the initial sync. Verified with a test MPRIS player: play/pause and player add/remove all update the active player with no periodic timer. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
d548b730e0
commit
f1237e1962
@@ -430,12 +430,20 @@ Item {
|
||||
return handled
|
||||
}
|
||||
|
||||
Timer {
|
||||
interval: 500
|
||||
running: true
|
||||
repeat: true
|
||||
triggeredOnStart: true
|
||||
onTriggered: root.syncPlayingOrder()
|
||||
// Recompute play-order reactively instead of polling every 500ms.
|
||||
// syncPlayingOrder only depends on the set of players and each player's
|
||||
// isPlaying state: onPlayersChanged covers players appearing/disappearing,
|
||||
// and the Instantiator wires isPlayingChanged for each live player.
|
||||
Component.onCompleted: root.syncPlayingOrder()
|
||||
onPlayersChanged: root.syncPlayingOrder()
|
||||
|
||||
Instantiator {
|
||||
model: root.players
|
||||
delegate: Connections {
|
||||
required property var modelData
|
||||
target: modelData
|
||||
function onIsPlayingChanged() { root.syncPlayingOrder() }
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
|
||||
Reference in New Issue
Block a user