#!/bin/bash runtime="${XDG_RUNTIME_DIR}/i3blocks" [[ ! -d "$runtime" ]] && mkdir -p "$runtime" if ! systemctl --user is-active mpd &>/dev/null then origstatus='off' else origstatus="$(mpc status | sed -n '2p' | grep -Eo '^\[.*\]' | tr -d '[]')" [[ -z "$origstatus" ]] && origstatus='stop' fi LONG=30 SHORT=15 case $BLOCK_BUTTON in 1) mpc -q prev ;; 2) mpc -q toggle ;; 3) mpc -q next ;; 4) mpc -q volume +2 ;; 5) mpc -q volume -2 ;; #?*) notify-send "Test" "$BLOCK_BUTTON" ;; esac human_time() { local seconds="$1" if [[ "$seconds" -lt 0 ]] then echo "--:--" return fi local minutes=$(( $seconds / 60 )) seconds=$(( $seconds % 60 )) if [[ "$minutes" -ge 90 ]] then printf "%5s\n" "${minutes}m" else printf "%02d:%02d\n" "$minutes" "$seconds" fi return } status="" case $origstatus in stop ) status="" ;; paused ) status="" ;; playing ) status="" ;; off ) status="" ;; esac if [[ "$origstatus" != "stop" ]] && [[ "$origstatus" != "off" ]] then if [[ ! -f $runtime/mpd ]] then mpc -f '[[%artist%§]%title%|[%file%]' current > ${runtime}/mpd fi song=$(<${runtime}/mpd) if [[ "${#song}" -gt $LONG ]] then scrolling=long elif [[ "${#song}" -gt $SHORT ]] then scrolling=short else scrolling=none fi if [[ "$scrolling" != "none" ]] then scroll="$(<${runtime}/mpd-scroll)" if [[ -z "${scroll// /}" ]] then printf "%-${LONG}s" "$(<${runtime}/mpd)" > ${runtime}/mpd-scroll song="$(<${runtime}/mpd-scroll)" else song="$(<${runtime}/mpd-scroll)" printf "%-${LONG}s" "${song:1}" > ${runtime}/mpd-scroll fi fi time="$(echo -e 'status\nclose' | nc -U $MPD_HOST | grep time \ | cut -d' ' -f2)" time_elapsed=$(human_time "${time%:*}") time_total=$(human_time "${time#*:}") time_left=$(human_time "$(( ${time#*:} - ${time%:*} ))") longtime="[$time_elapsed $time_left ${time_total/00:00/--:--}]" shorttime="$time_elapsed $time_left" case $scrolling in long) longsong="${song} " shortsong="${song} " ;; short) longsong="$(<${runtime}/mpd) " shortsong="${song} " ;; none) longsong="$(<${runtime}/mpd) " shortsong="$longsong" ;; esac longsong="${longsong:0:$LONG}" shortsong="${shortsong:0:$SHORT}" longsong="${longsong//&/&}" shortsong="${shortsong//&/&}" if [[ "$longsong" =~ § ]] then longsong="${longsong/§/ }" elif [[ "$song" =~ § ]] then longsong="${longsong}" fi if [[ "$shortsong" =~ § ]] then shortsong="${shortsong/§/ }" elif [[ "$song" =~ § ]] then shortsong="${shortsong}" fi echo "${longsong} $status$longtime" echo "${shortsong} $status$shorttime" else [[ -f ${runtime}/mpd ]] && rm ${runtime}/mpd [[ -f ${runtime}/mpd-scroll ]] && rm ${runtime}/mpd-scroll printf "%${LONG}s $status[--:-- --:-- --:--]\n" " " printf "%${SHORT}s $status--:-- --:--\n" " " fi