#!/bin/sh

type -p pactl &> /dev/null || exit 0
type -p sudo &> /dev/null || exit 0

PB_LIST=/var/run/pa-power.play
CP_LIST=/var/run/pa-power.capt

make_pid_list () {
    type=$1
    file=$2
    for p in $(fuser -u /dev/snd/pcmC*$type); do
	case $(readlink /proc/$p/exe) in
	    */pulseaudio)
		echo $p
	 	;;
	esac
    done | sort | uniq > $file
}

run_pactl () {
    local type=$1
    local up=$2
    while read p; do
	test -d /proc/$p || next
	u=$(cat /proc/$p/loginuid)
	sudo -u "#$u" pactl suspend-$type $up
    done
}


case "$1" in
    hibernate|suspend)
	rm -f $PB_LIST $CP_LIST
	make_pid_list p $PB_LIST 2>/dev/null
	make_pid_list c $CP_LIST 2>/dev/null
	run_pactl sink 1 < $PB_LIST
	run_pactl source 1 < $CP_LIST
	;;
    thaw|resume)
	run_pactl sink 0 < $PB_LIST
	run_pactl source 0 < $CP_LIST
	rm -f $PB_LIST $CP_LIST
	;;
esac

exit 0
