Return to addall.pl CVS log | Up to [local] / mp3 / bin |
File: [local] / mp3 / bin / addall.pl (download)
Revision 1.3, Thu Feb 8 20:04:03 2007 UTC (17 years, 5 months ago) by andrew
First shot at making multiple jukeboxes from the same files. |
#!/usr/bin/perl -w # $RedRiver: addall.pl,v 1.2 2006/08/12 00:14:53 andrew Exp $ ######################################################################## # showall.pl *** Displays all MP3's in all subdirs # # 04-27-00 # Written by andrew fresh <andrew@mad-techies.org> ######################################################################## use strict; use diagnostics; #use MP3::Info; #my qw/ %mp3s %dirs /; my $basedir = '/home/mp3/Sorted'; my $countdir = 0; my $countmp3 = 0; ####################################################################### # *** MAIN *** ####################################################################### my ($prefix, $subdir, $playlist) = split /\&/, $ENV{'QUERY_STRING'}; if ($subdir) { $subdir =~ s/%(..)/pack("c",hex($1))/ge; } else { $subdir =''; } if ($playlist) { $playlist =~ s/%(..)/pack("c",hex($1))/ge; } else { $playlist = 'playlist.lst'; } if ($prefix) { $prefix =~ s/%(..)/pack("c",hex($1))/ge; } else { $prefix =''; } my $playlist = '/var/www/mp3/playlist/' . $prefix . $playlist; #$basedir = $basedir . "/" . $subdir; print "Content-Type: text/html\n\n"; print "<html>\n<head>\n\t<meta HTTP-EQUIV='Pragma' CONTENT='no-cache'> <title>' . $subdir . '</title>\n<body>\n\n"; #Print_Nav(); print "<h3>"; SplitDir($subdir); print "</h3>\n<hr>\n"; #@mp3s = GetMP3Listing("$basedir/$subdir"); GetDirListing("$subdir"); #GetDirListing(""); print "<hr>\n<h3>Total Directories displayed: $countdir<br>\n"; print "Total MP3's Added: $countmp3</h3>\n"; #if (%dirs) { # my $count; # my @sorted = sort { lc($dirs{$a}) cmp lc($dirs{$b}) } (keys %dirs); # foreach my $dir (@sorted) { # print "<a href=\"showfiles.pl\?" . EncodeURL($prefix) . '&' . EncodeURL("$dir/$dirs{$dir}") . "\">$dirs{$dir}</a><br>"; # $count++; # } # print "Total dirs displayed: $count<p>\n"; #} #if (%mp3s) { # print "<ul>\n"; # my @sorted = sort { lc($mp3s{$a}) cmp lc($mp3s{$b}) } (keys %mp3s); # my $count; # foreach my $mp3dir (sort keys %mp3s) { # foreach $mp3 (@{ $mp3s{$mp3dir} }) { # print "\t<li>Song: <a href=\"$addurl\?" . EncodeURL($prefix) . '&' . EncodeURL("$mp3dir/$mp3") . "\" target=\"bottom\">$mp3</a></li>\n"; # $count++; # } # } # print "</ul>\n"; # print "Total MP3's Displayed: $count<p>\n"; #} print "</body>\n</head>\n</html>\n"; ######################################################################## # *** SUBS *** ######################################################################## ######################################################################## # *** GetDirListing: reads the list of directories sub GetDirListing { my $DIR = shift; $DIR ||= ''; my @directories; my @songs; opendir DIR, "$basedir/$DIR" or bail("Unable to opendir $$!"); @directories = grep { !/^\./ && -d "$basedir$DIR/$_" } readdir(DIR); closedir DIR; print "<ul>\n"; foreach my $directory (@directories) { # $dirs{"$DIR/$directory"} = $directory; print "<li><a href=\"showfiles.pl\?" . EncodeURL($prefix) . '&' . EncodeURL("$DIR/$directory") . "\">$directory</a>"; print " - <font size=\"-1\"><a href=\"" . "showall.pl" . "\?" . EncodeURL($prefix) . '&' . EncodeURL("$DIR/$directory") . "\">All</a></font></li>"; $countdir++; my @curdir = GetDirListing("$DIR/$directory"); # push @dirs, @curdir; # print "<a href=\"showfiles.pl\?" . EncodeURL($prefix) . '&' . EncodeURL("$DIR/$directory") . "\">$directory</a><br>"; } opendir DIR, "$basedir/$DIR" or bail("Unable to opendir $$!"); my @temp = grep /\.(mp3|ogg)$/i, readdir(DIR); # $mp3s{"$DIR/$directory"} = [ @temp ]; print "<ul>\n"; foreach my $mp3 (@temp) { # print "\t<li>Song: <a href=\"$addurl\?" . EncodeURL($prefix) . '&' . EncodeURL("$DIR/$mp3") . "\" target=\"bottom\">$mp3</a></li><br>\n"; print "\t<li>"; AddSong("$DIR/$mp3"); print "</li>\n"; $countmp3++; } print "</ul>\n"; closedir DIR; print "</ul>\n"; return @directories; } ######################################################################## # *** GetMP3Listing: reads the list of directories sub GetMP3Listing { my $DIR = shift; my @songs; opendir DIR, $DIR or bail("Unable to opendir $$!"); @songs = grep /\.(mp3|ogg)$/i, readdir(DIR); closedir DIR; return @songs; } ######################################################################## # *** EncodeURL: %encodes the parameters of the URL sub EncodeURL { my $strURL = shift; $strURL =~ s/(\W)/sprintf("%%%x", ord($1))/eg; return $strURL; } ######################################################################### # My name sub MyName { my @filename = (split /\//, $0); pop @filename; } ######################################################################### # SplitDir sub SplitDir { my $dir = shift; substr($dir, 0, 1) = ""; my @filename = (split /\//, $dir); my $file; my $returntext; my $i; if ($dir ne " ") { for ($i=0;$i<=$#filename;$i++) { my $j; my $url = ""; for ($j=0;$j<=$i;$j++) { $url = "$url/$filename[$j]"; } print "/<a href=\"showfiles.pl\?" . EncodeURL($prefix) . '&' . EncodeURL($url) . "\">$filename[$i]</a>"; } } else { print "/"; } } ####################################################################### # Bail: this subrouting dies and displays the error to the browser. # gotten from the example in the O'Reilly # _Learning_Perl_on_Win32_Systems_ sub bail { my $error = shift; print "\n\nUnexpected Error: <b>$error</b><br>\n"; print "In " . __FILE__ . "\n"; die; exit; } sub AddSong { my $filename = shift; $filename =~ s/%(..)/pack("c",hex($1))/ge; if ($filename) { print "Added $filename<br>\n"; open PLAYLIST, ">>$playlist" or bail("unable to open PLAYLIST: $!"); print PLAYLIST "$filename\n"; close PLAYLIST or bail("unable to close PLAYLIST: $!"); } else { print "<h1>You need to pass a song</h1>"; } } sub Print_Nav { open FILE, 'nav.inc' or die "\n\ncouldn't open FILE nav.inc: $!"; while (<FILE>) { print; } close FILE; }