# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-use lib '/home/ianb/projects/id3fs/id3fs/lib';
+use lib '/home/ianb/projects/id3fs/id3fs/lib'; # FIXME: remove
use strict;
use Getopt::Long qw(Configure);
use ID3FS::DB;
use ID3FS::Fuse;
+use POSIX;
+
use vars qw($me);
$me=($0=~/(?:.*\/)?(.*)/)[0];
exit unless($db);
my $fuse=ID3FS::Fuse->new($db, $source, $mountpoint, $verbose, $tagdepth);
+
+# disassociate from terminal
+unless($verbose)
+{
+ my $pid=fork();
+ if(defined($pid))
+ {
+ exit if($pid); # parent
+ POSIX::setsid(); # child
+ }
+ else
+ {
+ print "$me: couldn't drop terminal: $!\n";
+ }
+}
+
$fuse->run();
sub usage
{
- die("Usage: $me [-vqh] [-f <dbfile>] [--] <sourcedir> <mountpoint>\n".
+ die("Usage: $me [-vh] [-f <dbfile>] [-t <tagdepth>] [--] <sourcedir> <mountpoint>\n".
+ " -t|--tagdepth=NUM\tMaximum number of tags in expression (default: 10)\n" .
+ " -f|--database=FILE\tPath to database file\n" .
" -v\t\t\tVerbose (repeat for more verbosity)\n".
" -h\t\t\tThis help\n".
- " -f|--database=FILE\tPath to database file\n" .
" --\t\t\tEnd of options\n");
}
=over 4
-=item B<-v>
+=item I<SOURCEDIR>
-Enable verbose operation. Repeat for more verbosity.
+Directory containing actual audio files and database file F<.id3fs>
+(unless otherwise specified with B<-f>).
-=item B<-h>
+=item I<MOUNTPOINT>
-Show a short help message.
+Directory to mount the id3fs view of the files.
+
+=item S<B<-t >I<NUM>> | S<B<--tagdepth=>I<NUM>>
+
+Maximum number of tags in an expression. A query with many ANDs and
+NOTs can get quite slow. This option allows a cutoff before things get
+too slow, as well as providing some eventual limit when processes
+recurse into the filesystem. The default is 10.
=item S<B<-f >I<FILE>> | S<B<--database=>I<FILE>>
Use database in I<FILE>. The default is I<SOURCEDIR>/B<.id3fs>.
+=item B<-v>
+
+Enable verbose operation. Repeat for more verbosity. If verbose is
+enabled, id3fsd does not detach from the terminal.
+
+=item B<-h>
+
+Show a short help message.
+
=item B<-->
End of options.
/krautrock/AND/year/1971/NOARTIST/unknown-track.mp3
/krautrock/AND/year/1971/TRACKS/01-Paperhouse.mp3
+id3fs supports OR, AND and NOT. NOT has the highest precedence,
+followed by AND, so F<foo/OR/NOT/bar/AND/baz> is parsed as
+(foo OR ((NOT bar) AND baz)).
+
=head2 Tags
Tags are extracted from the B<genre> tag of audio files with
Ensure your backups, cron jobs, F</etc/updatedb.conf>, etc. are
configured to exclude the mount point.
-=head1 EXAMPLES
-
-To mount an id3fs filesystem which indexes B<~/music/albums> on
-B<~/music/tags>:
-
-First create the index:
-
- id3fs-index -v ~/music/albums
-
-If you have a large collection of music, this may take some time.
-
-Then create the mountpoint:
-
- mkdir ~/music/tags
-
-and mount the filesystem:
-
- id3fsd ~/music/albums ~/music/tags
-
-Then explore the tags in ~/music/tags/
-
=head1 BUGS
Please report any found to ianb@erislabs.net