}
private TorrentInfo addTorrent(String sFileName,
final String sOriginatingLocation) {
TorrentInfo info = null;
TOTorrent torrent = null;
File torrentFile;
boolean bDeleteFileOnCancel = false;
// Make a copy if user wants that. We'll delete it when we cancel, if we
// actually made a copy.
try {
if (sFileName.startsWith("file://localhost/")) {
sFileName = UrlUtils.decode(sFileName.substring(16));
}
final File fOriginal = new File(sFileName);
if (!fOriginal.isFile() || !fOriginal.exists()) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
if (shell == null)
new MessageSlideShell(Display.getCurrent(), SWT.ICON_ERROR,
"OpenTorrentWindow.mb.openError", fOriginal.toString(), new String[] {
UrlUtils.decode(sOriginatingLocation),
"Not a File"
}, -1 );
else {
MessageBoxShell mb = new MessageBoxShell(SWT.OK,
"OpenTorrentWindow.mb.openError", new String[] {
sOriginatingLocation,
"Not a File"
});
mb.open(null);
}
}
});
return null;
}
if (fOriginal.length() > 20*1024*1024) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
if (shell == null)
new MessageSlideShell(Display.getCurrent(), SWT.ICON_ERROR,
"OpenTorrentWindow.mb.openError", fOriginal.toString(), new String[] {
UrlUtils.decode(sOriginatingLocation),
"Too large to be a torrent"
}, -1 );
else {
MessageBoxShell mb = new MessageBoxShell(SWT.OK,
"OpenTorrentWindow.mb.openError", new String[] {
sOriginatingLocation,
"Too large to be a torrent"
});
mb.open(null);
}
}
});
return null;
}
torrentFile = TorrentUtils.copyTorrentFileToSaveDir(fOriginal, true);
bDeleteFileOnCancel = !fOriginal.equals(torrentFile);
// TODO if the files are still equal, and it isn't in the save
// dir, we should copy it to a temp file in case something
// re-writes it. No need to copy a torrent coming from the
// downloader though..
} catch (IOException e1) {
// Use torrent in wherever it is and hope for the best
// XXX Should error instead?
torrentFile = new File(sFileName);
}
VuzeFileHandler vfh = VuzeFileHandler.getSingleton();
VuzeFile vf = vfh.loadVuzeFile( torrentFile );
if ( vf != null ){
vfh.handleFiles( new VuzeFile[]{ vf }, VuzeFileComponent.COMP_TYPE_NONE );
return null;
}
// Do a quick check to see if it's a torrent
if (!TorrentUtil.isFileTorrent(torrentFile, shellForChildren,
torrentFile.getName())) {
if (bDeleteFileOnCancel) {
torrentFile.delete();
}
return null;
}
// Load up the torrent, see it it's real
try {
torrent = TorrentUtils.readFromFile(torrentFile, false);
} catch (final TOTorrentException e) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
if (shell == null)
new MessageSlideShell(Display.getCurrent(), SWT.ICON_ERROR,
"OpenTorrentWindow.mb.openError", Debug.getStackTrace(e),
new String[] {
sOriginatingLocation,
e.getMessage()
}, -1 );
else {
MessageBoxShell mb = new MessageBoxShell(SWT.OK,
"OpenTorrentWindow.mb.openError", new String[] {
sOriginatingLocation,
e.getMessage()
});
mb.open(null);
}
}
});
if (bDeleteFileOnCancel)
torrentFile.delete();
return null;
}
String sExistingName = null;
try {
HashWrapper hash = torrent.getHashWrapper();
if (hash != null) {
for (int i = 0; i < torrentList.size(); i++) {
try {
TorrentInfo existing = (TorrentInfo) torrentList.get(i);
if (existing.torrent.getHashWrapper().equals(hash)) {