#!/usr/bin/perl -w
use strict;

#warning: recursive ogginfo: 
#find mp3/ -name '*.ogg' |xargs ogginfo >ogginfo-index
#todo: get ordering from .m3u's.

my $dir = "/home/bfields/mp3/";
my($f);
my @albums = ();
foreach $f (<$dir/*.m3u>) {
	#print "$f\n";
	open(M3U, "<$f");
	process_album(\*M3U);
}

sub process_album
{
	my $m3u = shift();

	my($g, $l);
	my $album;
	$album->{"tracks"} = [];
	while ($g = <$m3u>) {
		foreach $l (`ogginfo $dir/$g`) {
			process_track($album, $l);
		}
	}
	#printf("album: $album\n");
	print_album($album);
}

sub process_track
{
	my $album = shift();
	my $l = shift();

	if ($l =~ /^\s*([a-z]*)=(.*)$/) {
		if ($1 eq "title") {
			push(@{$album->{"tracks"}}, $2);
		} else {
			if (defined($album->{$1})) {
				if ($album->{$1} ne $2) {
					print(STDERR "ignoring $2");
				}
			}
			$album->{$1} = $2;
		}
	}
}

sub print_album
{
	my $album = shift();
	my($track, $key);

	foreach $key (keys(%$album)) {
		if ($key ne "tracks") {
			print("$key = $album->{$key}\n");
		}
	}
	foreach $track (@{$album->{"tracks"}}) {
		print("\t$track\n");
	}
}
