package com.limegroup.gnutella.metadata.audio.writer; import org.jaudiotagger.audio.AudioFile; import org.jaudiotagger.audio.mp3.MP3File; import org.jaudiotagger.tag.Tag; import org.jaudiotagger.tag.id3.ID3v11Tag; import org.jaudiotagger.tag.id3.ID3v1Tag; import org.jaudiotagger.tag.id3.ID3v23Tag; import com.limegroup.gnutella.metadata.audio.AudioMetaData; /** * Returns the correct ID3 tag for the mp3. ID3v2 tags are considered better than * version ID3v1 tags. There for if both tags exists, the ID3v2 tag is updated. * If no tag exists yet, creates and returns an ID3v2.3. If we happen across a * ID3v1.0 tag, we update it to a ID3v1.1b tag which adds comments, track and genre. */ public class MP3DataEditor extends AudioDataEditor { @Override protected Tag createTag(AudioFile audioFile, AudioMetaData audioData) { if( audioFile.getTag() == null ) return new ID3v23Tag(); MP3File mp3File = (MP3File)audioFile; // if v2 tag is available, use that one if(mp3File.hasID3v2Tag()) { return mp3File.getID3v2Tag(); } else if( mp3File.hasID3v1Tag()) { ID3v1Tag tag = mp3File.getID3v1Tag(); // if we try to write a copyright to file, must be ID3v2 tag if( audioData.getLicense() != null && !audioData.getLicense().equals("")) { return new ID3v23Tag(tag); } else if( tag instanceof ID3v11Tag ) { return tag; } else { // v1.0 tags don't support track or genres. Being that its used so rarely, just update // the tag to v1.1b to not break our implementation return new ID3v11Tag(tag); } } else { // this should never happen but just in case return new ID3v23Tag(); } } @Override public String[] getSupportedExtensions() { return new String[] { "mp3" }; } }