From 12a8fe2f27c66ea809a6a10c7088750d996dce80 Mon Sep 17 00:00:00 2001 From: Ian Beckwith Date: Sun, 10 Oct 2010 21:54:23 +0100 Subject: [PATCH] tidy code --- lib/ID3FS/Path.pm | 83 +++++++++++++++++++++++-------------------------------- 1 file changed, 35 insertions(+), 48 deletions(-) diff --git a/lib/ID3FS/Path.pm b/lib/ID3FS/Path.pm index d3187aa..7113e92 100644 --- a/lib/ID3FS/Path.pm +++ b/lib/ID3FS/Path.pm @@ -74,7 +74,7 @@ sub dirents # print "DIRENTS: FILE: $self->{path}\n"; if($state==$STATE_TAG || $state==$STATE_TAGVAL) { - my $tag=$self->{elements}->[$#{$self->{elements}}]; + my $tag=$self->tail(); if($state==$STATE_TAG && defined($tag) && ref($tag) eq "ID3FS::PathElement::Tag" && @@ -90,7 +90,7 @@ sub dirents } elsif($state==$STATE_BOOLEAN) { - my $parent=$self->{elements}->[$#{$self->{elements}}]; + my $parent=$self->tail(); unless(defined($parent) && ref($parent) eq "ID3FS::PathElement::Boolean" && $parent->{name} eq "NOT") @@ -167,7 +167,7 @@ sub parse elsif($state==$STATE_TAG || $state==$STATE_TAGVAL) { # print "SM: TAG/TAGVAL($state): $name\n"; - my $tag=$self->{elements}->[$#{$self->{elements}}]; + my $tag=$self->tail(); if($state==$STATE_TAG && defined($tag) && ref($tag) eq "ID3FS::PathElement::Tag" && @@ -221,7 +221,7 @@ sub parse elsif($state==$STATE_BOOLEAN) { # print "SM: BOOLEAN: $name\n"; - my $parent=$self->{elements}->[$#{$self->{elements}}]; + my $parent=$self->tail(); my $allownot=1; if(defined($parent) && ref($parent) eq "ID3FS::PathElement::Boolean" && @@ -356,33 +356,17 @@ sub sort_elements { if(ref($thing) eq "ID3FS::PathElement::Tag") { -# print "Pushing $thing->{name} to output\n"; push(@output, $thing); -# print "OPSTACK: ", join(', ', map { $_->{name}; } @opstack), "\n"; -# print "OUTPUT: ", join(', ', map { $_->{name}; } @output), "\n"; } elsif(ref($thing) eq "ID3FS::PathElement::Boolean") { -# print "BOOL: $thing->{name}\n"; # bool -# print "thing: $thing->{name}: $priorities{$thing->{name}} "; - if(@opstack) - { -# print("topop: ", $opstack[$#opstack]->{name}, -# ": ", $priorities{$opstack[$#opstack]->{name}}, "\n"); - } while(@opstack && ($priorities{$thing->{name}} <= $priorities{$opstack[$#opstack]->{name}})) { -# print "Pushing ", $opstack[$#opstack]->{name}, " from opstack to output\n"; push(@output, pop(@opstack)); -# print "OPSTACK: ", join(', ', map { $_->{name}; } @opstack), "\n"; -# print "OUTPUT: ", join(', ', map { $_->{name}; } @output), "\n"; } -# print "Pushing $thing->{name} to opstack\n"; push(@opstack, $thing); -# print "OPSTACK: ", join(', ', map { $_->{name}; } @opstack), "\n"; -# print "OUTPUT: ", join(', ', map { $_->{name}; } @output), "\n"; } } while(@opstack) @@ -404,7 +388,7 @@ sub used_tags sub tag_has_values { my($self)=@_; - my $tail=$self->{elements}->[$#{$self->{elements}}]; + my $tail=$self->tail(); print "TAIL: ", ref($tail), "\n"; if($tail && ref($tail) eq "ID3FS::PathElement::Tag") { @@ -415,7 +399,7 @@ sub tag_has_values sub trailing_tag_id { my($self)=@_; - my $tail=$self->{elements}->[$#{$self->{elements}}]; + my $tail=$self->tail(); if($tail && ref($tail) eq "ID3FS::PathElement::Tag") { return($tail->{id}); @@ -426,7 +410,7 @@ sub trailing_tag_id sub trailing_tag_parent { my($self)=@_; - my $tail=$self->{elements}->[$#{$self->{elements}}]; + my $tail=$self->tail(); if($tail && ref($tail) eq "ID3FS::PathElement::Tag") { return($tail->{parents_id}); @@ -434,13 +418,25 @@ sub trailing_tag_parent return undef; } +sub tail +{ + my($self)=@_; + return($self->{elements}->[$#{$self->{elements}}]); +} + +# the one before last +sub tail_parent +{ + my($self)=@_; + return($self->{elements}->[($#{$self->{elements}}) - 1]); +} + ###################################################################### sub tags { my($self)=@_; - my @constraints=@{$self->{elements}}; - if(!@constraints) # / + if(!@{$self->{elements}}) # / { my $sql="SELECT DISTINCT name FROM tags WHERE parents_id='';"; return($self->{db}->cmd_firstcol($sql)); @@ -528,8 +524,7 @@ sub tag_values sub artists { my($self)=@_; - my @constraints=@{$self->{elements}}; - if(!@constraints) # /ALL + if(!@{$self->{elements}}) # /ALL { my $sql="SELECT DISTINCT name FROM artists;"; return($self->{db}->cmd_firstcol($sql)); @@ -550,12 +545,12 @@ sub artists sub albums { my($self)=@_; - my @constraints=@{$self->{elements}}; my @ids=(); + my $tail=$self->tail(); # FIXME: rework PathElements - if(ref($constraints[$#constraints]) eq "ID3FS::PathElement::Artist") + if(ref($tail) eq "ID3FS::PathElement::Artist") { - return $self->artist_albums($constraints[$#constraints]->{id}); + return $self->artist_albums($tail->{id}); } my $sql=("SELECT albums.name\n" . "\tFROM (\n" . @@ -573,7 +568,6 @@ sub albums sub artist_albums { my($self, $artist_id)=@_; - my @constraints=@{$self->{elements}}; my $sql=("SELECT albums.name FROM (\n" . $self->tags_subselect() . "\t) AS subselect\n" . @@ -622,29 +616,22 @@ sub album_tracks sub tracks { my($self)=@_; - my @constraints=@{$self->{elements}}; # FIXME: rework PathElements - if(ref($constraints[$#constraints]) eq "ID3FS::PathElement::Artist") + my $tail=$self->tail(); + if(ref($tail) eq "ID3FS::PathElement::Artist") { - my $artist_id=0; - my $artist=$constraints[$#constraints]; - if(defined($artist) && (ref($artist) eq "ID3FS::PathElement::Artist")) - { - # should always happen - $artist_id=$artist->{id}; - } - return $self->artist_tracks($artist_id); + return $self->artist_tracks($tail->{id}); } - elsif(ref($constraints[$#constraints]) eq "ID3FS::PathElement::Album") + elsif(ref($tail) eq "ID3FS::PathElement::Album") { my $artist_id=0; - my $artist=$constraints[($#constraints)-1]; + my $artist=$self->tail_parent(); if(defined($artist) && (ref($artist) eq "ID3FS::PathElement::Artist")) { # should always happen $artist_id=$artist->{id}; } - return $self->album_tracks($artist_id, $constraints[$#constraints]->{id}); + return $self->album_tracks($artist_id, $tail->{id}); } my $sql=("SELECT files.name\n" . @@ -662,17 +649,17 @@ sub tracks sub filename { my($self, $mountpoint)=@_; - my @constraints=@{$self->{elements}}; - if(ref($constraints[$#constraints]) eq "ID3FS::PathElement::File") + my $tail=$self->tail(); + if(ref($tail) eq "ID3FS::PathElement::File") { - my $id=$constraints[$#constraints]->{id}; + my $id=$tail->{id}; my $sql=("SELECT paths.name, files.name FROM files\n" . "INNER JOIN paths ON files.paths_id=paths.id\n" . "WHERE files.id=?\n" . "GROUP BY paths.name, files.name"); print "FILENAME SQL: $sql\n"; my ($path, $name)=$self->{db}->cmd_onerow($sql, $id); - my $id3fs_path=join('/', map { $_->{name}; } @constraints); + my $id3fs_path=join('/', map { $_->{name}; } @{$self->{elements}}); return($self->{db}->relativise($path, $name, $mountpoint, $id3fs_path)); } die("DB::filename: unhandled case\n"); #FIXME -- 2.11.0