#!/usr/bin/env perl

# Tue Feb 21 22:42:30 CET 2006, jochem@vorm.net
# See http://vorm.net/Forevermaynotbelongenough

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";

# Create cache file or read from existing?
# Only create and read cache file for top level dir
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";
    }
}