id3fsd verbosity: -v => sql, -vv => fuse debugging
[id3fs.git] / lib / ID3FS / Fuse.pm
index bbf6f34..14304f7 100644 (file)
@@ -18,7 +18,7 @@ sub new
     $self->{db}=shift;
     $self->{source}=shift;
     $self->{mountpoint}=Cwd::abs_path(shift);
-    $self->{debug}=shift;
+    $self->{verbose}=shift;
     $self->{perms} = S_IRUSR() | S_IXUSR() | S_IRGRP() | S_IXGRP() | S_IROTH() | S_IXOTH();
 
     return $self;
@@ -30,11 +30,12 @@ sub run
     Fuse::main(
        mountpoint  => $self->{mountpoint},
        threaded    => 0,
-       debug       => $self->{debug},
+       debug       => ($self->{verbose} > 1),
        mountopts   => "allow_other,ro",
        getattr     => sub { $self->getattr(@_); },
        readlink    => sub { $self->readlink(@_); },
        getdir      => sub { $self->getdir(@_); },
+
        # Not used
 #      mknod       => sub { $self->mknod(@_);       },
 #      mkdir       => sub { $self->mkdir(@_);       },
@@ -64,7 +65,7 @@ sub getattr
 {
     my($self, $filename)=@_;
 #    print "**GETATTR: $filename\n";
-    my $path=ID3FS::Path->new($self->{db}, $filename);
+    my $path=ID3FS::Path->new($self->{db}, $filename, $self->{verbose});
     my $last_update=$self->{db}->last_update();
     return(-ENOENT()) unless($path->isvalid());
     my($dev,$ino,$nlink)=(0,0,1);
@@ -82,7 +83,7 @@ sub readlink
 {
     my($self,$filename)=@_;
 #    print "**READLINK: $filename\n";
-    my $path=ID3FS::Path->new($self->{db}, $filename);
+    my $path=ID3FS::Path->new($self->{db}, $filename, $self->{verbose});
     return(-EINVAL()) unless($path->isfile());
     return $path->dest($self->{mountpoint});
 }
@@ -91,13 +92,20 @@ sub getdir
 {
     my($self, $filename)=@_;
 #    print "**GETDIR: $filename\n";
-    my $path=ID3FS::Path->new($self->{db}, $filename);
+    my $path=ID3FS::Path->new($self->{db}, $filename, $self->{verbose});
     return(-ENOENT()) unless($path->isvalid());
-    if($path->isdir())
+    return(-ENOTDIR()) unless($path->isdir());
+    my @dents=();
+    my($dirs, $files)=$path->dirents();
+    # too slow
+#    push(@dents, $path->filter(@$dirs));
+    push(@dents, @$dirs);
+    push(@dents, @$files);
+    if(@dents)
     {
-       return(".", "..", $path->dirents(), 0);
+       return( (".", "..", @dents, 0) );
     }
-    return -ENOTDIR();
+    return(0);
 }
 
 # unused stubs