X-Git-Url: http://erislabs.net/gitweb/?p=id3fs.git;a=blobdiff_plain;f=lib%2FID3FS%2FPath.pm;h=49472568a4584406f2f8a43eb4dbbc09fcd4b71e;hp=919d28a9862735578a5756aee6548c99814f9582;hb=1c7e55d34956f90d235632995acf1238878db2a3;hpb=663546255b543715e86a8c578afa555c1803993f diff --git a/lib/ID3FS/Path.pm b/lib/ID3FS/Path.pm index 919d28a..4947256 100644 --- a/lib/ID3FS/Path.pm +++ b/lib/ID3FS/Path.pm @@ -2,12 +2,6 @@ package ID3FS::Path; use strict; use warnings; -use ID3FS::PathElement::Artist; -use ID3FS::PathElement::Album; -use ID3FS::PathElement::Boolean; -use ID3FS::PathElement::File; -use ID3FS::PathElement::Tag; -use ID3FS::PathElement::Tagval; use ID3FS::Path::Node; our ($STATE_INVALID, $STATE_ROOT, $STATE_TAG, $STATE_TAGVAL, @@ -166,12 +160,12 @@ sub parse elsif($name eq "NOT") { $root_not=1; - push(@{$self->{elements}}, ID3FS::PathElement::Boolean->new($self->{db}, $name)); + push(@{$self->{elements}}, ID3FS::Path::Node->new($self->{db}, "boolean", $name)); $self->state($STATE_BOOLEAN); } else { - $tag=ID3FS::PathElement::Tag->new($self->{db}, $name); + $tag=ID3FS::Path::Node->new($self->{db},"tag", $name); if($tag) { push(@{$self->{elements}}, $tag); @@ -192,7 +186,7 @@ sub parse $self->{db}->tag_has_values($tag->id())) { # print "Parsing: parent: $tag->id()\n"; - my $tagval=ID3FS::PathElement::Tag->new($self->{db}, $name, $tag->id()); + my $tagval=ID3FS::Path::Node->new($self->{db}, "tag", $name, $tag->id()); if(defined($tagval)) { $self->state($STATE_TAGVAL); @@ -215,16 +209,16 @@ sub parse elsif($name eq "AND") { $self->state($STATE_BOOLEAN); - push(@{$self->{elements}}, ID3FS::PathElement::Boolean->new($self->{db}, $name)); + push(@{$self->{elements}}, ID3FS::Path::Node->new($self->{db}, "boolean", $name)); } elsif($name eq "OR") { $self->state($STATE_BOOLEAN); - push(@{$self->{elements}}, ID3FS::PathElement::Boolean->new($self->{db}, $name)); + push(@{$self->{elements}}, ID3FS::Path::Node->new($self->{db}, "boolean", $name)); } else { - my $artist=ID3FS::PathElement::Artist->new($self->{db}, $name); + my $artist=ID3FS::Path::Node->new($self->{db}, "artist", $name); if($artist) { push(@{$self->{elements}}, $artist); @@ -249,11 +243,11 @@ sub parse if($allownot && $name eq "NOT") { $self->state($STATE_BOOLEAN); - push(@{$self->{elements}}, ID3FS::PathElement::Boolean->new($self->{db}, $name)); + push(@{$self->{elements}}, ID3FS::Path::Node->new($self->{db}, "boolean", $name)); } else { - my $tag=ID3FS::PathElement::Tag->new($self->{db}, $name); + my $tag=ID3FS::Path::Node->new($self->{db}, "tag", $name); if($tag) { push(@{$self->{elements}}, $tag); @@ -279,7 +273,7 @@ sub parse } else { - my $album=ID3FS::PathElement::Album->new($self->{db}, $name); + my $album=ID3FS::Path::Node->new($self->{db}, "album", $name); if($album) { push(@{$self->{elements}}, $album); @@ -294,7 +288,7 @@ sub parse elsif($state==$STATE_TRACKLIST) { # print "SM: TRACKLIST: $name\n"; - my $track=ID3FS::PathElement::File->new($self->{db}, $name); + my $track=ID3FS::Path::Node->new($self->{db}, "file", $name); if($track) { push(@{$self->{elements}}, $track); @@ -323,7 +317,7 @@ sub parse } else { - my $artist=ID3FS::PathElement::Artist->new($self->{db}, $name); + my $artist=ID3FS::Path::Node->new($self->{db}, "artist", $name); if($artist) { push(@{$self->{elements}}, $artist); @@ -358,8 +352,8 @@ sub parse $self->{tagtree}=$self->elements_to_tree(\@elements); if($self->{tagtree}) { - ($self->{sqlconditions}, - $self->{joins}) = $self->{tagtree}->to_sql(); + my ($conditions, @joins)=$self->{tagtree}->to_sql(); +# print "CONDITIONS(", scalar(@joins), "): ", $conditions, "\n"; # print "TREE: ", $self->{tagtree}->print(), "\n"; # print("SQL CONDITION(", scalar(@{$self->{joins}}), "): ", # $self->{sqlconditions}, "\n"); @@ -387,18 +381,15 @@ sub elements_to_tree my $thing=pop @$elements; if($self->is("boolean", $thing)) { - my $op=$thing; $right=$self->elements_to_tree($elements); - if($op->{name} ne "NOT") + if($thing->{name} ne "NOT") { $left=$self->elements_to_tree($elements); } - return ID3FS::Path::Node->new($left, $op, $right); - } - else - { - return ID3FS::Path::Node->new($thing); + $thing->left($left); + $thing->right($right); } + return $thing; } # Dijkstra's shunting-yard algorithm @@ -493,9 +484,8 @@ sub is { my($self, $type, $thing)=@_; return 0 unless($thing); - my $ref=ref($thing); - my $typestr="ID3FS::PathElement::" . ucfirst($type); - return 1 if($ref eq $typestr); + return 0 unless($thing->type()); + return 1 if($type eq $thing->type()); return 0; } @@ -610,7 +600,6 @@ sub albums my($self)=@_; my @ids=(); my $tail=$self->tail(); - # FIXME: rework PathElements if($self->is("artist", $tail)) { return $self->artist_albums($tail->id()); @@ -670,7 +659,6 @@ sub album_tracks sub tracks { my($self)=@_; - # FIXME: rework PathElements my $tail=$self->tail(); if($self->is("artist", $tail)) { @@ -735,6 +723,9 @@ sub tags_subselect return "\tSELECT id FROM files AS files_id\n"; } my $tree=$self->{tagtree}; + print "UNDEF!!\n" unless($self->{tagtree}); + use Data::Dumper; + print Dumper $tree; my $parent=$self->trailing_tag_parent(); # print "ELEMENTS: ", join('/', map { $_->{name}; } @{$self->{elements}}), "\n";