/usr/local/CPAN/MP3-Album/MP3/Album/Layout/Fetcher/CDDB.pm


package MP3::Album::Layout::Fetcher::CDDB;

use strict;
use MP3::Album::Layout;
use CDDB;
use Data::Dumper;

sub fetch {
	   my $c = shift;
	   my %a = @_;

	   my @results = ();

	   $a{cddb_host}  = $a{cddb_host}  || 'freedb.freedb.org';
	   $a{cddb_port}  = $a{cddb_port}  || 8880;
	   $a{cddb_login} = $a{cddb_login} || $ENV{USER};


           my $cddb  = new CDDB( Host  => $a{cddb_host},
                                 Port  => $a{cddb_port},
                                 Login => $a{cddb_login});
           if (!$cddb) {
                $@ = "error connecting to cddb";
                return undef;
           }

	   return [] unless ($a{album}->{cddb_query}->{discid} && $a{album}->{cddb_query}->{frames} && $a{album}->{cddb_query}->{disctime});

           my @cddb_discs = $cddb->get_discs( $a{album}->{cddb_query}->{discid},
                                           $a{album}->{cddb_query}->{frames},
                                           $a{album}->{cddb_query}->{disctime}
                                         );
           foreach my $disc (@cddb_discs) {
                my $disc_info = $cddb->get_disc_details($disc->[0], $disc->[1]);
		last unless $disc_info;
                my ($artist,$title) = split(/\s*\/\s*/, $disc->[2]);
                my $layout = MP3::Album::Layout->new();
                $layout->artist($artist);
                $layout->title($title);
                $layout->genre($disc->[0]);

                my $k = 0;
                foreach my $t (@{$disc_info->{ttitles}}) {
                  $layout->add_track( title => $t, artist => $artist, lenght=> $disc_info->{seconds}->[$k]);
		  $k++;
                }
                push @results, $layout;
	  }
	
	  return \@results;
}

1;