MPDCron

Alors MPDCron c’est pas vraiment un client, c’est plus un autre deamon qui va vous permettre de monitorer certaines choses à propos de MPD.
En gros il est capable de faire tourner des scripts de votre cru à la détection de certains événements:

  • changement de chanson
  • play/pause/stop
  • changement du volume
  • changement de la playlist en cours
  • le statut actuel de mpd
  • non exhaustif…


Et il set un paquet de variables d’environnement avant de lancer votre script, variables qui sont documentées que vous pouvez bien évidemment utiliser comme :

  • le nom de la chanson
  • le path du fichier lu
  • sa durée
  • sa position actuelle dans la chanson
  •  plein d’autres infos

Cfr la documentation sur les hooks de MPDCron pour en savoir plus.

Dans mon cas, je voulais logguer combien de temps je passais sur chaque chanson avant d’éventuellement la zapper.
Si je zappe plusieurs fois une chanson donnée c’est très probable que je ne l’aime pas. Et donc pouvoir la détecter & la supprimer par après.

Le script me listant les chansons et combien de temps j’ai passé dessus.

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

use constant TRASHFILE => '>>'.$ENV{'HOME'}.'/mpd.log';
use constant LASTSONG => $ENV{'HOME'}.'/.mpdcron/mpd_last_song.log';
use constant LSREAD => '<'. LASTSONG;
use constant LSWRIT => '>'. LASTSONG;

unless ($ENV{'MPD_STATUS_STATE'} eq 'play') {
        die "not playing \n";
}

my $curSecs = `date +'%s'`;
my $curSongDur = $ENV{'MPD_SONG_DURATION'};
chomp $curSecs;

#read last entry into file
open FREAD, LSREAD or die $!;
my $prevSong = ;
close FREAD;

#retrieve data from it
if ($prevSong =~ /^(\d{1,4})\|(\d{10})\|(.*)/) {

        #perform computations
        my $befSongDur = $1;
        my $befSecs = $2;
        my $titleSong = $3;

        if ($ENV{'MPD_STATUS_ELAPSED_TIME'} == 0) { # new song detected
                my $difSecs = $curSecs - $befSecs;
                #save into log to trash
                open FTRASH, TRASHFILE or die $!;
                print FTRASH "$befSongDur|$difSecs|$titleSong\n";
                close FTRASH;
        }


}
#build new line into file
open FWRITE, LSWRIT or die $!;
print FWRITE "$curSongDur|$curSecs|$ENV{'MPD_SONG_URI'}\n";
close FWRITE;

 

Mon script init.d pour gérer le lancement automatique du programme au boot (init.d) étant ici.

Posted in Au quotidien by El Gnap at September 14th, 2013.
Tags: , , , , ,

Comments are closed.