[BACK]Return to createfulllist.pl CVS log [TXT][DIR] Up to [local] / mp3 / bin

File: [local] / mp3 / bin / createfulllist.pl (download)

Revision 1.4, Fri Mar 26 13:21:55 2010 UTC (14 years, 1 month 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;
}