Added REMOVEGRP for removing groups of songs.

git-svn-id: https://samskivert.googlecode.com/svn/trunk@596 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
mdb
2002-02-22 08:36:28 +00:00
parent b826311637
commit 145422b3ad
+47 -6
View File
@@ -1,6 +1,6 @@
#!/usr/bin/perl -w
#
# $Id: musicd,v 1.12 2002/02/11 18:25:44 mdb Exp $
# $Id: musicd,v 1.13 2002/02/22 08:36:28 mdb Exp $
#
# MP3 audio server. Manages playlists of mp3 files that live on a local
# filesystem. The playlists can be manipulated by connecting to the server
@@ -102,12 +102,12 @@ sub handle_client
my $path = $3;
# make sure the file they provided exists and is readable
if (-r $path) {
# if (-r $path) {
push @playlist, [ $eid, $sid, $path ];
print $cfh "200 Appended '$eid:$sid:$path' to playlist.\n";
} else {
print $cfh "404 Unable to read playlist candidate: '$path'\n";
}
# } else {
# print $cfh "404 Unable to read playlist candidate: '$path'\n";
# }
# if we're not playing a song, start playing now that we have a
# playlist with songs in it
@@ -115,6 +115,47 @@ sub handle_client
play_next_tune();
}
} elsif ($input =~ m/^REMOVEGRP (\d+) (\d+)/) {
my $sid = $1;
my $count = $2;
# remove the requested number of songs from the playlist starting
# with the first song that matches the specified songid
my $sidx = -1;
my $i;
my $yanked = 0;
for ($i = 0; $i < @playlist; $i++) {
if ($playlist[$i]->[1] == $sid) {
$sidx = $i;
splice(@playlist, $i, $count);
# adjust the playing index if necessary
if ($index < $i) {
# nothing to do here
} elsif ($index >= $i && $index < $i + $count) {
# we removed the playing tune
$yanked = 1;
$index = $i-1;
} else {
# we removed tunes from before the currently playing
# tune so we adjust index
$index -= $count;
}
last;
}
}
# now check to see if we've removed the playing tune
if ($yanked) {
play_next_tune();
}
if ($sidx >= 0) {
print $cfh "200 Removed $count entries from position $sidx.\n";
} else {
print $cfh "404 Unable to locate $sid in playlist.\n";
}
} elsif ($input =~ m/^REMOVE (\d+)/) {
my $sid = $1;
@@ -138,7 +179,7 @@ sub handle_client
}
if ($sidx >= 0) {
print $cfh "200 Removed $sid from position $i.\n";
print $cfh "200 Removed $sid from position $sidx.\n";
} else {
print $cfh "404 Unable to locate $sid in playlist.\n";
}