/ALL fixes
authorIan Beckwith <ianb@erislabs.net>
Sun, 10 Oct 2010 23:59:16 +0000 (00:59 +0100)
committerIan Beckwith <ianb@erislabs.net>
Sun, 10 Oct 2010 23:59:16 +0000 (00:59 +0100)
lib/ID3FS/Path.pm

index ee8353d..cee1a45 100644 (file)
@@ -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";