# -----------------------------------------------------------------------------------
# mems mp3 funcs
# -----------------------------------------------------------------------------------

use strict;
#use warnings;

# -----------------------------------------------------------------------------------
# get tags
# -----------------------------------------------------------------------------------

sub get_tags {
	my $file	= shift;

        my $art1	= "";
        my $tit1 	= "";
        my $tra1 	= "";
        my $alb1 	= "";
        my $com1 	= "";
        my $gen1	= "";
        my $year1	= "";

        my $art2	= "";
        my $tit2 	= "";
        my $tra2 	= "";
        my $alb2 	= "";
        my $com2 	= "";
        my $gen2	= "";
        my $year2	= "";

	my $mp3 = MP3::Tag->new($file);
	$mp3->get_tags();

       	if (exists $mp3->{ID3v1}) {
		$art1 = $mp3->{ID3v1}->artist;
		$tit1 = $mp3->{ID3v1}->title;
		$tra1 = $mp3->{ID3v1}->track;
		$alb1 = $mp3->{ID3v1}->album;
		$com1 = $mp3->{ID3v1}->comment;
                $gen1 = $mp3->{ID3v1}->genre;
                $year1 = $mp3->{ID3v1}->year;

	}

       	if (exists $mp3->{ID3v2}) {
		$art2 = $mp3->{ID3v2}->getFrame("TPE1");
		$tit2 = $mp3->{ID3v2}->getFrame("TIT2");
		$tra2 = $mp3->{ID3v2}->getFrame("TRCK");
		$alb2 = $mp3->{ID3v2}->getFrame("TALB");
		my $com = $mp3->{ID3v2}->getFrame("COMM");
                if($com) {
			$com2 = $com->{Text};
		}
                $gen2 = $mp3->{ID3v2}->getFrame("TCON");
                $year2 = $mp3->{ID3v2}->getFrame("TYER");

                # sort out which tags are complete, file in missing :)
	        if($art2 && !$art1) {
	                $art1 = $art2;
                       	$main::id3_writeme = 1;
	        }
		elsif(!$art2 && $art1) {
                       	$main::id3_writeme = 1;
	        }

	        if($tit2 && !$tit1) {
	                $tit1 = $tit2;
                       	$main::id3_writeme = 1;
	        }
                elsif(!$tit2 && $tit1) {
                       	$main::id3_writeme = 1;
	        }

	        if($tra2 && !$tra1) {
	                $tra1 = $tra2;
                       	$main::id3_writeme = 1;
	        }
                elsif(!$tra2 && $tra1) {
                       	$main::id3_writeme = 1;
	        }

	        if($alb2 && !$alb1) {
	                $alb1 = $alb2;
                       	$main::id3_writeme = 1;
	        }
		elsif(!$alb2 && $alb1) {
                       	$main::id3_writeme = 1;
	        }

	        if($com2 && !$com1) {
	                $com1 = $com2;
                       	$main::id3_writeme = 1;
	        }
                elsif(!$com2 && $com1) {
                       	$main::id3_writeme = 1;
	        }

	        if($gen2 && !$gen1) {
	                $gen1 = $gen2;
                       	$main::id3_writeme = 1;
	        }
                elsif(!$gen2 && $gen1) {
                       	$main::id3_writeme = 1;
	        }
	        if($year2 && !$year1) {
	                $year1 = $year2;
                       	$main::id3_writeme = 1;
	        }
                elsif(!$year2 && $year1) {
                       	$main::id3_writeme = 1;
	        }
	}
	$mp3->close();

        if (exists $mp3->{ID3v1} || exists $mp3->{ID3v2}) {
		return("id3v1", $art1, $tit1, $tra1, $alb1, $gen1, $year1, $com1);
	}
	return("notag");
}

sub rm_tags {
	my $file 	= shift;
	my $opt 	= shift;

        my $mp3 = MP3::Tag->new($file);
        $mp3->get_tags();


        if($opt eq "id3v1" && exists $mp3->{ID3v1}) {
	        print "id3v1 tag from $file\n";
        	$mp3->{ID3v1}->remove_tag();
                $main::tags_rm++;
        }
        if($opt eq "id3v2" && exists $mp3->{ID3v2}) {
	        print "id3v2 tag from $file\n";
               	$mp3->{ID3v2}->remove_tag();
                $main::tags_rm++;
        }
        return;
}

sub write_tags {
	my $file = shift;

	my $art = shift;
	my $tit = shift;
	my $tra = shift;
	my $alb = shift;
	my $com = shift;
        my $gen = shift;
        my $year = shift;

	my $mp3 = MP3::Tag->new($file);

	if (!$mp3->{ID3v1}) {
		$mp3->new_tag("ID3v1");
	}

	if (!$mp3->{ID3v2}) {
		$mp3->new_tag("ID3v2");
	}

	$mp3->get_tags();

	if($art) {
		$mp3->{ID3v1}->artist($art);
		$mp3->{ID3v2}->remove_frame("TPE1");
                $mp3->{ID3v2}->add_frame("TPE1",$art);
	}
	if($tit) {
		$mp3->{ID3v1}->title($tit);
                $mp3->{ID3v2}->remove_frame("TIT2");
		$mp3->{ID3v2}->add_frame("TIT2",$tit);
	}
	if($tra) {
		$mp3->{ID3v1}->track($tra);
                $mp3->{ID3v2}->remove_frame("TRCK");
		$mp3->{ID3v2}->add_frame("TRCK",$tra);
	}
	if($alb) {
		$mp3->{ID3v1}->album($alb);
                $mp3->{ID3v2}->remove_frame("TALB");
       		$mp3->{ID3v2}->add_frame("TALB",$alb);
	}
	if($com) {
		$mp3->{ID3v1}->comment($com);
                $mp3->{ID3v2}->remove_frame("COMM");
		$mp3->{ID3v2}->add_frame("COMM","ENG","",$com);
	}
        if($gen) {
		$mp3->{ID3v1}->genre($gen);
                $mp3->{ID3v2}->remove_frame("TCON");
                $mp3->{ID3v2}->add_frame("TCON",$gen);
        }
        if($year) {
        	$mp3->{ID3v1}->year($year);
        	$mp3->{ID3v2}->remove_frame("TYER");
        	$mp3->{ID3v2}->add_frame("TYER",$year);
        }

	$mp3->{ID3v1}->write_tag();
	$mp3->{ID3v2}->write_tag();

	$mp3->close();
}

sub guess_tags {
	my $file = shift;


        my $tag = "";
        my $art = "";
        my $tra = "";
        my $tit = "";
        my $alb = "";
        my $com = "";

		# track - artist - title
		if($file =~ /^(\d+)( - |\. )(.*?)( - )(.*?)(\.mp3)/) {
			$tra = $1;
			$art = $3;
			$tit = $5;

			$tag = 1;
		}

		# track - title
		elsif($file =~ /^(\d+)( - |\. )(.*?)(\.mp3)/) {
			$tra = $1;
			$tit = $3;

			$tag = 1;
		}

		# artist - ablum - track - title
		elsif($file =~ /^(.*?)( - )(.*?)( - )(\d+)( - )(.*)(\.mp3)/) {
			$art = $1;
			$alb = $3;
			$tra = $5;
			$tit = $7;

			$tag = 1;
		}

		# mems prefered format
		# artist - track - title
		elsif($file =~ /^(.*?)( - )(\d+)( - )(.*)(\.mp3)/) {
			$art = $1;
			$tra = $3;
			$tit = $5;
			$alb = "";	# get this later

			$tag = 1;
		}

		# artist - title
		elsif($file =~ /^(.*?)( - )(.*)(\.mp3)/) {
			$art = $1;
			$tit = $3;
			$tra = "";
			$alb = "";	# get this later

			$tag = 1;
		}
	return($art, $tra, $tit, $alb);

}

1;

syntax highlighted by Code2HTML, v. 0.9.1