140 lines
3.1 KiB
Bash
Executable file
140 lines
3.1 KiB
Bash
Executable file
#!/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="<span foreground=\"#6699CC\">"
|
|
case $origstatus in
|
|
stop ) status="<span foreground=\"#F2777A\">" ;;
|
|
paused ) status="<span foreground=\"#FFCC66\">" ;;
|
|
playing ) status="<span foreground=\"#99CC99\">" ;;
|
|
off ) status="<span foreground=\"#515151\">" ;;
|
|
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="<b>${longsong/§/</b> }"
|
|
elif [[ "$song" =~ § ]]
|
|
then
|
|
longsong="<b>${longsong}</b>"
|
|
fi
|
|
if [[ "$shortsong" =~ § ]]
|
|
then
|
|
shortsong="<b>${shortsong/§/</b> }"
|
|
elif [[ "$song" =~ § ]]
|
|
then
|
|
shortsong="<b>${shortsong}</b>"
|
|
fi
|
|
|
|
echo "${longsong} $status$longtime</span>"
|
|
echo "${shortsong} $status$shorttime</span>"
|
|
else
|
|
[[ -f ${runtime}/mpd ]] && rm ${runtime}/mpd
|
|
[[ -f ${runtime}/mpd-scroll ]] && rm ${runtime}/mpd-scroll
|
|
printf "%${LONG}s $status[--:-- --:-- --:--]</span>\n" " "
|
|
printf "%${SHORT}s $status--:-- --:--</span>\n" " "
|
|
fi
|
|
|
|
|