merge ARTIST and TAG states
[id3fs.git] / lib / ID3FS / Path.pm
index 36eaba2..d2226ff 100644 (file)
@@ -11,8 +11,8 @@ use ID3FS::PathElement::Tag;
 use ID3FS::PathElement::Tagval;
 
 our ($STATE_INVALID, $STATE_ROOT, $STATE_TAG, $STATE_TAGVAL,
-     $STATE_BOOLEAN, $STATE_ARTISTS, $STATE_ALBUMS, $STATE_TRACKLIST,
-     $STATE_FILE)=(0..9);
+     $STATE_BOOLEAN, $STATE_ALBUMS, $STATE_TRACKLIST,
+     $STATE_FILE)=(0..7);
 
 sub new
 {
@@ -31,14 +31,21 @@ sub new
 sub isdir
 {
     my($self)=@_;
-    if(($self->state() eq $STATE_FILE) ||
-       ($self->state() eq $STATE_INVALID))
+    if(($self->state() == $STATE_FILE) ||
+       ($self->state() == $STATE_INVALID))
     {
        return 0;
     }
     return 1;
 }
 
+sub isfile
+{
+    my($self)=@_;
+    return 1 if($self->state() == $STATE_FILE);
+    return 0;
+}
+
 sub isvalid
 {
     my($self)=@_;
@@ -63,7 +70,8 @@ sub dirents
     {
        when($STATE_TAG)
        {
-           @dents=qw(AND ARTISTS ALBUMS TRACKS);
+           @dents=(qw(AND ALLTRACKS), # FIXME: NOT and OR
+                   $self->{db}->artists(@{$self->{elements}}));
        }
        when($STATE_BOOLEAN)
        {
@@ -73,13 +81,9 @@ sub dirents
        {
            @dents=("ALL", $self->{db}->tags(@{$self->{elements}}));
        }
-       when($STATE_ARTISTS)
-       {
-           @dents=$self->{db}->artists(@{$self->{elements}});
-       }
        when($STATE_ALBUMS)
        {
-           @dents=$self->{db}->albums(@{$self->{elements}});
+           @dents=("TRACKS", $self->{db}->albums(@{$self->{elements}}));
        }
        when($STATE_TRACKLIST)
        {
@@ -120,7 +124,7 @@ sub parse
                print "SM: ROOT: $name\n";
                if($name eq "ALL")
                {
-                   $self->state($STATE_ARTISTS);
+                   $self->state($STATE_TAG);
                }
                else
                {
@@ -146,62 +150,51 @@ sub parse
                        $self->state($STATE_BOOLEAN);
 #                      push(@{$self->{elements}}, ID3FS::PathElement::Boolean->new($name));
                    }
-                   when("ARTISTS")
+                   when("ALLTRACKS")
                    {
-                       $self->state($STATE_ARTISTS);
+                       $self->state($STATE_TRACKLIST);
                    }
-                   when("ALBUMS")
+                   when("OR")
                    {
-                       $self->state($STATE_ALBUMS);
+                       $self->state($STATE_BOOLEAN);
+#                      push(@{$self->{elements}}, ID3FS::PathElement::Boolean->new($name));
                    }
-                   when("TRACKS")
+                   when("NOT")
                    {
-                       $self->state($STATE_TRACKLIST);
+                       $self->state($STATE_TAG);
+#                      push(@{$self->{elements}}, ID3FS::PathElement::Boolean->new($name));
                    }
-
-#                  when("OR")  { ; }
-#                  when("NOT") { ; }
-                   default
+                   my $artist=ID3FS::PathElement::Artist->new($self->{db}, $name);
+                   if($artist)
                    {
-                       $self->state($STATE_INVALID);
-                   }
-               }
-           }
-
-           when(255) #FIXME - dead code
-           {
-               print "SM: WANTMORE: $name\n";
-               $tag=ID3FS::PathElement::Tag->new($self->{db}, $name);
-               if($tag)
-               {
-                   push(@{$self->{elements}}, $tag);
-#                  $self->state($STATE_TAG);
-               }
-               else
-               {
-                   $self->state($STATE_INVALID);
-               }
-               my @valid_tagvals=$self->{db}->tag_values($tag);
-               print "TAGVALUES: $name: ", join(', ', @valid_tagvals), "\n";
-               if(@valid_tagvals)
-               {
-                   if(grep { $name eq $_; } @valid_tagvals)
-                   {
-                       print "TAGVAL VALID\n";
-                       $self->state($STATE_TAGVAL);
-                       push(@{$self->{elements}}, ID3FS::PathElement::Tagval($name));
+                       push(@{$self->{elements}}, $artist);
+                       $self->state($STATE_ALBUMS);
                    }
                    else
                    {
-                       print "ERROR: unknown tagval: $tagval\n";
                        $self->state($STATE_INVALID);
                    }
                }
-               else
-               {
-                   $self->state($STATE_INVALID);
-               }
            }
+
+#          when(255) #FIXME - dead code
+#          {
+#              my @valid_tagvals=$self->{db}->tag_values($tag);
+#              print "TAGVALUES: $name: ", join(', ', @valid_tagvals), "\n";
+#              if(@valid_tagvals)
+#              {
+#                  if(grep { $name eq $_; } @valid_tagvals)
+#                  {
+#                      print "TAGVAL VALID\n";
+#                      $self->state($STATE_TAGVAL);
+#                      push(@{$self->{elements}}, ID3FS::PathElement::Tagval($name));
+#                  }
+#                  else
+#                  {
+#                      print "ERROR: unknown tagval: $tagval\n";
+#                      $self->state($STATE_INVALID);
+#                  }
+#          }
            when($STATE_TAGVAL)
            {
                print "SM: TAGVAL: $name\n";
@@ -220,39 +213,31 @@ sub parse
                    $self->state($STATE_INVALID);
                }
            }
-           when($STATE_ARTISTS)
-           {
-               print "SM: ARTIST: $name\n";
-               my $artist=ID3FS::PathElement::Artist->new($self->{db}, $name);
-               push(@{$self->{elements}}, $tag);
-               if($artist)
-               {
-                   push(@{$self->{elements}}, $artist);
-                   $self->state($STATE_ALBUMS);
-               }
-               else
-               {
-                   $self->state($STATE_INVALID);
-               }
-           }
            when($STATE_ALBUMS)
            {
                print "SM: ALBUM: $name\n";
-               my $album=ID3FS::PathElement::Album->new($self->{db}, $name);
-               push(@{$self->{elements}}, $album);
-               if($album)
+               if($name eq "TRACKS")
                {
-                   push(@{$self->{elements}}, $album);
                    $self->state($STATE_TRACKLIST);
                }
                else
                {
-                   $self->state($STATE_INVALID);
+                   my $album=ID3FS::PathElement::Album->new($self->{db}, $name);
+                   push(@{$self->{elements}}, $album);
+                   if($album)
+                   {
+                       push(@{$self->{elements}}, $album);
+                       $self->state($STATE_TRACKLIST);
+                   }
+                   else
+                   {
+                       $self->state($STATE_INVALID);
+                   }
                }
            }
            when($STATE_TRACKLIST)
            {
-               print "SM: TRACKS: $name\n";
+               print "SM: TRACKLIST: $name\n";
                my $track=ID3FS::PathElement::File->new($self->{db}, $name);
                push(@{$self->{elements}}, $track);
                if($track)