sub tags
{
my $self=shift;
- my @tags=$self->{audiofile}->tags();
- return({}) unless(@tags);
- my $tags={};
- if(@tags)
+ my @intags=$self->{audiofile}->tags();
+ my @outtags=();
+ return() unless(@intags);
+ @intags = grep { defined($_); } @intags;
+ # combine then split on commas
+ # so multiple comma-delimited tags will work
+ @intags=split(/\s*,\s*/, join(', ', @intags));
+ for my $tag (@intags)
{
- @tags = grep { defined($_); } @tags;
- # combine then split on commas
- # so multiple comma-delimited tags will work
- @tags=split(/\s*,\s*/, join(', ', @tags));
- for my $tag (@tags)
- {
- next unless(length($tag));
- next unless($tag =~ /\S+/);
- $tag=$self->sanitise($tag);
-
- if($tag=~/([^\/]+)\/(.*)/)
- {
- my $tagname = $1;
- my $tagval = $self->stripslashes($2);
- $tags->{$tagname}=$tagval;
- }
- else
- {
- $tags->{$tag}=undef;
- }
- }
+ next unless(length($tag));
+ next unless($tag =~ /\S+/);
+ $tag=$self->sanitise($tag);
+ push(@outtags, [ split(/\s*\/\s*/, $tag) ]);
}
- return $tags;
+ return @outtags;
}
sub sanitise
my $v1genre=$file->v1genre();
my $year=$file->year();
my $audiotype=$file->audiotype();
- my $tags=$file->tags();
+ my @tags=$file->tags();
my $haspic=$file->haspic();
$artist=undef unless($self->ok($artist));
{ "artists_id" => $artist_id,
"albums_id" => $albums_id,
"paths_id" => $path_id });
- for my $tag (keys %$tags)
+ for my $tag (@tags)
{
- $self->add_tag($file_id, $tag, $tags->{$tag});
+ $self->add_tag($file_id, @$tag);
}
if($self->ok($year))
sub add_tag
{
- my($self, $file_id, $tag, $val)=@_;
- my $tag_id=$self->add_to_table("tags", $tag);
- $self->add_relation("files_x_tags",
- { "files_id" => $file_id,
- "tags_id" => $tag_id });
- if(defined($val))
+ my($self, $file_id, @tags)=@_;
+ my $parent_id=undef;
+ for my $tag (@tags)
{
- my $val_id=$self->add_to_table("tagvals", $val);
- $self->add_relation("tags_x_tagvals",
- { "tags_id" => $tag_id,
- "tagvals_id" => $val_id });
+ my $tag_id=$self->add_to_table("tags", $tag,
+ { "parents_id" => $parent_id });
+ $self->add_relation("files_x_tags",
+ { "files_id" => $file_id,
+ "tags_id" => $tag_id });
+ $parent_id=$tag_id;
}
}
CREATE TABLE tags (
id INTEGER PRIMARY KEY,
+ parents_id INTEGER,
name text
);