Annotation of mp3/bin/showfiles.pl, Revision 1.2
1.1 andrew 1: #!/usr/bin/perl -w
1.2 ! andrew 2: # $RedRiver$
1.1 andrew 3: ########################################################################
4: # GenerateMP3HTML.pl *** Generates the HTML files for the playlist.
5: #
6: # 04-14-00
7: # Written by andrew fresh <andrew@mad-techies.org>
8: ########################################################################
9: use strict;
10: use diagnostics;
11:
12: #use MP3::Info;
13: #my qw/ @mp3s @dirs /;
14:
15: my $basedir = '/home/mp3/Sorted';
16: my $subdir = $ENV{'QUERY_STRING'};
17: my $addurl = 'addmp3playlist.pl';
18:
19: #######################################################################
20: # *** MAIN ***
21: #######################################################################
22:
23: if ($subdir) {
24: $subdir =~ s/%(..)/pack("c",hex($1))/ge;
25: } else {
26: $subdir ='';
27: }
28:
29: my @dirs = GetDirListing("$basedir/$subdir");
30: my @mp3s = GetMP3Listing("$basedir/$subdir");
31:
32:
33: print "Content-Type: text/html\n\n";
34: print "<html>\n<head>\n\t<meta HTTP-EQUIV='Pragma' CONTENT='no-cache'> <title>' . $subdir . '</title>\n<body>\n\n";
35:
36: #Print_Nav();
37:
38: if ($subdir) {
39: print "<h3>";
40: SplitDir($subdir);
41: print " - <font size=\"-2\"><a href=\"" . "showall.pl" . "\?" . EncodeURL("$subdir") . "\">All</a></font>";
42: print " - <font size=\"-2\"><a href=\"" . "addall.pl" . "\?" . EncodeURL("$subdir") . "\">Add</a></font><br>";
43: print "</h3>\n";
44: print "<hr>\n";
45: }
46:
47: if (@dirs) {
48: foreach my $dir (@dirs) {
49: print "<a href=\"" . MyName() . "\?" . EncodeURL("$subdir/$dir") . "\">$dir</a> ";
50: print "- <font size=\"-2\"><a href=\"" . "showall.pl" . "\?" . EncodeURL("$subdir/$dir") . "\">All</a></font>";
51: print "- <font size=\"-2\"><a href=\"" . "addall.pl" . "\?" . EncodeURL("$subdir/$dir") . "\">Add</a></font><br>";
52: }
53: }
54:
55: if (@mp3s) {
56: print "<ul>\n";
57: foreach my $mp3 (@mp3s) {
58: my $songtitle = $mp3;
59: my $directory = $subdir;
60: $directory =~ s#.*/(.*)$#$1#;
61: # print "dir ", $directory;
62: # print "song ", $songtitle;
63: if ($songtitle =~ /\Q$directory\E\s/i) {
64: $songtitle =~ s/^.*- (\d{2}(\.| -) .*)/$1/i;
65: }
66:
67: print "\t<li>";
68: if ($songtitle =~ /\.mp3$/i) {
69: print "MP3: ";
70: } elsif ($songtitle =~ /\.ogg$/i) {
71: print "OGG: ";
72: }
73:
74: $songtitle =~ s/\.(mp3|ogg)$//i;
75: print "<a href=\"$addurl\?" . EncodeURL("$subdir/$mp3") . "\" target=\"bottom\">$songtitle</a></li>\n";
76: }
77: print "</ul>\n";
78: }
79:
80: print "</body>\n</head>\n</html>\n";
81:
82:
83:
84:
85: ########################################################################
86: # *** SUBS ***
87: ########################################################################
88:
89: ########################################################################
90: # *** GetDirListing: reads the list of directories
91: sub GetDirListing {
92: my $DIR = shift;
93: my @directories;
94: my @songs;
95: opendir DIR, $DIR or bail("Unable to opendir $$!");
96: @directories = grep { !/^\./ && -d "$DIR/$_" } readdir(DIR);
97: closedir DIR;
98:
99: return sort @directories;
100: }
101:
102:
103:
104:
105: ########################################################################
106: # *** GetMP3Listing: reads the list of directories
107: sub GetMP3Listing {
108: my $DIR = shift;
109: my @songs;
110: opendir DIR, $DIR or bail("Unable to opendir $$!");
111: @songs = grep /\.(mp3|ogg)$/i, readdir(DIR);
112: closedir DIR;
113:
114: return sort @songs;
115: }
116:
117:
118:
119:
120:
121: ########################################################################
122: # *** EncodeURL: %encodes the parameters of the URL
123: sub EncodeURL {
124: my $strURL = shift;
125: $strURL =~ s/(\W)/sprintf("%%%x", ord($1))/eg;
126: return $strURL;
127: }
128:
129:
130:
131:
132: #########################################################################
133: # My name
134: sub MyName {
135: my @filename = (split /\//, $0);
136: pop @filename;
137: }
138:
139:
140:
141: #########################################################################
142: # SplitDir
143: sub SplitDir {
144: my $dir = shift;
145: substr($dir, 0, 1) = "";
146: my @filename = (split /\//, $dir);
147: my $file;
148: my $returntext;
149: my $i;
150:
151:
152: if ($dir ne " ") {
153: for ($i=0;$i<=$#filename;$i++) {
154: my $j;
155: my $url = "";
156: for ($j=0;$j<=$i;$j++) {
157: $url = "$url/$filename[$j]";
158: }
159: print "/<a href=\"showfiles.pl\?" . EncodeURL($url) . "\">$filename[$i]</a>";
160:
161: }
162: } else {
163: print "/";
164: }
165: }
166:
167:
168:
169:
170: #######################################################################
171: # Bail: this subrouting dies and displays the error to the browser.
172: # gotten from the example in the O'Reilly
173: # _Learning_Perl_on_Win32_Systems_
174: sub bail {
175: my $error = shift;
176: print "\n\nUnexpected Error: <b>$error</b><br>\n";
177: print "In " . __FILE__ . "\n";
178: die;
179: exit;
180: }
181: sub Print_Nav
182: {
183: open FILE, 'nav.inc' or die "\n\ncouldn't open FILE nav.inc: $!";
184: while (<FILE>) {
185: print;
186: }
187: close FILE;
188: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>