commit:f536d47452e195106ea8b67e884ecd861d0da665
author:Chip Black
committer:Chip Black
date:Mon Jun 2 20:59:23 2008 -0500
parents:efd91b4082873b2c85fc388b812a2d2d494614b9
Added multi-playlist support to upod
diff --git a/upod.pl b/upod.pl
line changes: +63/-14
index 2afbc33..e2e7409
--- a/upod.pl
+++ b/upod.pl
@@ -1,27 +1,76 @@
 #!/usr/bin/perl
 use File::Basename;
+use File::Copy;
+use Getopt::Long;
 use strict;
 
 my $uthome = $ENV{HOME} . '/.utunes';
-my $outdir = "/home/yomiko/chip/dspod/playlist";
+my $outdir = $ENV{HOME} . "/dspod";
+my $name = "playlist";
+my $multi;
+my $proc;
+#$proc = sub ...
 
+GetOptions(
+	"outdir=s"	=> \$outdir,
+	"multi=s"	=> \$multi,
+	"name=s"	=> \$name,
+);
+
+mkdir $outdir unless -d $outdir;
+
+if ($multi) {
+	if ($multi =~ /[Kk]$/) {
+		$multi *= 10**3;
+	} elsif ($multi =~ /[Mm]$/) {
+		$multi *= 10**6;
+	} elsif ($multi =~ /[Gg]$/) {
+		$multi *= 10**9;
+	} elsif ($multi =~ /[Tt]$/) {
+		$multi *= 10**12;
+	}
+}
+
+my @files;
 open FILES, $ARGV[0] || "$ENV{HOME}/.utunes/playlist";
-my @files = <FILES>;
+chomp(@files = <FILES>);
 close FILES;
-chomp foreach @files;
-
-system("rm -rf $outdir");
-mkdir $outdir;
 
-open PLAYLIST, ">$outdir/list.m3u";
-print PLAYLIST "# Generated by musicload\n";
+my $n = 0;
+LIST: {
+	my $c = 0;
+	my ($dir, $playlist);
+	if ($multi) {
+		$dir = "$outdir/${name}_$n";
+		$playlist = "$outdir/${name}_$n/${name}_$n.m3u";
+	} else {
+		$dir = "$outdir/$name";
+		$playlist = "$outdir/$name/$name.m3u";
+	}
+	mkdir $dir unless -d $dir;
+	open PLAYLIST, ">$playlist";
+	print PLAYLIST "# Generated by upod\n";
 
-my $i = 0;
-foreach my $file (@files) {
-	my $outfile = sprintf("%04d_", $i++) . basename $file;
-	print PLAYLIST "$outfile\n";
-	symlink $file, "$outdir/$outfile"
-		or die "Symlink from $file to $outdir/$outfile failed";
+	my $i = 0;
+	while (@files) {
+		if ($multi && $c + -s $files[0] > $multi) {
+			$n++;
+			close PLAYLIST;	# I don't strictly have to close the
+					# file (it is automatically closed when
+					# PLAYLIST is reopened above), but if I
+					# don't some hapless C programmer will
+					# come across this and freak out.
+			goto LIST;
+		}
+		my $file = shift @files;
+		$c += -s $file;
+		my $outfile = sprintf("%04d_", $i++) . basename $file;
+		print PLAYLIST "$outfile\n";
+		die "$dir/$outfile already exists!" if -e "$dir/$outfile";
+		symlink $file, "$dir/$outfile"
+			or copy $file, "$dir/$outfile"
+			or die "Could not symlink or copy $file to $dir/$outfile";
+	}
 }
 
 close PLAYLIST;