fixes
[distro-setup] / toggle-mute
index b50b37eaabf4087c4cd3c15a192f022b853cb9ca..ebf903149e739c854f7ded30453f0f0483539d3e 100755 (executable)
 # 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