#!/usr/bin/env perl
use File::Find;
use Getopt::Long;
sub remember {
return unless -d $File::Find::name;
push @dir, $File::Find::name;
}
GetOptions("renew|r");
$dir = (-d $ARGV[0]) ? $ARGV[0] : "/home/music";
if ($opt_renew) {
$File::Find::no_chdir = 0;
find(\&remember, $dir);
open(FILE, ">$ENV{HOME}/.randomalbumcache") or die "$!";
print FILE join "\n", @dir;
close FILE;
} elsif (! -d $ARGV[0]) {
open(FILE, "$ENV{HOME}/.randomalbumcache") or die "$!";
chomp(@dir = <FILE>);
close FILE;
} else {
$File::Find::no_chdir = 0;
find(\&remember, $dir);
}
while (1) {
$randdir = $dir[rand @dir];
opendir(DIR, $randdir) or die "Dir $randdir could not be opened. Maybe you want to renew your cache?\n";
@files = grep { /(wma|mp3|ogg|flac|mpc)$/i } readdir(DIR);
rewinddir(DIR);
@bgs = grep { /(jpg|jpeg|png|bmp|gif)$/i } readdir(DIR);
closedir(DIR);
quotemeta($randdir);
if (@files) {
system('clear');
$randdir =~ /$dir\/(.*)$/;
$p = $1 ? $1 : $randdir;
print "\nSelected album: $p\n";
print "\n";
system("cd \"$randdir\"; mplayer -quiet *.ogg *.mp3 *.MP3 *.OGG .wma *.flac 2>&1 | grep ^Play");
exit if ($?);
} else {
print "Skipping $randdir, no audio files found\n";
}
}