fix: replace single-run Process objects with Quickshell.execDetached in MediaService for reliable media skipping and playback control

This commit is contained in:
Sho 2026-08-02 02:11:09 +09:00
parent 0dea1ec978
commit 89cc02e2aa

View File

@ -53,15 +53,15 @@ Item {
} }
function playPause() { function playPause() {
playPauseProc.running = true Quickshell.execDetached(["playerctl", "play-pause"])
} }
function next() { function next() {
nextProc.running = true Quickshell.execDetached(["playerctl", "next"])
} }
function previous() { function previous() {
prevProc.running = true Quickshell.execDetached(["playerctl", "previous"])
} }
function seek(targetSec) { function seek(targetSec) {
@ -72,14 +72,13 @@ Item {
seekTimer.restart() seekTimer.restart()
var targetMicro = Math.floor(validSec * 1000000) var targetMicro = Math.floor(validSec * 1000000)
seekProc.command = [ Quickshell.execDetached([
"bash", "-c", "bash", "-c",
"PLAYER_SERVICE=$(busctl --user list | grep -m1 'org.mpris.MediaPlayer2' | awk '{print $1}'); " + "PLAYER_SERVICE=$(busctl --user list | grep -m1 'org.mpris.MediaPlayer2' | awk '{print $1}'); " +
"TRACK_ID=$(playerctl metadata --format '{{mpris:trackid}}' | tr -d \"'\"); " + "TRACK_ID=$(playerctl metadata --format '{{mpris:trackid}}' | tr -d \"'\"); " +
"[ -z \"$TRACK_ID\" ] && TRACK_ID=\"/org/mpris/MediaPlayer2/TrackList/NoTrack\"; " + "[ -z \"$TRACK_ID\" ] && TRACK_ID=\"/org/mpris/MediaPlayer2/TrackList/NoTrack\"; " +
"busctl --user call \"$PLAYER_SERVICE\" /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player SetPosition ox \"$TRACK_ID\" " + targetMicro "busctl --user call \"$PLAYER_SERVICE\" /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player SetPosition ox \"$TRACK_ID\" " + targetMicro
] ])
seekProc.running = true
} }
} }
@ -90,11 +89,6 @@ Item {
onTriggered: root.isSeeking = false onTriggered: root.isSeeking = false
} }
Process { id: playPauseProc; command: ["playerctl", "play-pause"] }
Process { id: nextProc; command: ["playerctl", "next"] }
Process { id: prevProc; command: ["playerctl", "previous"] }
Process { id: seekProc }
Process { Process {
id: statusProc id: statusProc
command: ["playerctl", "status"] command: ["playerctl", "status"]