60 lines
1.8 KiB
Bash
Executable file
60 lines
1.8 KiB
Bash
Executable file
#!/bin/bash
|
||
|
||
export MPD_HOST="$HOME/.mpd/socket"
|
||
DUNST_ID=$(sum <<<"mpd" | cut -d' ' -f1)
|
||
|
||
# Déclaration des variables globales
|
||
declare -- cursong prevsong
|
||
|
||
# Tant que le service MPD fonctionne
|
||
while systemctl --user is-active mpd.service &>/dev/null
|
||
do
|
||
# Toutes les 5 secondes, ou dès que le morceau se termine
|
||
timeout 5 mpc -w current
|
||
|
||
prevsong="$cursong"
|
||
cursong="$(mpc -f '[[%artist%\n|%name%\n]%title%[\n%album%]]|[%file%]' current)"
|
||
|
||
# Si le morceau a changé depuis la dernière vérification
|
||
if [[ "$cursong" != "$prevsong" ]]
|
||
then
|
||
|
||
# Extractions des informations depuis la chaîne récupérée plus
|
||
# tôt, vers un format plus lisible.
|
||
artist="$(sed -n 1p <<<"$cursong")"
|
||
title="$(sed -n 2p <<<"$cursong")"
|
||
album="$(sed -n 3p <<<"$cursong")"
|
||
|
||
# Petit trick : si le titre s’est retrouvé sur la première
|
||
# ligne parce qu’il n’y a pas d’artiste renseigné, on corrige
|
||
# le contenu des variables (pas forcément fiable, mais
|
||
# chez moi ça marche™).
|
||
[[ -z "$title" ]] && title="$artist" && artist=""
|
||
|
||
# Si on obtiens un chemin absolu, on n’affiche que le nom, pas
|
||
# le chemin.
|
||
[[ -f "/${title}" ]] && title="$(basename "$title")"
|
||
|
||
# Si aucune information n’est retournée, c’est que la lecture
|
||
# s’est arrêtée.
|
||
if [[ -z "$cursong" ]]
|
||
then
|
||
cursong="<i>Arrêt</i>"
|
||
unset artist title album
|
||
fi
|
||
|
||
# Notification du morceau
|
||
dunstify -r "$DUNST_ID" "MPD" "$cursong"
|
||
|
||
# Ajout au scrobbler Pleroma
|
||
curl -s -X POST -u "breizh:$(pass show Web/pleroma.breizh.pm)" \
|
||
--data-urlencode "title=${title}" \
|
||
--data-urlencode "artist=${artist}" \
|
||
--data-urlencode "album=${album}" \
|
||
https://pleroma.breizh.pm/api/v1/pleroma/scrobble &>/dev/null
|
||
fi
|
||
done
|
||
|
||
# Si on sort de la boucle c’est que MPD est arrêté, c’est pas normal alors on
|
||
# sort en erreur.
|
||
exit 1
|