my $base=undef;
for my $dir (@dirs)
{
- my $path=Cwd::abs_path($dir);
+# my $path=Cwd::abs_path($dir);
+ my $path=$dir;
do
{
$base=$path;
sub bare_tags
{
my($self)=@_;
- my $sql=("SELECT tags.name FROM tags\n" .
- "WHERE tags.parents_id=''\n" .
- "GROUP BY tags.name\n");
+ my $sql=("SELECT t1.name FROM tags t1\n" .
+ "LEFT JOIN tags t2 on t1.id=t2.parents_id\n" .
+ "WHERE t1.parents_id='' AND t2.id IS NULL\n" .
+ "GROUP BY t1.name\n");
my @names=$self->cmd_firstcol($sql);
return (@names);
}
{ "artists_id" => $artist_id,
"albums_id" => $albums_id,
"paths_id" => $path_id });
+
+ $self->remove_tag_refs($file_id);
if(@tags)
{
for my $tag (@tags)
}
$year="UNKNOWN" if(!$self->ok($year) || $year =~ /^0+$/);
+ $year+=1900 if($year=~/^\d\d$/);
$self->add_tag($file_id, "year", $year);
if($year=~/^(\d\d\d)\d$/)
{
{
$self->add_tag($file_id, "audiotype", $audiotype);
}
+ else
+ {
+ # should never happen
+ $self->add_tag($file_id, "audiotype", "UNKNOWN");
+ }
if($self->ok($channels))
{
- if($channels eq "2")
- {
- $self->add_tag($file_id, "channels", "stereo");
- }
- elsif($channels eq "1")
- {
- $self->add_tag($file_id, "channels", "mono");
- }
- else
- {
- $self->add_tag($file_id, "channels", $channels);
- }
+ if ($channels eq "2") { $channels="stereo"; }
+ elsif ($channels eq "1") { $channels="mono"; }
+ elsif ($channels eq "0") { $channels="UNKNOWN"; }
+ $self->add_tag($file_id, "channels", $channels);
}
if($self->ok($bitrate))
{
+ $bitrate="UNKNOWN" if($bitrate=~/^0+$/);
$self->add_tag($file_id, "bitrate", $bitrate);
}
if($self->ok($samplerate))
{
+ $samplerate="UNKNOWN" if($samplerate=~/^0+$/);
$self->add_tag($file_id, "samplerate", $samplerate);
}
$self->cmd($sql, map { $fields->{$_}; } sort keys(%$fields));
}
+# remove existing files_x_tags relations before reindexing
+sub remove_tag_refs
+{
+ my ($self, $id)=@_;
+ my $sql="DELETE FROM files_x_tags WHERE files_id=?\n";
+ return($self->cmd($sql, $id));
+}
+
sub files_in
{
my ($self, $dir)=@_;
sub prune_directories
{
- my($self)=@_;
+ my($self,@includepaths)=@_;
my $sql=("SELECT name, id FROM paths\n");
my $pathsref=$self->cmd_rows($sql);
my @ids=();
for my $pathpair (@$pathsref)
{
my($path, $id)=@$pathpair;
+ my $relpath = $self->{base} . "/" . $path;
+ next unless(grep { $relpath =~ /^$_/; } @includepaths);
my $fullpath="$self->{absbase}/$path";
unless(-d $fullpath)
{