specify max tag depth (default: 15)
[id3fs.git] / lib / ID3FS / Fuse.pm
index 14304f7..3345bc2 100644 (file)
@@ -6,8 +6,9 @@ use ID3FS::Path;
 use Fuse;
 use Cwd;
 use POSIX qw(EINVAL EROFS ENOENT EOPNOTSUPP S_IRUSR S_IRGRP S_IROTH S_IXUSR S_IXGRP S_IXOTH);
-our ($TYPE_DIR, $TYPE_SYMLINK)=(0040, 0120);
 
+our ($TYPE_DIR, $TYPE_SYMLINK)=(0040, 0120);
+our $DEFAULT_MAXTAGDEPTH = 15;
 sub new
 {
     my $proto=shift;
@@ -19,6 +20,8 @@ sub new
     $self->{source}=shift;
     $self->{mountpoint}=Cwd::abs_path(shift);
     $self->{verbose}=shift;
+    $self->{tagdepth}=shift;
+    $self->{tagdepth}=$DEFAULT_MAXTAGDEPTH unless($self->{tagdepth});
     $self->{perms} = S_IRUSR() | S_IXUSR() | S_IRGRP() | S_IXGRP() | S_IROTH() | S_IXOTH();
 
     return $self;
@@ -65,7 +68,7 @@ sub getattr
 {
     my($self, $filename)=@_;
 #    print "**GETATTR: $filename\n";
-    my $path=ID3FS::Path->new($self->{db}, $filename, $self->{verbose});
+    my $path=ID3FS::Path->new($self->{db}, $filename, $self->{verbose}, $self->{tagdepth});
     my $last_update=$self->{db}->last_update();
     return(-ENOENT()) unless($path->isvalid());
     my($dev,$ino,$nlink)=(0,0,1);
@@ -83,7 +86,7 @@ sub readlink
 {
     my($self,$filename)=@_;
 #    print "**READLINK: $filename\n";
-    my $path=ID3FS::Path->new($self->{db}, $filename, $self->{verbose});
+    my $path=ID3FS::Path->new($self->{db}, $filename, $self->{verbose}, $self->{tagdepth});
     return(-EINVAL()) unless($path->isfile());
     return $path->dest($self->{mountpoint});
 }
@@ -92,7 +95,7 @@ sub getdir
 {
     my($self, $filename)=@_;
 #    print "**GETDIR: $filename\n";
-    my $path=ID3FS::Path->new($self->{db}, $filename, $self->{verbose});
+    my $path=ID3FS::Path->new($self->{db}, $filename, $self->{verbose}, $self->{tagdepth});
     return(-ENOENT()) unless($path->isvalid());
     return(-ENOTDIR()) unless($path->isdir());
     my @dents=();