#!/usr/bin/perl
# centralized music control script
# Matt Sparks, http://f0rked.com
# 20051215
#
# ./music.pl <play|stop|next|prev|info|add <file> [file] [..]>
use strict;
use Switch;
use File::Basename;

# set this to your player (xmms or mocp)
my $player="xmms";

my $cmd=shift @ARGV;
my $rest=join ' ',@ARGV;

my $exec;

switch($player) {
    case("xmms") {
        switch($cmd) {
            case("play") { $exec="xmms -t"; }
            case("stop") { $exec="xmms -s"; }
            case("next") { $exec="xmms -f"; }
            case("prev") { $exec="xmms -r"; }
            case("add")  { $exec="xmms -e $rest"; }
            case("info") {
                chomp(my $info=`xmms-announcer -f '%s (%t)'`);
                print ">> $info\n";
                exit(0);
            }
        }                
    }
    case("mocp") {
        switch($cmd) {
            case("play") { 
                `mocp -i`=~/State: (.+)\s/m;
                if ($1 eq "PAUSE" or $1 eq "PLAY") {
                    $exec="mocp -G";
                } else {
                    $exec="mocp -p";
                }
            }
            case("stop") { $exec="mocp -s"; }
            case("next") { $exec="mocp -f"; }
            case("prev") { $exec="mocp -r"; }
            case("add")  { $exec="mocp -a $rest"; }
            case("info") {
                my $info=`mocp -i`;
                my($file) = $info =~ /^File: (.*?)\n/ms;
                my($title) = $info =~ /^Title: (.*?)\n/ms;
                my($totaltime) = $info =~ /^TotalTime: (.*?)\n/ms;
                my($currenttime) = $info =~ /^CurrentTime: (.*?)\n/ms;
                my($timeleft) = $info =~ /^TimeLeft: (.*?)\n/ms;
                my($bitrate) = $info =~ /^Bitrate: (.*?)\n/ms;
                my $str=($title) ? $title : basename($file);
                if ($currenttime && $totaltime) {
                    print ">> $str ($currenttime/$totaltime\[$bitrate\])\n";
                }
                elsif ($currenttime) {
                    print ">> $str ($currenttime/[$bitrate])\n";
                }
                else {
                    print ">> $str [$bitrate]\n";
                }
                exit(0);
            }
        } 
    }
}

`$exec`;
    

