From: Ian Beckwith Date: Sat, 30 Oct 2010 01:13:51 +0000 (+0100) Subject: Prepare AudioFile for writing X-Git-Url: http://erislabs.net/gitweb/?p=id3fs.git;a=commitdiff_plain;h=c8be4bd59dada9948d921e3ec5c49baea26fc910 Prepare AudioFile for writing --- diff --git a/bin/id3fs-tag b/bin/id3fs-tag old mode 100644 new mode 100755 index 3656ea7..0911f45 --- a/bin/id3fs-tag +++ b/bin/id3fs-tag @@ -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__ diff --git a/lib/ID3FS/AudioFile.pm b/lib/ID3FS/AudioFile.pm index bb91604..5c45984 100644 --- a/lib/ID3FS/AudioFile.pm +++ b/lib/ID3FS/AudioFile.pm @@ -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;