App-id3shit
view release on metacpan or search on metacpan
bin/id3shit view on Meta::CPAN
}
elsif(@opt_read_info) {
print scalar(@opt_read_info);
if(scalar(@opt_read_info) == 1 && $opt_read_info[0] !~ /\.mp3$/) {
my $all_mp3 = find_mp3(@opt_read_info);
show_info(@$all_mp3);
}
else {
show_info(@opt_read_tags);
}
}
elsif(@opt_write) {
my $tag = shift(@opt_write);
my $value = shift(@opt_write);
# is it a dir?
if(scalar(@opt_write) == 1 && $opt_write[0] !~ /\.mp3$/) {
my $all_mp3 = find_mp3(@opt_write);
write_tags($tag, $value, @$all_mp3);
}
else {
write_tags($tag, $value, @opt_write);
}
}
elsif(@opt_rename) {
if(scalar(@opt_rename) == 1 && $opt_write[0] !~ /\.mp3$/) {
my $all_mp3 = find_mp3(@opt_rename);
rename_by_tag(@$all_mp3);
}
else {
rename_by_tag(@opt_rename);
}
}
elsif(@opt_strip_tags) {
if(scalar(@opt_strip_tags) == 1 && $opt_strip_tags[0] !~ /\.mp3$/) {
my $all_mp3 = find_mp3(@opt_strip_tags);
strip_tags(@$all_mp3);
}
else {
strip_tags(@opt_strip_tags);
}
}
my @mp3;
sub find_mp3 {
my $dir = shift;
#return(-1) if(!-d $dir or !-f $dir);
my $i = 0;
for(glob("$dir/*")) {
++$i;
if(-d $_) {
find_mp3($_);
}
elsif(-f $_ && $_ =~ m;\.mp3$;) {
push(@mp3, $_);
}
}
print "find_mp3(): $i iterations\n" if($DEBUG);
return(\@mp3);
}
sub show_info {
my @files = @_;
return unless(@files);
for my $f(@files) {
my $info = get_mp3info($f);
print "Doesnt look like audio to me\n" and exit(1) unless($info);
printf("%12s: \033[1m%s\033[0m\n", 'File', $f);
for my $k(sort(keys(%{$info}))) {
printf("%12s: %s\n",ucfirst(lc($k)),$info->{$k}) unless(ref($info->{$k}));
}
print "\e[30;1m",'-' x 20, "\e[0m\n";
}
exit(0);
}
sub read_tags {
my $changed_tag = shift; # called from write_tags()?
my @files = @_;
if(-f $changed_tag) {
push(@files, $changed_tag); # ... nope
}
for my $f(@files) {
my $tag = get_mp3tag($f);
printf("%7s: \033[1m%s\033[0m\n",'File', $f);
for(qw(ARTIST ALBUM TITLE GENRE COMMENT)) {
if(!($tag->{$_})) {
printf("\e[31;1m%7s\e[0m: %s\n", ucfirst(lc($_)), 'Missing');
}
else {
if($_ eq uc($changed_tag)) {
printf("%7s: \033[31;1m%s\033[0m\n", ucfirst(lc($_)),$tag->{$_});
}
else {
printf("%7s: %s\n", ucfirst(lc($_)),$tag->{$_});
}
}
}
print "\e[30;1m",'-' x 20, "\e[0m\n";
}
}
sub strip_tags {
my @files = @_;
for my $f(@files) {
my $bytes_removed = remove_mp3tag($f, 'ALL');
if($bytes_removed < 0) {
printf("No tags to remove on \033[1m$f\033[0m!\n");
exit(1);
}
else {
printf("Removed %d bytes from \033[1m$f\033[0m\n", $bytes_removed);
( run in 1.206 second using v1.01-cache-2.11-cpan-71847e10f99 )