basic tags display in root of fs
[id3fs.git] / lib / ID3FS / Fuse.pm
1 package ID3FS::Fuse;
2
3 use strict;
4 use warnings;
5 use POSIX qw(EINVAL ENOENT EROFS EOPNOTSUPP);
6 use Fuse;
7
8 sub new
9 {
10     my $proto=shift;
11     my $class=ref($proto) || $proto;
12     my $self={};
13     bless($self,$class);
14
15     $self->{db}=shift;
16     $self->{source}=shift;
17     $self->{mountpoint}=shift;
18
19     return $self;
20 }
21
22 sub run
23 {
24     my($self)=@_;
25     Fuse::main(
26         mountpoint  => $self->{mountpoint},
27         threaded=>0,
28         debug => 1,
29         getattr     => sub { $self->getattr(@_); },
30 #       readlink    => sub { $self->readlink(@_); },
31         getdir      => sub { $self->getdir(@_); },
32 #       mknod       => sub { $self->mknod(@_); },
33 #       mkdir       => sub { $self->mkdir(@_); },
34 #       unlink      => sub { $self->unlink(@_); },
35 #       rmdir       => sub { $self->rmdir(@_); },
36 #       symlink     => sub { $self->symlink(@_); },
37 #       rename      => sub { $self->rename(@_); },
38 #       link        => sub { $self->link(@_); },
39 #       chmod       => sub { $self->chmod(@_); },
40 #       chown       => sub { $self->chown(@_); },
41 #       truncate    => sub { $self->truncate(@_); },
42 #       utime       => sub { $self->utime(@_); },
43 #       open        => sub { $self->open(@_); },
44 #       read        => sub { $self->read(@_); },
45 #       write       => sub { $self->write(@_); },
46 #       statfs      => sub { $self->statfs(@_); },
47 #       release     => sub { $self->release(@_); },
48 #       fsync       => sub { $self->fsync(@_); },
49 #       setxattr    => sub { $self->setxattr(@_); },
50 #       getxattr    => sub { $self->getxattr(@_); },
51 #       listxattr   => sub { $self->listxattr(@_); },
52 #       removexattr => sub { $self->removexattr(@_); },
53         );
54 }
55
56 sub getattr
57 {
58     my($filename)=@_;
59     print "GETATTR: $filename\n";
60     my($dev,$ino,$nlink)=(0,0,1);
61     my($uid,$gid)=(1000,1000);
62     my($rdev,$size)=(0,1);
63     my($atime,$mtime,$ctime)=(0,0,0);
64     my($blksize,$blocks)=(512,1);
65     my $mode=(0040 << 9) | 0755;
66     return($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
67            $atime,$mtime,$ctime,$blksize,$blocks);
68 }
69
70 sub readlink    { print "readlink\n"; return "FIXME";       }
71
72 sub getdir
73 {
74     my($self, $filename)=@_;
75     print "GETDIR(", ref($self), ": $filename\n";
76     if($filename eq "/")
77     {
78         return(".", "..", $self->{db}->tags(), 0);
79     }
80     return('.',0);
81 }
82
83 sub mknod       { print "mknod\n"; return -EINVAL();     }
84 sub mkdir       { print "mkdir\n"; return -EROFS();      }
85 sub unlink      { print "unlink\n"; return -EINVAL();     }
86 sub rmdir       { print "rmdir\n"; return -EROFS();      }
87 sub symlink     { print "symlink\n"; return -EROFS();      }
88 sub rename      { print "rename\n"; return -EROFS();      }
89 sub link        { print "link\n"; return -EROFS();      }
90 sub chmod       { print "chmod\n"; return -EINVAL();     }
91 sub chown       { print "chown\n"; return -EINVAL();     }
92 sub truncate    { print "truncate\n"; return -EROFS();      }
93 sub utime       { print "utime\n"; return -EINVAL();     }
94 sub open        { print "open\n"; return -EINVAL();     }
95 sub read        { print "read\n"; return -EINVAL();     }
96 sub write       { print "write\n"; return -EINVAL();     }
97 sub statfs      { print "statfs\n"; return -EINVAL();     }
98 sub release     { print "release\n"; return 0;             }
99 sub fsync       { print "fsync\n"; return 0;             }
100 sub setxattr    { print "setxattr\n"; return -EOPNOTSUPP(); }
101 sub getxattr    { print "getxattr\n"; return -EOPNOTSUPP(); }
102 sub listxattr   { print "listxattr\n"; return -EOPNOTSUPP(); }
103 sub removexattr { print "removexattr\n"; return -EOPNOTSUPP(); }
104
105 1;