X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=toggle-mute;h=ebf903149e739c854f7ded30453f0f0483539d3e;hb=refs%2Fheads%2Fmaster;hp=b50b37eaabf4087c4cd3c15a192f022b853cb9ca;hpb=e6cd2e555df3af0cf23da016b833529a34ffc84c;p=distro-setup diff --git a/toggle-mute b/toggle-mute index b50b37e..ebf9031 100755 --- a/toggle-mute +++ b/toggle-mute @@ -20,6 +20,11 @@ # See the License for the specific language governing permissions and # limitations under the License. +# mutes or unmutes ffmpeg stream +# usage: toggle-mute [mute|unmute|mute notify] +# +# +# gets state from $HOME/.iank-stream-muted if ! test "$BASH_VERSION"; then echo "error: shell is not bash" >&2; exit 1; fi shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4 @@ -27,40 +32,62 @@ set -eE -o pipefail trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" exit status: $?, PIPESTATUS: ${PIPESTATUS[*]}" >&2' ERR -mute=true -volume_level=0 - -# mute / unmute instead of toggle. -if [[ $1 ]]; then - case $1 in - mute) - mute=true - ;; - unmute) - mute=false - ;; - esac -else - - muted=$(pactl get-source-mute @DEFAULT_SOURCE@ | awk '{print $2}' ||:) - case $muted in - no) : ;; - yes) mute=false; volume_level=1 ;; - *) - i3-nagbar -m "FAILED TO GET PULSE MUTE STATE" -t error -f "pango:monospace 30" - ;; - esac -fi - -# we double mute here because it could be useful, and I figured out how -# and feel like using what I know. - -pactl set-source-mute @DEFAULT_SOURCE@ $mute - +v=0 +notify=false # note: condition duplicated in stream-clip, myi3statsus if pgrep -fc '^ffmpeg.*icecast://source.*/fsf' >/dev/null; then - out=$(echo Parsed_volume_1 volume $volume_level | zmqsend ||:) - if [[ $out != "0 Success" ]]; then - i3-nagbar -m "FAILED to set ffmpeg volume to $volume_level" -t error -f "pango:monospace 30" + if [[ $1 ]]; then + case $1 in + mute) + v=0 + if [[ $2 == notify ]]; then + notify=true + fi + ;; + unmute) + v=1 + ;; + *) + i3-nagbar -m "INVALID mute argument:$1" -t error -f "pango:monospace 30" + ;; + esac + + else + v_state=$(cat $HOME/.iank-stream-muted) ||: + case $v_state in + 1) : ;; # default action + 0) v=1 ;; + *) + i3-nagbar -m "FAILED GETTING MUTE STATE:$v" -t error -f "pango:monospace 30" + ;; + esac + fi + + out=$(echo Parsed_volume_1 volume $v | zmqsend ||:) + if [[ $out == "0 Success" ]]; then + echo $v >$HOME/.iank-stream-muted + if $notify; then + dunstify -h string:x-dunst-stack-tag:alert "automuted" + fi + else + i3-nagbar -m "FAILED ffmpeg volume:$v out:$out" -t error -f "pango:monospace 30" fi fi + + +# note: i figured out how to do system input level muting, but I don't +# really have a use case for it other than being doubly sure that i'm +# muted. leaving it commented in case I figure out a use case, or I +# find the application level muting to be unreliable. + +# uncomment and refactor for system muting +# muted=$(pactl get-source-mute @DEFAULT_SOURCE@ | awk '{print $2}' ||:) +# case $muted in +# no) v=0 ;; +# yes) v=1 ;; +# esac + + + +# uncomment for system muting, and set $mute_p +# pactl set-source-mute @DEFAULT_SOURCE@ $mute_p