diff --git a/Modules/ControlCenter/Cards/MediaCard.qml b/Modules/ControlCenter/Cards/MediaCard.qml index d5753455..0138a859 100644 --- a/Modules/ControlCenter/Cards/MediaCard.qml +++ b/Modules/ControlCenter/Cards/MediaCard.qml @@ -179,8 +179,7 @@ NBox { onTriggered: function (action) { var index = parseInt(action) if (!isNaN(index)) { - MediaService.selectedPlayerIndex = index - MediaService.updateCurrentPlayer() + MediaService.switchToPlayer(index) } } } diff --git a/Modules/ControlCenter/ControlCenterPanel.qml b/Modules/ControlCenter/ControlCenterPanel.qml index fcc13cb8..0e899019 100644 --- a/Modules/ControlCenter/ControlCenterPanel.qml +++ b/Modules/ControlCenter/ControlCenterPanel.qml @@ -63,6 +63,14 @@ NPanel { readonly property int weatherHeight: Math.round(190 * Style.uiScaleRatio) readonly property int mediaSysMonHeight: Math.round(260 * Style.uiScaleRatio) + onOpened: { + MediaService.autoSwitchingPaused = true + } + + onClosed: { + MediaService.autoSwitchingPaused = false + } + panelContent: Item { id: content diff --git a/Services/MediaService.qml b/Services/MediaService.qml index 30295bc5..aa6a6648 100644 --- a/Services/MediaService.qml +++ b/Services/MediaService.qml @@ -171,6 +171,21 @@ Singleton { } } + property bool autoSwitchingPaused: false + + function switchToPlayer(index) { + let availablePlayers = getAvailablePlayers() + if (index >= 0 && index < availablePlayers.length) { + let newPlayer = availablePlayers[index] + if (newPlayer !== currentPlayer) { + currentPlayer = newPlayer + selectedPlayerIndex = index + currentPosition = currentPlayer ? currentPlayer.position : 0 + Logger.d("Media", "Manually switched to player " + currentPlayer.identity) + } + } + } + // Switch to the most recently active player function updateCurrentPlayer() { let newPlayer = findActivePlayer() @@ -289,6 +304,8 @@ Singleton { repeat: true running: true onTriggered: { + Logger.d("MediaService", "playerStateMonitor triggered. autoSwitchingPaused: " + root.autoSwitchingPaused) + if (autoSwitchingPaused) return // Only update if we don't have a playing player or if current player is paused if (!currentPlayer || !currentPlayer.isPlaying || currentPlayer.playbackState !== MprisPlaybackState.Playing) { updateCurrentPlayer()