From fb36f92d827b5e57b2d3238e41bf53f98d6b52b1 Mon Sep 17 00:00:00 2001 From: Ian Beckwith Date: Sun, 17 Oct 2010 01:12:12 +0100 Subject: [PATCH] enable filter --- lib/ID3FS/Fuse.pm | 58 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/lib/ID3FS/Fuse.pm b/lib/ID3FS/Fuse.pm index f24f680..62dd3a8 100644 --- a/lib/ID3FS/Fuse.pm +++ b/lib/ID3FS/Fuse.pm @@ -95,27 +95,53 @@ sub getdir my $path=ID3FS::Path->new($self->{db}, $filename); return(-ENOENT()) unless($path->isvalid()); return(-ENOTDIR()) unless($path->isdir()); - my @dents=(".", ".."); + my @dents=(); my($dirs, $files)=$path->dirents(); - push(@dents, grep { $self->hascontents($filename, $_); } @$dirs); + push(@dents, $self->filter($filename, @$dirs)); push(@dents, @$files); - return(@dents, 0); + if(@dents) + { + return( (".", "..", @dents, 0) ); + } + return(0); } -sub hascontents +sub filter { - return 1; - # FIXME - my($self, $base, $dir)=@_; - print "hascontents: $base / $dir\n"; - my $path=ID3FS::Path->new($self->{db}, "$base/$dir"); - print "VALID: ", $path->isvalid(), "\n"; - return 1 unless($path->isvalid()); - my($subdirs,$subfiles)=$path->dirents(); - print "SUBDIRS: ", join(", ", @$subdirs), "\n"; - print "SUBFILES: ", join(", ", @$subfiles), "\n"; - return 1 if(@$subdirs || @$subfiles); - return 0; + my($self, $base, @dirs)=@_; + my @outdirs=(); + for my $dir (@dirs) + { + print "hascontents: $base / $dir\n"; + my $path=ID3FS::Path->new($self->{db}, "$base/$dir"); + next unless($path->isvalid()); + my($subdirs,$subfiles)=$path->dirents(); + print "SUBDENTS: ", join(", ", @$subdirs, @$subfiles), "\n"; + next unless(@$subdirs || @$subfiles); + if(!@$subfiles || scalar(@$subdirs) < 3) + { + my $subdirents=0; + for my $subdir (@$subdirs) + { + if(grep { $_ eq $subdir; } qw(AND OR NOT)) + { + my $subsubpath=ID3FS::Path->new($self->{db}, "$base/$dir/$subdir"); + if($path->isvalid()) + { + my($subsubdirs,$subsubfiles)=$subsubpath->dirents(); + $subdirents++ if(@$subsubdirs || @$subsubfiles); + } + } + else + { + $subdirents++; + } + } + next unless($subdirents); + } + push(@outdirs, $dir); + } + return(@outdirs) } # unused stubs -- 2.11.0