6 use ID3FS::PathElement::Artist;
7 use ID3FS::PathElement::Album;
8 use ID3FS::PathElement::Boolean;
9 use ID3FS::PathElement::File;
10 use ID3FS::PathElement::Tag;
11 use ID3FS::PathElement::Tagval;
13 our ($STATE_INVALID, $STATE_ROOT, $STATE_WANTMORE, $STATE_TAG, $STATE_TAGVAL,
14 $STATE_BOOLEAN, $STATE_ARTIST, $STATE_ALBUM, $STATE_FILE)=(0..8);
19 my $class=ref($proto) || $proto;
26 print "STATE: ", $self->state(), "\n";
33 if(($self->state() eq $STATE_FILE) ||
34 ($self->state() eq $STATE_INVALID))
44 return($self->state() != $STATE_INVALID);
60 return(qw(AND ARTISTS ALBUMS TRACKS));
64 return $self->{db}->tags(@{$self->{elements}});
68 my @dents=("ALL", $self->{db}->tags(@{$self->{elements}}));
73 print "DIRENTS: UNHANDLED STATE: $_\n";
81 @{$self->{components}}=split(/\//, $self->{path});
82 shift @{$self->{components}}; # drop empty field before leading /
83 print "PATH: $self->{path}\n";
84 print "COMPONENTS: ", join(' | ', @{$self->{components}}), "\n";
85 $self->state($STATE_ROOT);
86 return if($self->{path} eq "/");
87 my @parts=@{$self->{components}};
90 while(my $name=shift @parts)
92 print "NAME: $name\n";
97 print "SM: INVALID: $name\n";
102 print "SM: ROOT: $name\n";
105 $self->state($STATE_ARTIST);
109 $tag=ID3FS::PathElement::Tag->new($self->{db}, $name);
112 push(@{$self->{elements}}, $tag);
113 $self->state($STATE_TAG);
117 $self->state($STATE_INVALID);
123 print "SM: TAG: $name\n";
128 $self->state($STATE_BOOLEAN);
129 # push(@{$self->{elements}}, ID3FS::PathElement::Boolean->new($name));
131 # when("ARTISTS") { ; }
132 # when("ALBUMS") { ; }
133 # when("TRACKS") { ; }
138 $self->state($STATE_INVALID);
143 when($STATE_WANTMORE)
145 print "SM: WANTMORE: $name\n";
146 $tag=ID3FS::PathElement::Tag->new($self->{db}, $name);
149 push(@{$self->{elements}}, $tag);
150 # $self->state($STATE_TAG);
154 $self->state($STATE_INVALID);
156 my @valid_tagvals=$self->{db}->tag_values($tag);
157 print "TAGVALUES: $name: ", join(', ', @valid_tagvals), "\n";
160 if(grep { $name eq $_; } @valid_tagvals)
162 print "TAGVAL VALID\n";
163 $self->state($STATE_TAGVAL);
164 push(@{$self->{elements}}, ID3FS::PathElement::Tagval($name));
168 print "ERROR: unknown tagval: $tagval\n";
169 $self->state($STATE_INVALID);
174 $self->state($STATE_INVALID);
179 print "SM: TAGVAL: $name\n";
183 print "SM: BOOLEAN: $name\n";
184 my $tag=ID3FS::PathElement::Tag->new($self->{db}, $name);
187 push(@{$self->{elements}}, $tag);
188 $self->state($STATE_TAG);
192 $self->state($STATE_INVALID);
197 print "SM: ARTIST: $name\n";
201 print "SM: ALBUM: $name\n";
205 print "SM: FILE: $name\n";
209 print "SM: ERROR: UNKNOWN STATE: $self->{state}\n";
210 $self->state($STATE_INVALID);
218 my($self, $newstate)=@_;
219 $self->{state}=$newstate if(defined($newstate));
220 return $self->{state};