From ae96ef4ca16e18d914da701c946da1ef6925bfc4 Mon Sep 17 00:00:00 2001 From: Ian Beckwith Date: Mon, 11 Oct 2010 00:59:16 +0100 Subject: [PATCH] /ALL fixes --- lib/ID3FS/Path.pm | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/lib/ID3FS/Path.pm b/lib/ID3FS/Path.pm index ee8353d..cee1a45 100644 --- a/lib/ID3FS/Path.pm +++ b/lib/ID3FS/Path.pm @@ -12,7 +12,7 @@ use ID3FS::Path::Node; our ($STATE_INVALID, $STATE_ROOT, $STATE_TAG, $STATE_TAGVAL, $STATE_BOOLEAN, $STATE_ALBUMS, $STATE_TRACKLIST, - $STATE_FILE)=(0..7); + $STATE_FILE, $STATE_ALL)=(0..8); our %priorities=( "OR" => 0, "AND" => 1, "NOT" => 2 ); @@ -72,7 +72,11 @@ sub dirents my $state=$self->state(); # print "DIRENTS: STATE: $state\n"; # print "DIRENTS: FILE: $self->{path}\n"; - if($state==$STATE_TAG || $state==$STATE_TAGVAL) + if($state==$STATE_ALL) + { + push(@dents, qw(TRACKS NOARTIST), $self->artists()); + } + elsif($state==$STATE_TAG || $state==$STATE_TAGVAL) { my $tag=$self->tail(); if($state==$STATE_TAG && @@ -84,8 +88,7 @@ sub dirents } else { - @dents=(qw(AND OR TRACKS NOARTIST), - $self->artists()); + push(@dents, qw(AND OR TRACKS NOARTIST), $self->artists()); } } elsif($state==$STATE_BOOLEAN) @@ -143,7 +146,7 @@ sub parse # print "SM: ROOT: $name\n"; if($name eq "ALL") { - $self->state($STATE_TAG); + $self->state($STATE_ALL); } elsif($name eq "NOT") { @@ -293,6 +296,30 @@ sub parse # Can't have anything after a filename $self->state($STATE_INVALID); } + elsif($state==$STATE_ALL) + { + if($name eq "TRACKS") + { + $self->state($STATE_TRACKLIST); + } + elsif($name eq "NOARTIST") + { + $self->state($STATE_TRACKLIST); + } + else + { + my $artist=ID3FS::PathElement::Artist->new($self->{db}, $name); + if($artist) + { + push(@{$self->{elements}}, $artist); + $self->state($STATE_ALBUMS); + } + else + { + $self->state($STATE_INVALID); + } + } + } else { print "SM: ERROR: UNKNOWN STATE: $self->{state}\n"; -- 2.11.0