File: [local] / mp3 / bin / createfulllist.pl (download)
Revision 1.4, Fri Mar 26 13:21:55 2010 UTC (14 years, 5 months ago) by andrew
Branch: MAIN
CVS Tags: HEAD Changes since 1.3: +3 -2 lines
init vars
|
#!/usr/bin/perl -w
# $RedRiver: createfulllist.pl,v 1.3 2007/02/08 20:04:03 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/ $basedir %mp3s %dirs $countdir $countmp3 $fulllist /;
my $basedir = '/home/mp3/Sorted';
my $countdir = 0;
my $countmp3 = 0;
#######################################################################
# *** MAIN ***
#######################################################################
my $query_string = $ENV{'QUERY_STRING'} || q{};
my ($prefix, $subdir) = split /\&/, $query_string;
if ($subdir) {
$subdir =~ s/%(..)/pack("c",hex($1))/ge;
} else {
$subdir ='';
}
if ($prefix) {
$prefix =~ s/%(..)/pack("c",hex($1))/ge;
} else {
$prefix ='';
}
my $playlist = '/var/www/mp3/playlist/' . $prefix . 'playlist.lst';
my $fulllist = '/var/www/mp3/playlist/' . $prefix . 'fulllist.lst';
my $newlist = '/var/www/mp3/playlist/' . $prefix . 'newlist.lst';
#$basedir = $basedir . "/" . $subdir;
print "Content-Type: text/html\n\n";
print "<html>\n<head>\n\t<meta HTTP-EQUIV='Pragma' CONTENT='no-cache'> <title>Generating new full list of mp3's</title>\n<body>\n\n";
#if (defined $ENV{'REMOTE_ADDR'}) {
# Print_Nav();
#}
print "<h3>";
SplitDir($subdir);
print "</h3>\n<hr>\n";
#@mp3s = GetMP3Listing("$basedir/$subdir");
Remove_Old_Lists();
GetDirListing("$subdir");
Move_Old_List($fulllist);
Get_New_MP3s($fulllist);
#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 = sort 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 DIR: $!");
my @temp = sort 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", "$fulllist.new");
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 = sort 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;
my $list = shift;
if ($filename) {
# $filename =~ s/%(..)/pack("c",hex($1))/ge;
chomp $filename;
print "Added $filename<br>\n";
open PLAYLIST, ">>$list" or bail("unable to open PLAYLIST '$list': $!");
print PLAYLIST "$filename\n";
close PLAYLIST or bail("unable to close PLAYLIST: $!");
} else {
print "<h1>You need to pass a song</h1>";
}
}
sub Move_Old_List
{
my $file = shift;
if (-e $file) {
if (-e "$file.old") {
unlink "$file.old" or die "Couldn't delete old list $file.old: $!";
}
rename($file, "$file.old") or die "Couldn't rename file $file: $!";
}
}
sub Get_New_MP3s
{
my $file = shift;
if (-e "$file.new") {
if (-e $file) {
unlink($file) or die "couldn't unlink $newlist: $!";
}
rename("$file.new", $file) or die "Couldn't rename $file: $!";
if (-e "$file.old") {
my %seen;
open FILE, "$file.old" or die "Couldn't open file $file.old: $!";
@seen{ <FILE> } = ();
close FILE;
open FILE, $file or die "couldn't open FILE $file: $!";
while (<FILE>) {
unless (exists $seen{$_}) {
AddSong($_, $playlist);
print "to the playlist<br>\n";
AddSong($_, $newlist);
print "to the list of new files<br>\n";
}
}
close FILE;
}
}
}
sub Remove_Old_Lists
{
if (-e $newlist) {
open FILE, ">$newlist" or die "couldn't unlink $newlist: $!";
close FILE;
}
if (-e "$fulllist.new") {
unlink("$fulllist.new") or die "couldn't unlink $fulllist.new: $!";
}
}
sub Print_Nav
{
open FILE, 'nav.inc' or die "\n\ncouldn't open FILE nav.inc: $!";
while (<FILE>) {
print;
}
close FILE;
}