#!/bin/bash export MPD_HOST="$HOME/.mpd/socket" DUNST_ID=$(sum <<<"mpd" | cut -d' ' -f1) # Déclaration des variables globales declare -- prevfile declare -a -- infos # 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 mapfile -t infos < <(mpc -f '[%artist%|%name%]\n%title%\n%album%\n%file%\n%time%' current) # Si le morceau a changé depuis la dernière vérification if [[ "${infos[1]:-${infos[3]}}" != "$title" && "$title" != "Arrêt" ]] then artist="${infos[0]}" title="${infos[1]:-${infos[3]}}" album="${infos[2]}" file="${infos[3]}" [[ -n "${infos[4]}" ]] && length="$(( 10#${infos[4]%%:*} * 60 + 10#${infos[4]##*:} ))" # 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 [[ "${#infos[@]}" -eq 0 ]] then title="Arrêt" unset artist title album length fi # Si ce n’est pas un fichier sur le disque, c’est probablement # un stream, donc on ne remplace l’URL que pour les locaux. [[ -f "$HOME/Musique/${file}" ]] && file="https://fichiers.breizh.pm/Musique/${file}" # Notification du morceau dunstify -i mpd -r "$DUNST_ID" "MPD" "${artist:+${artist}$'\n'}${title}"$'\n'"${album}" # 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}" \ --data-urlencode "externalLink=${file}" \ ${length:+--data-urlencode "length=${length}"} \ 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