#!/usr/bin/env bash # A non-interactive script that creates notifications (libnotify on Linux, # native notifications on MacOS), announcing the currently playing song. Used by # ncmpcpp. _color() { printf '%s' "$1" "$2"; } if ! pgrep mpd >/dev/null; then >&2 echo "mpd isn't running." exit 1 fi info=$(mpc current -f ";%artist%;%album%;%title%;%file%") if [[ ${info:0:1} != ";" ]]; then >&2 echo "nothing is playing." exit 1 fi IFS=';' read -r _ artist album title file <<< "$info" artist="${artist:-$(_color "#757575" "No Artist")}" album="${album:-$(_color "#757575" "No Album")}" title="${title:-$(_color "#757575" "Untitled")}" rating= playlist_dir=$(awk '/playlist_directory/ { print gensub(/"/, "", "g", $2); }' "$HOME/.config/mpd/mpd.conf") playlist_dir="${playlist_dir/#\~/$HOME}" case $(grep "$file" "$playlist_dir"/*-star.m3u) in */1-star.m3u:*) starn=1 ;; */2-star.m3u:*) starn=2 ;; */3-star.m3u:*) starn=3 ;; */4-star.m3u:*) starn=4 ;; */5-star.m3u:*) starn=5 ;; esac if [[ -n $starn ]]; then star_filled_icon="★" star_empty_icon="☆" if [[ $OSTYPE == linux* ]]; then star_filled_icon=$(_color "#8fb1cd" "$star_filled_icon") star_empty_icon=$(_color "#666666" "$star_empty_icon") fi for ((i=1;i<=5;i++)); do if (( "$starn" >= "$i" )); then rating="${rating}${star_filled_icon}" else rating="${rating}${star_empty_icon}" fi done fi case $OSTYPE in darwin*) [[ -n $rating ]] && rating="[$rating] " killall terminal-notifier terminal-notifier -title "$rating$title" -message "by $artist :: $album" -appIcon "/Applications/iTunes.app/Contents/Resources/iTunes.icns" & ;; linux*) [[ -n $rating ]] && rating="$rating
" notify-send --urgency=low --icon="media-playback-start" --app-name="ncmpcpp" "$rating$title" "${artist}\n${album}" & ;; esac >/dev/null 2>&1 exit