dotfiles/.local/bin/mpd-notif

61 lines
1.8 KiB
Text
Raw Normal View History

2019-06-13 20:12:29 +02:00
#!/bin/bash
export MPD_HOST="$HOME/.mpd/socket"
2020-01-09 21:17:01 +01:00
DUNST_ID=$(sum <<<"mpd" | cut -d' ' -f1)
# Déclaration des variables globales
declare -- cursong prevsong
2019-06-13 20:12:29 +02:00
# Tant que le service MPD fonctionne
while systemctl --user is-active mpd.service &>/dev/null
2019-06-13 20:12:29 +02:00
do
# Toutes les 5 secondes, ou dès que le morceau se termine
2020-01-09 21:17:01 +01:00
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" ]]
2019-06-13 20:12:29 +02:00
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 sest retrouvé sur la première
# ligne parce quil ny a pas dartiste renseigné, on corrige
# le contenu des variables (pas forcément fiable, mais
# chez moi ça marche™).
2020-01-09 21:17:01 +01:00
[[ -z "$title" ]] && title="$artist" && artist=""
2022-11-10 02:30:19 +01:00
# Si on obtiens un chemin absolu, on naffiche que le nom, pas
# le chemin.
[[ -f "/${title}" ]] && title="$(basename "$title")"
# Si aucune information nest retournée, cest que la lecture
# sest 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)" \
2020-01-09 21:17:01 +01:00
--data-urlencode "title=${title}" \
--data-urlencode "artist=${artist}" \
--data-urlencode "album=${album}" \
https://pleroma.breizh.pm/api/v1/pleroma/scrobble &>/dev/null
2019-06-13 20:12:29 +02:00
fi
done
2020-01-09 21:17:01 +01:00
# Si on sort de la boucle cest que MPD est arrêté, cest pas normal alors on
# sort en erreur.
exit 1