* some cleanup
This commit is contained in:
parent
25e5bde57b
commit
68dc5b61d0
|
@ -6,36 +6,47 @@ import java.io.BufferedInputStream;
|
|||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
||||
public class Torrent {
|
||||
|
||||
private String name;
|
||||
private String encoding;
|
||||
private String createdBy;
|
||||
private String announce;
|
||||
private String comment;
|
||||
private Long creationDate;
|
||||
private final String name;
|
||||
private final String encoding;
|
||||
private final String createdBy;
|
||||
private final String announce;
|
||||
private final String comment;
|
||||
private final Long creationDate;
|
||||
private final Long pieceLength;
|
||||
|
||||
private List<Entry> files;
|
||||
private final List<Entry> files;
|
||||
|
||||
private boolean singleFileTorrent;
|
||||
private final boolean singleFileTorrent;
|
||||
|
||||
|
||||
public Torrent(File torrent) throws IOException {
|
||||
BufferedInputStream in = new BufferedInputStream(new FileInputStream(torrent));
|
||||
Map<?, ?> torrentMap = null;
|
||||
|
||||
try {
|
||||
torrentMap = BDecoder.decode(in);
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
this(new FileInputStream(torrent));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load torrent data from an <code>InputStream</code>. The given stream will be closed
|
||||
* after data has been read.
|
||||
*/
|
||||
public Torrent(InputStream inputStream) throws IOException {
|
||||
this(decodeTorrent(inputStream));
|
||||
}
|
||||
|
||||
|
||||
public Torrent(Map<?, ?> torrentMap) {
|
||||
|
||||
Charset charset = Charset.forName("UTF-8");
|
||||
|
||||
|
@ -43,8 +54,9 @@ public class Torrent {
|
|||
|
||||
try {
|
||||
charset = Charset.forName(encoding);
|
||||
} catch (Exception e) {
|
||||
|
||||
} catch (IllegalArgumentException e) {
|
||||
// invalid encoding, just keep using UTF-8
|
||||
Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.WARNING, e.getMessage());
|
||||
}
|
||||
|
||||
createdBy = decodeString(torrentMap.get("created by"), charset);
|
||||
|
@ -55,17 +67,19 @@ public class Torrent {
|
|||
Map<?, ?> infoMap = (Map<?, ?>) torrentMap.get("info");
|
||||
|
||||
name = decodeString(infoMap.get("name"), charset);
|
||||
pieceLength = (Long) infoMap.get("piece length");
|
||||
|
||||
if (infoMap.containsKey("files")) {
|
||||
// torrent contains multiple entries
|
||||
singleFileTorrent = false;
|
||||
|
||||
files = new ArrayList<Entry>();
|
||||
List<Entry> entries = new ArrayList<Entry>();
|
||||
|
||||
for (Object fileMapObject : (List<?>) infoMap.get("files")) {
|
||||
Map<?, ?> fileMap = (Map<?, ?>) fileMapObject;
|
||||
List<?> pathList = (List<?>) fileMap.get("path");
|
||||
|
||||
StringBuilder pathBuffer = new StringBuilder();
|
||||
StringBuilder pathBuilder = new StringBuilder();
|
||||
String entryName = null;
|
||||
|
||||
Iterator<?> iterator = pathList.iterator();
|
||||
|
@ -74,8 +88,8 @@ public class Torrent {
|
|||
String pathElement = decodeString(iterator.next(), charset);
|
||||
|
||||
if (iterator.hasNext()) {
|
||||
pathBuffer.append(pathElement);
|
||||
pathBuffer.append("/");
|
||||
pathBuilder.append(pathElement);
|
||||
pathBuilder.append("/");
|
||||
} else {
|
||||
// the last element in the path list is the filename
|
||||
entryName = pathElement;
|
||||
|
@ -84,25 +98,26 @@ public class Torrent {
|
|||
|
||||
Long length = decodeLong(fileMap.get("length"));
|
||||
|
||||
files.add(new Entry(entryName, length, pathBuffer.toString()));
|
||||
entries.add(new Entry(entryName, length, pathBuilder.toString()));
|
||||
}
|
||||
|
||||
files = Collections.unmodifiableList(entries);
|
||||
} else {
|
||||
// single file torrent
|
||||
singleFileTorrent = true;
|
||||
files = new ArrayList<Entry>(1);
|
||||
|
||||
Long length = decodeLong(infoMap.get("length"));
|
||||
|
||||
files.add(new Entry(name, length, ""));
|
||||
files = Collections.singletonList(new Entry(name, length, ""));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private String decodeString(Object bytearray, Charset charset) {
|
||||
if (bytearray == null)
|
||||
private String decodeString(Object byteArray, Charset charset) {
|
||||
if (byteArray == null)
|
||||
return null;
|
||||
|
||||
return new String((byte[]) bytearray, charset);
|
||||
return new String((byte[]) byteArray, charset);
|
||||
}
|
||||
|
||||
|
||||
|
@ -149,19 +164,35 @@ public class Torrent {
|
|||
}
|
||||
|
||||
|
||||
public Long getPieceLength() {
|
||||
return pieceLength;
|
||||
}
|
||||
|
||||
|
||||
public boolean isSingleFileTorrent() {
|
||||
return singleFileTorrent;
|
||||
}
|
||||
|
||||
|
||||
private static Map<?, ?> decodeTorrent(InputStream torrent) throws IOException {
|
||||
BufferedInputStream in = new BufferedInputStream(torrent);
|
||||
|
||||
try {
|
||||
return BDecoder.decode(in);
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static class Entry {
|
||||
|
||||
private String name;
|
||||
private long length;
|
||||
private String path;
|
||||
private final String name;
|
||||
private final Long length;
|
||||
private final String path;
|
||||
|
||||
|
||||
public Entry(String name, Long length, String path) {
|
||||
public Entry(String name, long length, String path) {
|
||||
this.name = name;
|
||||
this.length = length;
|
||||
this.path = path;
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
|
||||
package net.sourceforge.filebot.ui.transferablepolicies;
|
||||
|
||||
|
||||
import java.awt.datatransfer.Transferable;
|
||||
|
||||
|
||||
public class NullTransferablePolicy implements TransferablePolicy {
|
||||
|
||||
@Override
|
||||
public boolean accept(Transferable tr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void handleTransferable(Transferable tr, boolean add) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue