#!/usr/bin/perl -w ######################################################################## # showall.pl *** Displays all MP3's in all subdirs # # 04-27-00 # Written by andrew fresh ######################################################################## use strict; use diagnostics; #use MP3::Info; #my qw/ %mp3s %dirs /; my $basedir = '/home/mp3/Sorted'; my $subdir = $ENV{'QUERY_STRING'}; my $playlist = '/var/www/mp3/playlist/playlist.lst'; my $countdir = 0; my $countmp3 = 0; ####################################################################### # *** MAIN *** ####################################################################### if ($subdir) { $subdir =~ s/%(..)/pack("c",hex($1))/ge; } else { $subdir =''; } #$basedir = $basedir . "/" . $subdir; print "Content-Type: text/html\n\n"; print "\n\n\t ' . $subdir . '\n\n\n"; #Print_Nav(); print "

"; SplitDir($subdir); print "

\n
\n"; #@mp3s = GetMP3Listing("$basedir/$subdir"); GetDirListing("$subdir"); #GetDirListing(""); print "
\n

Total Directories displayed: $countdir
\n"; print "Total MP3's Added: $countmp3

\n"; #if (%dirs) { # my $count; # my @sorted = sort { lc($dirs{$a}) cmp lc($dirs{$b}) } (keys %dirs); # foreach my $dir (@sorted) { # print "$dirs{$dir}
"; # $count++; # } # print "Total dirs displayed: $count

\n"; #} #if (%mp3s) { # print "

\n"; # print "Total MP3's Displayed: $count

\n"; #} print "\n\n\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 "

\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 "/$filename[$i]"; } } 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: $error
\n"; print "In " . __FILE__ . "\n"; die; exit; } sub AddSong { my $filename = shift; $filename =~ s/%(..)/pack("c",hex($1))/ge; if ($filename) { print "Added $filename
\n"; open PLAYLIST, ">>$playlist" or bail("unable to open PLAYLIST: $!"); print PLAYLIST "$filename\n"; close PLAYLIST or bail("unable to close PLAYLIST: $!"); } else { print "

You need to pass a song

"; } } sub Print_Nav { open FILE, 'nav.inc' or die "\n\ncouldn't open FILE nav.inc: $!"; while () { print; } close FILE; }