Store the entry and song id in the playlist along with the path and allow

things to be removed from the playlist based on songid.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@169 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
mdb
2001-07-12 22:32:56 +00:00
parent 29ea556ea6
commit 1928c0eec5
+38 -12
View File
@@ -1,9 +1,9 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
# #
# $Id: musicd,v 1.5 2001/06/05 16:52:55 mdb Exp $ # $Id: musicd,v 1.6 2001/07/12 22:32:56 mdb Exp $
# #
# MP3 audio server. Manages playlists of mp3 files that live on a local # MP3 audio server. Manages playlists of mp3 files that live on a local
# filesystem. The playlsits can be manipulated by connecting to the server # filesystem. The playlists can be manipulated by connecting to the server
# on a port and issuing simple text commands. # on a port and issuing simple text commands.
use strict; use strict;
@@ -94,14 +94,16 @@ sub handle_client
} }
# parse and process the command # parse and process the command
if ($input =~ m/^APPEND (.*)/) { if ($input =~ m/^APPEND (\d+) (\d+) (.*)/) {
# append this song to the playlist # append this song to the playlist
my $path = $1; my $eid = $1;
my $sid = $2;
my $path = $3;
# make sure the file they provided exists and is readable # make sure the file they provided exists and is readable
if (-r $path) { if (-r $path) {
push @playlist, $path; push @playlist, [ $eid, $sid, $path ];
print $cfh "200 Appended '$path' to playlist.\n"; print $cfh "200 Appended '$eid:$sid:$path' to playlist.\n";
} else { } else {
print $cfh "404 Unable to read playlist candidate: '$path'\n"; print $cfh "404 Unable to read playlist candidate: '$path'\n";
} }
@@ -112,6 +114,26 @@ sub handle_client
play_next_tune(); play_next_tune();
} }
} elsif ($input =~ m/^REMOVE (\d+)/) {
# remove this songid from the playlist
my $sid = $1;
my $sidx = -1;
my $i;
for ($i = 0; $i < @playlist; $i++) {
if ($playlist[$i]->[1] == $sid) {
$sidx = $i;
splice(@playlist, $i, 1);
last;
}
}
if ($sidx >= 0) {
print $cfh "200 Removed $sid from position $i.\n";
} else {
print $cfh "404 Unable to locate $sid in playlist.\n";
}
} elsif ($input =~ m/^CLEAR/) { } elsif ($input =~ m/^CLEAR/) {
# clear out the current playlist and reset the playing index # clear out the current playlist and reset the playing index
@playlist = (); @playlist = ();
@@ -120,15 +142,15 @@ sub handle_client
} elsif ($input =~ m/^PLAYLIST/) { } elsif ($input =~ m/^PLAYLIST/) {
print $cfh "200 Playlist songs: " . @playlist . " current: " . print $cfh "200 Playlist songs: " . @playlist . " current: " .
(defined $playing ? $playing : "<none>") . "\n"; (defined $playing ? $playing->[1] : "<none>") . "\n";
my $path; my $entry;
foreach $path (@playlist) { foreach $entry (@playlist) {
print $cfh "$path\n"; print $cfh join(":", @{$entry}) . "\n";
} }
} elsif ($input =~ m/^PLAYING/) { } elsif ($input =~ m/^PLAYING/) {
print $cfh "200 Currently playing: " . print $cfh "200 Currently playing: " .
(defined $playing ? $playing : "<none>") . "\n"; (defined $playing ? $playing->[1] : "<none>") . "\n";
} elsif ($input =~ m/^STOP/) { } elsif ($input =~ m/^STOP/) {
$mp3->stop(); $mp3->stop();
@@ -164,6 +186,10 @@ sub handle_client
print $cfh "200 Bye bye.\n"; print $cfh "200 Bye bye.\n";
return 0; return 0;
} elsif ($input =~ m/^EXIT/) {
print $cfh "200 Bye bye.\n";
exit(0);
} else { } else {
print $cfh "500 Unknown command: '$input'\n"; print $cfh "500 Unknown command: '$input'\n";
} }
@@ -186,7 +212,7 @@ sub play_next_tune
$playing = $playlist[$index]; $playing = $playlist[$index];
# open it # open it
$mp3->open($playing); $mp3->open($playing->[2]);
# and play it # and play it
$mp3->play(); $mp3->play();