Prepare AudioFile for writing
authorIan Beckwith <ianb@erislabs.net>
Sat, 30 Oct 2010 01:13:51 +0000 (02:13 +0100)
committerIan Beckwith <ianb@erislabs.net>
Sat, 30 Oct 2010 01:13:51 +0000 (02:13 +0100)
bin/id3fs-tag [changed mode: 0644->0755]
lib/ID3FS/AudioFile.pm

old mode 100644 (file)
new mode 100755 (executable)
index 3656ea7..0911f45
@@ -30,30 +30,30 @@ my ($artist, $album, $track, $tracknum, $year, $v1genre, $comment,
     $delete_year, $delete_v1genre, $delete_comment, $delete_all,
     $delete_genre, $genre, $add_tags, $delete_tags, @replace_tags);
 
-Configure(qw(bundling no_ignore_case));
+Configure(qw(no_ignore_case));
 my $optret=GetOptions(
-    "verbose|v"                    => \$verbose,
-    "help|h"                       => \$help,
-    "artist|a=s"                   => \$artist,
-    "album|l=s"                    => \$album,
-    "song|s=s"                     => \$track,
-    "tracknum|n=s"                 => \$tracknum,
-    "year|y=i"                     => \$year,
-    "v1genre|1=s"                  => \$v1genre,
-    "comment|c=s"                  => \$comment,
-    "delete-artist|A"              => \$delete_artist,
-    "delete-album|L"               => \$delete_album,
-    "delete-song|S"                => \$delete_track,
-    "delete-tracknum|N"            => \$delete_tracknum,
-    "delete-year|Y"                => \$delete_year,
-    "delete-v1genre|0"             => \$delete_v1genre,
-    "delete-comment|C"             => \$delete_comment,
-    "delete|delete-all|D"          => \$delete_all,
-    "delete-genre|G|delete-tags"   => \$delete_genre,
-    "genre|g|replace-all-tags|R=s" => \$genre,
-    "add-tags|tags|t=s"            => \$add_tags,
-    "delete-tags|T=s"              => \$delete_tags,
-    "replace-tags|r=s{2}"          => \@replace_tags,
+    "verbose|v"                      => \$verbose,
+    "help|h"                         => \$help,
+    "artist|a=s"                     => \$artist,
+    "album|l=s"                      => \$album,
+    "song|s=s"                       => \$track,
+    "tracknum|n=s"                   => \$tracknum,
+    "year|y=i"                       => \$year,
+    "v1genre|1=s"                    => \$v1genre,
+    "comment|c=s"                    => \$comment,
+    "delete-artist|A"                => \$delete_artist,
+    "delete-album|L"                 => \$delete_album,
+    "delete-song|S"                  => \$delete_track,
+    "delete-tracknum|N"              => \$delete_tracknum,
+    "delete-year|Y"                  => \$delete_year,
+    "delete-v1genre|0"               => \$delete_v1genre,
+    "delete-comment|C"               => \$delete_comment,
+    "delete|delete-all|D"            => \$delete_all,
+    "delete-genre|delete-all-tags|G" => \$delete_genre,
+    "genre|g|replace-all-tags|R=s"   => \$genre,
+    "add-tags|tags|t=s"              => \$add_tags,
+    "delete-tags|T=s"                => \$delete_tags,
+    "replace-tags|r=s{2}"            => \@replace_tags,
     );
 
 usage() if(!@ARGV || !$optret || $help);
@@ -140,38 +140,32 @@ sub usage
     die("Usage: $me [-vhALSNY0CDG] [-a ARTIST] [-l ALBUM] [-s SONG] [-n TRACKNUM] FILES...\n".
        "       $me [-y YEAR] [-g GENRE] [-1 V1GENRE] [-c COMMENT] [--] FILES...\n".
        "       $me [-t TAGS,TO,ADD] [-T TAGS,TO,DELETE]  FILES...\n".
-       "       $me [-r TAGS,TO,DELETE, TAGS,TO,ADD] [-R TAGS,TO,OVERWRITE,WITH] FILES...\n".
-
-       "  verbose|v                 \n".
-       "  help|h                 \n".
-       "  artist|a=s                 \n".
-       "  album|l=s                 \n".
-       "  song|s=s                 \n".
-       "  tracknum|n=s                 \n".
-       "  year|y=i                 \n".
-       "  v1genre|1=s                 \n".
-       "  comment|c=s                 \n".
-       "  delete-artist|A                 \n".
-       "  delete-album|L                 \n".
-       "  delete-song|S                 \n".
-       "  delete-tracknum|N                 \n".
-       "  delete-year|Y                 \n".
-       "  delete-v1genre|0                 \n".
-       "  delete-comment|C                 \n".
-       "  delete|delete-all|D                 \n".
-       "  delete-genre|G|delete-tags                 \n".
-       "  genre|g|replace-all-tags|R=s                 \n".
-       "  add-tags|tags|t=s                 \n".
-       "  delete-tags|T=s                 \n".
-       "  replace-tags|r=s{2}                 \n".
-
-       " -d|--dir=PATH              Base directory of source files (default: ARGV[0])\n".
-       " -f|--database=FILE         Path to database file (default: basedir/.id3fs)\n".
-       " -e|--extensions=EXT1,EXT2  File extensions to index (default: mp3, ogg, flac)\n".
-       " -l|list                    List tags in use\n" .
-       " -v|--verbose               Verbose\n".
-       " -h|--help                  This help\n".
-       " --                         End of options\n");
+       "       $me [-r TAGS,TO,DELETE TAGS,TO,ADD] [-R TAGS,TO,OVERWRITE,WITH] FILES...\n".
+       "With no options, displays current info in tag\n".
+       "Options:\n".
+       " -a|--artist=ARTIST                    Set artist\n".
+       " -l|--album=ALBUM                      Set album\n".
+       " -s|--song=SONG                        Set song\n".
+       " -n|--tracknum=NUM                     Set tracknum\n".
+       " -y|--year=NUM                         Set year\n".
+       " -1|--v1genre=GENRE                    Set ID3v1 genre\n".
+       " -c|--comment=COMMENT                  Set comment\n".
+       " -A|--delete-artist                    Delete artist\n".
+       " -L|--delete-album                     Delete album\n".
+       " -S|--delete-song                      Delete song\n".
+       " -N|--delete-tracknum                  Delete tracknum\n".
+       " -Y|--delete-year                      Delete year\n".
+       " -0|--delete-v1genre                   Delete ID3v1 genre\n".
+       " -C|--delete-comment                   Delete comment\n".
+       " -D|--delete|delete-all                Delete entire ID3 tag\n".
+       " -G|--delete-genre|--delete-all-tags   Delete all tags stored in genre\n".
+       " -g|-R|replace-all-tags|--genre=GENRE  Replace all tags in genre tag\n".
+       " -t|--add-tags|tags=TAG1,TAG2          Add tags to genre tag, merging with existing ones\n".
+       " -T|--delete-tags=TAG1,TAG2            Delete tags from genre\n".
+       " -r|--replace-tags TAGS1 TAGS2         Replace TAGS1 in genre with TAGS2\n".
+       " -v|--verbose                          Verbose display\n".
+       " -h|--help                             This help\n".
+       " --                                    End of options\n");
 }
 
 __END__
index bb91604..5c45984 100644 (file)
@@ -54,48 +54,77 @@ sub new
     return $self;
 }
 
-sub artist
+sub set
 {
-    my $self=shift;
-    return $self->sanitise($self->stripslashes($self->{audiofile}->artist()));
-}
-
-sub album
-{
-    my $self=shift;
-    return $self->sanitise($self->stripslashes($self->{audiofile}->album()));
+    my ($self, $thing, $value)=@_;
+    if($value)
+    {
+       $value=$self->sanitise($self->stripslashes($value));
+       $self->{audiofile}->$thing($value);
+    }
+    else
+    {
+       $value=$self->sanitise($self->stripslashes($self->{audiofile}->$thing()));
+    }
+    return $value;
 }
 
-sub audiotype
-{
-    my $self=shift;
-    return $self->sanitise($self->stripslashes($self->{audiofile}->audiotype()));
-}
+sub artist    { return(shift->set("artist", @_));   }
+sub album     { return(shift->set("album", @_));    }
+sub track     { return(shift->set("track", @_));    }
+sub tracknum  { return(shift->set("tracknum", @_)); }
+sub v1genre   { return(shift->set("v1genre", @_));  }
+sub comment   { return(shift->set("comment", @_));  }
+sub audiotype { return(shift->set("audiotype"));    }
+sub haspic    { return(shift->set("haspic"));       }
 
-sub haspic
-{
-    return undef; # NEXTVERSION
-#    my $self=shift;
-#    return $self->{audiofile}->haspic();
-}
+sub delete_artist   { shift->{audiofile}->delete_artist();   }
+sub delete_album    { shift->{audiofile}->delete_album();    }
+sub delete_track    { shift->{audiofile}->delete_track();    }
+sub delete_tracknum { shift->{audiofile}->delete_tracknum(); }
+sub delete_year     { shift->{audiofile}->delete_year();     }
+sub delete_v1genre  { shift->{audiofile}->delete_v1genre();  }
+sub delete_comment  { shift->{audiofile}->delete_comment();  }
+sub delete_all      { shift->{audiofile}->delete_all();      }
+sub delete_genre    { shift->{audiofile}->delete_genre();    }
+sub delete_tags     { shift->{audiofile}->delete_tags();     }
 
-sub v1genre
+sub year
 {
-    my $self=shift;
-    return $self->sanitise($self->stripslashes($self->{audiofile}->v1genre()));
+    my ($self, $year)=@_;
+    if($year)
+    {
+       $year=$self->format_year($year);
+       $self->{audiofile}->year($year);
+    }
+    else
+    {
+       $year=$self->{audiofile}->year();
+    }
+    return $year;
 }
 
-sub year
+sub format_year
 {
-    my $self=shift;
-    my $year=$self->sanitise($self->stripslashes($self->{audiofile}->year()));
-    if(defined($year) && $year =~/(\d{4})/)
+    my ($self, $year)=@_;
+    if($year)
     {
-       $year=$1;
+       $year=$self->sanitise($self->stripslashes($year));
+       if(defined($year) && $year =~/(\d{4})/)
+       {
+           $year=$1;
+       }
     }
     return $year;
 }
 
+
+sub add_tags
+{
+    my($self, $tags)=@_;
+    die("FIXME: implement add_tags()\n");
+}
+
 sub tags
 {
     my $self=shift;