package com.limegroup.gnutella.metadata;
import java.io.File;
import java.io.IOException;
import com.jcraft.jorbis.Comment;
import com.jcraft.jorbis.JOrbisException;
import com.jcraft.jorbis.VorbisFile;
import com.limegroup.gnutella.xml.LimeXMLReplyCollection;
/**
* class which handles specifically the annotation of OGG files.
*
* Note: the library is obviously a java translation from C (not even C++!)
* very heavy use of arrays...
*/
public class OGGDataEditor extends AudioMetaDataEditor {
/* (non-Javadoc)
* @see com.limegroup.gnutella.mp3.MetaDataEditor#commitMetaData(java.lang.String)
*/
public int commitMetaData(String filename) {
VorbisFile vfile = null;
try{
File _file = new File(filename);
vfile = new VorbisFile(filename);
Comment [] comments = vfile.getComment();
//do things the hard way (grr)
Comment comment = (comments.length == 0 ||
comments[0]==null) ?
new Comment() : comments[0];
comment.comments=8;
comment.comment_lengths= new int[8];
byte [][] commentBytes = new byte[8][];
String tmp;
tmp = OGGMetaData.TITLE_TAG+"="+(title_!=null ? title_ : "");
commentBytes[0]=tmp.getBytes("UTF-8");
comment.comment_lengths[0] = commentBytes[0].length;
tmp=OGGMetaData.ARTIST_TAG+"="+(artist_!=null ? artist_ : "");
commentBytes[1]=tmp.getBytes("UTF-8");
comment.comment_lengths[1] = commentBytes[1].length;
tmp=OGGMetaData.ALBUM_TAG+"="+(album_!=null ? album_: "");
commentBytes[2]=tmp.getBytes("UTF-8");
comment.comment_lengths[2] = commentBytes[2].length;
tmp=OGGMetaData.COMMENT_TAG+"="+(comment_!=null ? comment_ :"");
commentBytes[3]=tmp.getBytes("UTF-8");
comment.comment_lengths[3] = commentBytes[3].length;
tmp=OGGMetaData.GENRE_TAG+"="+(genre_!=null ? genre_ : "");
commentBytes[4]=tmp.getBytes("UTF-8");
comment.comment_lengths[4] = commentBytes[4].length;
tmp=OGGMetaData.TRACK_TAG+"="+(track_ != null ? track_ : "");
commentBytes[5]=tmp.getBytes();
comment.comment_lengths[5] = commentBytes[5].length;
tmp=OGGMetaData.DATE_TAG+"="+(year_!=null ? year_ :"");
commentBytes[6]=tmp.getBytes("UTF-8");
comment.comment_lengths[6] = commentBytes[6].length;
tmp=OGGMetaData.LICENSE_TAG+"="+(license_!=null ? license_ :"");
commentBytes[7]=tmp.getBytes("UTF-8");
comment.comment_lengths[7] = commentBytes[7].length;
comment.user_comments=commentBytes;
JOrbisComment commentHandler = new JOrbisComment();
commentHandler.update(comment,_file);
}catch(JOrbisException failed){
return LimeXMLReplyCollection.RW_ERROR;
}catch(IOException failed){
return LimeXMLReplyCollection.RW_ERROR;
}
finally {
try {
if (vfile!=null)
vfile.close();
}catch(IOException ignored){};
}
return LimeXMLReplyCollection.NORMAL;
}
}