enable filter
authorIan Beckwith <ianb@erislabs.net>
Sun, 17 Oct 2010 00:12:12 +0000 (01:12 +0100)
committerIan Beckwith <ianb@erislabs.net>
Sun, 17 Oct 2010 00:12:12 +0000 (01:12 +0100)
lib/ID3FS/Fuse.pm

index f24f680..62dd3a8 100644 (file)
@@ -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