]> code.delx.au - mediapc-tools/blobdiff - mediawrap
mediapc-utils: simplify volume control
[mediapc-tools] / mediawrap
index 7a19264bcb05222c5c7a9995d111fc61ede4dd0a..312072ad53af6d57d15402b4d99b47b001e769c3 100755 (executable)
--- a/mediawrap
+++ b/mediawrap
@@ -1,42 +1,19 @@
 #!/bin/bash
 
-PIDFILE="$HOME/.mediawrap.pid"
-PULSESTATE="$HOME/.pulseaudio.state"
-KEYPATH="/apps/gnome_settings_daemon/keybindings"
+LOCKFILE="$HOME/.mediawrap.lock"
 
-while true; do
-       if [ ! -r "$PIDFILE" ]; then
-               break
-       fi
-       if [ "$(ps -o cmd= -p "$(cat "$PIDFILE")" | wc -l)" -eq 0 ]; then
-               break
-       fi
-       sleep 0.5
-done
-
-# Disable volume keys
-gconftool --set --type string "$KEYPATH/volume_up" ''
-gconftool --set --type string "$KEYPATH/volume_down" ''
-gconftool --set --type string "$KEYPATH/volume_mute" ''
-
-# Unmute everything and turn volume to full
-pacmd 'dump' | grep 'set-sink' > "$PULSESTATE"
-cat "$PULSESTATE" | grep 'set-sink-mute' | awk '{print $2;}' | \
-       while read device; do
-               pacmd "set-sink-volume $device 0x10000" > /dev/null
-               pacmd "set-sink-mute $device no" > /dev/null
-       done
+(
+if ! flock -w 10 -x 200; then
+    echo "Failed to get a lock!"
+    exit 1
+fi
 
 # Run the program
-"$@"
+"$@" &> /dev/null
 
-# Restore volume levels and mute status
-cat "$PULSESTATE" | pacmd > /dev/null
 
-# Enable volume keys
-gconftool --set --type string "$KEYPATH/volume_up" 'XF86AudioRaiseVolume'
-gconftool --set --type string "$KEYPATH/volume_down" 'XF86AudioLowerVolume'
-gconftool --set --type string "$KEYPATH/volume_mute" 'XF86AudioMute'
+) 200>"$LOCKFILE"
 
-rm -f "$PIDFILE"
+# Cleanup so other programs can start
+rm -f "$LOCKFILE"