package com.limegroup.gnutella.metadata.bittorrent; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Map; import org.limewire.bittorrent.BTData; import org.limewire.bittorrent.BTDataImpl; import org.limewire.bittorrent.BTDataValueException; import org.limewire.bittorrent.bencoding.Token; import org.limewire.io.IOUtils; import com.limegroup.gnutella.metadata.MetaData; import com.limegroup.gnutella.metadata.MetaReader; /** * Converts a torrent file into a MetaData object. */ public class TorrentMetaReader implements MetaReader { @Override public MetaData parse(File torrentFile) throws IOException { FileInputStream torrentInputStream = null; try { torrentInputStream = new FileInputStream(torrentFile); Object obj = Token.parse(torrentInputStream.getChannel()); if (!(obj instanceof Map)) { throw new BTDataValueException("expected map"); } BTData btData = new BTDataImpl((Map)obj); btData.clearPieces(); // save memory return new TorrentMetaData(btData); } finally { IOUtils.close(torrentInputStream); } } @Override public String[] getSupportedExtensions() { return new String[] { "torrent" }; } }