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_TAG, $STATE_TAGVAL,
14 $STATE_BOOLEAN, $STATE_ARTISTS, $STATE_ALBUMS, $STATE_TRACKLIST,
20 my $class=ref($proto) || $proto;
27 print "STATE: ", $self->state(), "\n";
34 if(($self->state() == $STATE_FILE) ||
35 ($self->state() == $STATE_INVALID))
45 return 1 if($self->state() == $STATE_FILE);
52 return($self->state() != $STATE_INVALID);
58 if($self->state() == $STATE_FILE)
60 return $self->{db}->filename(@{$self->{elements}});
62 return "ERROR"; #should never happen?
73 @dents=qw(AND ARTISTS ALBUMS TRACKS);
77 @dents=$self->{db}->tags(@{$self->{elements}});
81 @dents=("ALL", $self->{db}->tags(@{$self->{elements}}));
85 @dents=$self->{db}->artists(@{$self->{elements}});
89 @dents=$self->{db}->albums(@{$self->{elements}});
91 when($STATE_TRACKLIST)
93 @dents=$self->{db}->tracks(@{$self->{elements}});
97 print "DIRENTS: UNHANDLED STATE: $_\n";
106 @{$self->{components}}=split(/\//, $self->{path});
107 shift @{$self->{components}}; # drop empty field before leading /
108 print "PATH: $self->{path}\n";
109 # print "COMPONENTS: ", join(' | ', @{$self->{components}}), "\n";
110 $self->state($STATE_ROOT);
111 return if($self->{path} eq "/");
112 my @parts=@{$self->{components}};
114 $self->{elements}=[];
115 while(my $name=shift @parts)
117 print "NAME: $name\n";
118 given($self->state())
122 print "SM: INVALID: $name\n";
127 print "SM: ROOT: $name\n";
130 $self->state($STATE_ARTISTS);
134 $tag=ID3FS::PathElement::Tag->new($self->{db}, $name);
137 push(@{$self->{elements}}, $tag);
138 $self->state($STATE_TAG);
142 $self->state($STATE_INVALID);
148 print "SM: TAG: $name\n";
153 $self->state($STATE_BOOLEAN);
154 # push(@{$self->{elements}}, ID3FS::PathElement::Boolean->new($name));
158 $self->state($STATE_ARTISTS);
162 $self->state($STATE_ALBUMS);
166 $self->state($STATE_TRACKLIST);
173 $self->state($STATE_INVALID);
178 # when(255) #FIXME - dead code
180 # my @valid_tagvals=$self->{db}->tag_values($tag);
181 # print "TAGVALUES: $name: ", join(', ', @valid_tagvals), "\n";
184 # if(grep { $name eq $_; } @valid_tagvals)
186 # print "TAGVAL VALID\n";
187 # $self->state($STATE_TAGVAL);
188 # push(@{$self->{elements}}, ID3FS::PathElement::Tagval($name));
192 # print "ERROR: unknown tagval: $tagval\n";
193 # $self->state($STATE_INVALID);
198 print "SM: TAGVAL: $name\n";
202 print "SM: BOOLEAN: $name\n";
203 my $tag=ID3FS::PathElement::Tag->new($self->{db}, $name);
206 push(@{$self->{elements}}, $tag);
207 $self->state($STATE_TAG);
211 $self->state($STATE_INVALID);
216 print "SM: ARTIST: $name\n";
217 my $artist=ID3FS::PathElement::Artist->new($self->{db}, $name);
218 push(@{$self->{elements}}, $tag);
221 push(@{$self->{elements}}, $artist);
222 $self->state($STATE_ALBUMS);
226 $self->state($STATE_INVALID);
231 print "SM: ALBUM: $name\n";
232 my $album=ID3FS::PathElement::Album->new($self->{db}, $name);
233 push(@{$self->{elements}}, $album);
236 push(@{$self->{elements}}, $album);
237 $self->state($STATE_TRACKLIST);
241 $self->state($STATE_INVALID);
244 when($STATE_TRACKLIST)
246 print "SM: TRACKLIST: $name\n";
247 my $track=ID3FS::PathElement::File->new($self->{db}, $name);
248 push(@{$self->{elements}}, $track);
251 push(@{$self->{elements}}, $track);
252 $self->state($STATE_FILE);
256 $self->state($STATE_INVALID);
261 print "SM: FILE: $name\n";
262 # Can't have anything after a filename
263 $self->state($STATE_INVALID);
267 print "SM: ERROR: UNKNOWN STATE: $self->{state}\n";
268 $self->state($STATE_INVALID);
276 my($self, $newstate)=@_;
277 $self->{state}=$newstate if(defined($newstate));
278 return $self->{state};