#!/bin/dash getpos() { # # Get track position # local h local m local s s=$(qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.PositionGet) s=$((s/1000)) h=$((s/3600)) s=$((s%3600)) m=$((s/60)) s=$((s%60)) case $h in 0) printf '%d:%02d' $m $s ;; *) printf '%d:%02d:%02d' $h $m $s ;; esac } mktext() { # # Compose info text from DBus # local artist local year local album local tracknumber local title local sigil local sigilcolor local value local key local color_attr local cache cache=$(mktemp -t cstatus.GetMetadata.XXXXXXXX) qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.GetMetadata >"$cache" case $(qdbus org.mpris.clementine /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlaybackStatus) in Stopped) sigil=""; sigilcolor= ;; Playing) sigil=""; sigilcolor=green ;; Paused) sigil=""; sigilcolor=gray;; *) sigil=""; sigilcolor=red ;; esac test -n "$sigilcolor" && color_attr=" color='$sigilcolor'" while read -r line; do key=${line%%:*} value=${line#$key: } case $key in artist) artist=$value ;; year) year=$value ;; album) album=$value ;; tracknumber) tracknumber=$value ;; title) title=$value ;; esac done <"$cache" printf "%s [%d %s]: %02d %s (%s) %s" \ "$artist" "$year" "$album" "$tracknumber" "$title" \ "$(getpos)" \ "$color_attr" "$sigil" rm "$cache" } main() { local head=true echo '{"version":1}' echo "[" while true; do $head || echo -n "," head=false echo -n '[{' echo -n '"markup":"pango",' echo -n '"full_text":"'"$(mktext)"'"' echo -n '}]' echo sleep 1 done } main