From: Ian Beckwith Date: Mon, 11 Oct 2010 02:37:27 +0000 (+0100) Subject: fix handling of unset artist/album; unset years default to UNKNOWN X-Git-Tag: debian/1.0-1~107 X-Git-Url: http://erislabs.net/gitweb/?p=id3fs.git;a=commitdiff_plain;h=421a6e39b3b0eb3b160e5acd882e2c3805842249 fix handling of unset artist/album; unset years default to UNKNOWN --- diff --git a/lib/ID3FS/DB.pm b/lib/ID3FS/DB.pm index aa9eaf1..3e91bdd 100644 --- a/lib/ID3FS/DB.pm +++ b/lib/ID3FS/DB.pm @@ -259,13 +259,11 @@ sub add $self->add_tag($file_id, @$tag); } - if($self->ok($year)) + $year="UNKNOWN" unless($self->ok($year)); + $self->add_tag($file_id, "year", $year); + if($year=~/^(\d\d\d)\d$/) { - $self->add_tag($file_id, "year", $year); - if($year=~/^(\d\d\d)\d$/) - { - $self->add_tag($file_id, "decade", "${1}0s"); - } + $self->add_tag($file_id, "decade", "${1}0s"); } if($self->ok($v1genre)) diff --git a/lib/ID3FS/Path.pm b/lib/ID3FS/Path.pm index 68c0ab8..46bac15 100644 --- a/lib/ID3FS/Path.pm +++ b/lib/ID3FS/Path.pm @@ -132,7 +132,7 @@ sub parse my @parts=@{$self->{components}}; my($tag, $tagval); $self->{elements}=[]; - while(my $name=shift @parts) + while(defined(my $name=shift @parts)) { # print "NAME: $name\n"; my $state=$self->state(); @@ -540,7 +540,7 @@ sub tags $sql .= "WHERE " . join(' AND ', @andclauses) . "\n"; } $sql .= "GROUP BY tags.name;"; - print "SQL: $sql\n"; + print "SQL(TAGS): $sql\n"; my @tagnames=$self->{db}->cmd_firstcol($sql); print "SUBNAMES: ", join(', ', @tagnames), "\n"; return(@tagnames); @@ -572,7 +572,7 @@ sub artists "INNER JOIN artists ON files.artists_id=artists.id\n" . "WHERE artists.name != ''\n" . "GROUP BY artists.name;"); - print "SQL: $sql\n"; + print "SQL(ARTISTS): $sql\n"; my @tagnames=$self->{db}->cmd_firstcol($sql); print "ARTISTS: ", join(', ', @tagnames), "\n"; return(@tagnames); @@ -626,9 +626,9 @@ sub artist_tracks $self->tags_subselect() . "\t) AS subselect\n" . "INNER JOIN files ON subselect.files_id=files.id\n" . - "INNER JOIN artists ON artists.id=files.artists_id\n\t" . - "INNER JOIN albums ON albums.id=files.albums_id\n\t" . - "WHERE artists.id=? AND albums.name=''\n\t" . + "INNER JOIN artists ON artists.id=files.artists_id\n" . + "INNER JOIN albums ON albums.id=files.albums_id\n" . + "WHERE artists.id=? AND albums.name=''\n" . "GROUP BY files.name\n"); print "ARTIST_TRACKS SQL: $sql\n"; my @names=$self->{db}->cmd_firstcol($sql, $artist_id); @@ -670,14 +670,18 @@ sub tracks } return $self->album_tracks($artist_id, $tail->{id}); } - my $sql=("SELECT files.name\n" . "\tFROM (\n" . $self->tags_subselect() . "\t) AS subselect\n" . "INNER JOIN files ON files.id=subselect.files_id\n" . - "GROUP BY files.name;"); - print "SQL: $sql\n"; + "INNER JOIN artists ON files.artists_id=artists.id\n"); + if($self->{components}->[$#{$self->{components}}] eq "NOARTIST") + { + $sql .= "WHERE artists.name =''\n"; + } + $sql .= "GROUP BY files.name;"; + print "TRACKS SQL: $sql\n"; my @names=$self->{db}->cmd_firstcol($sql); print "TRACKS: ", join(', ', @names), "\n"; return(@names);