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