77 lines
1.8 KiB
Bash
Executable file
77 lines
1.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# shellcheck disable=SC2154
|
|
NOTIFICATION_PROGRAM='mako'
|
|
|
|
process_args() {
|
|
while [ "$#" -ge 2 ]; do
|
|
printf -v "$1" "%s" "$2"
|
|
shift
|
|
shift
|
|
done
|
|
}
|
|
|
|
escape() {
|
|
local string
|
|
string=$1
|
|
string=${string//"&"/"&"}
|
|
string=${string//"<"/"<"}
|
|
string=${string//">"/">"}
|
|
printf "%s" "$string"
|
|
}
|
|
|
|
# Just quit this application if our notification program does not exist
|
|
# With this notification will not be displayed on my work laptop. Avoid
|
|
# notification pollution!
|
|
check_notification_program() {
|
|
if ! command -v "$NOTIFICATION_PROGRAM"; then
|
|
exit 0
|
|
fi
|
|
}
|
|
|
|
main() {
|
|
options=(--app-name=cmus --transient -u low)
|
|
filename=${file##*/}
|
|
path=${file%/*}
|
|
|
|
if [[ -f "${path}/cover.png" ]]; then
|
|
options+=(-i "${path}/cover.png")
|
|
fi
|
|
|
|
if [[ -f "${path}/cover.jpg" ]]; then
|
|
options+=(-i "${path}/cover.jpg")
|
|
fi
|
|
|
|
## Get title or filename
|
|
title=${title:-$filename}
|
|
if [[ ${#title} -gt 25 ]]; then
|
|
title="${title:0:24}…"
|
|
fi
|
|
title="<b>$(escape "$title")</b>"
|
|
|
|
if [ -n "$artist" ]; then
|
|
if [[ ${#artist} -gt 22 ]]; then
|
|
artist="${artist:0:21}…"
|
|
fi
|
|
printf -v l_artist "<span size='x-large'>by </span>%s" "$(escape "$artist")"
|
|
fi
|
|
|
|
if [ -n "$date" ]; then
|
|
date="${date%%-*}"
|
|
fi
|
|
|
|
# Get Album
|
|
if [ -n "$album" ]; then
|
|
if [[ ${#album} -gt 19 ]]; then
|
|
album="${album:0:19}…"
|
|
fi
|
|
printf -v l_album "<span size='x-large'>on </span>%-20s <span size='x-large'>%s</span>" "$(escape "$album")" "${date:-}"
|
|
fi
|
|
|
|
printf -v l_intro "<span variant='small-caps'>cmus:<b>%s</b></span>" "$(escape "$status")"
|
|
printf -v body "%s\n" "${l_intro:-}" "${title:-}" "${l_artist:-}" "${l_album:-}"
|
|
notify-send "${options[@]}" "useless" "$body"
|
|
}
|
|
|
|
check_notification_program
|
|
process_args "$@"
|
|
main
|