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 );
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 &&
}
else
{
- @dents=(qw(AND OR TRACKS NOARTIST),
- $self->artists());
+ push(@dents, qw(AND OR TRACKS NOARTIST), $self->artists());
}
}
elsif($state==$STATE_BOOLEAN)
# print "SM: ROOT: $name\n";
if($name eq "ALL")
{
- $self->state($STATE_TAG);
+ $self->state($STATE_ALL);
}
elsif($name eq "NOT")
{
# 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";