From ec0c678cc9be0b9ae42aae410e85b78a40a2d62d Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Sat, 2 Oct 2010 15:43:56 +0000 Subject: [PATCH] * i2psnark: - Add link to finished torrent in message box - Don't let one bad torrent prevent others from starting or stopping --- .../java/src/org/klomp/snark/Snark.java | 2 +- .../src/org/klomp/snark/SnarkManager.java | 31 +++++++++++++++---- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/Snark.java b/apps/i2psnark/java/src/org/klomp/snark/Snark.java index c2afec346f..9d6cd94600 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Snark.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Snark.java @@ -437,7 +437,7 @@ public class Snark try { storage.close(); } catch (IOException ioee) { ioee.printStackTrace(); } - fatal("Could not create storage", ioe); + fatal("Could not check or create storage", ioe); } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index 59ab86a129..1ddaa6b036 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -439,7 +439,10 @@ public class SnarkManager implements Snark.CompleteListener { return null; } + /** @throws RuntimeException via Snark.fatal() */ public void addTorrent(String filename) { addTorrent(filename, false); } + + /** @throws RuntimeException via Snark.fatal() */ public void addTorrent(String filename, boolean dontAutoStart) { if ((!dontAutoStart) && !_util.connected()) { addMessage(_("Connecting to I2P")); @@ -724,9 +727,13 @@ public class SnarkManager implements Snark.CompleteListener { /** two listeners */ public void torrentComplete(Snark snark) { - File f = new File(snark.torrent); + StringBuilder buf = new StringBuilder(256); + buf.append("<a href=\"/i2psnark/").append(snark.storage.getBaseName()); + if (snark.meta.getFiles() != null) + buf.append('/'); + buf.append("\">").append(snark.storage.getBaseName()).append("</a>"); long len = snark.meta.getTotalLength(); - addMessage(_("Download finished: \"{0}\"", f.getName()) + " (" + _("size: {0}B", DataHelper.formatSize2(len)) + ')'); + addMessage(_("Download finished: {0}", buf.toString()) + " (" + _("size: {0}B", DataHelper.formatSize2(len)) + ')'); updateStatus(snark); } @@ -736,7 +743,7 @@ public class SnarkManager implements Snark.CompleteListener { private void monitorTorrents(File dir) { String fileNames[] = dir.list(TorrentFilenameFilter.instance()); - List foundNames = new ArrayList(0); + List<String> foundNames = new ArrayList(0); if (fileNames != null) { for (int i = 0; i < fileNames.length; i++) { try { @@ -747,7 +754,7 @@ public class SnarkManager implements Snark.CompleteListener { } } - Set existingNames = listTorrentFiles(); + Set<String> existingNames = listTorrentFiles(); // lets find new ones first... for (int i = 0; i < foundNames.size(); i++) { if (existingNames.contains(foundNames.get(i))) { @@ -755,7 +762,13 @@ public class SnarkManager implements Snark.CompleteListener { } else { if (shouldAutoStart() && !_util.connect()) addMessage(_("Unable to connect to I2P!")); - addTorrent((String)foundNames.get(i), !shouldAutoStart()); + try { + // Snark.fatal() throws a RuntimeException + // don't let one bad torrent kill the whole loop + addTorrent(foundNames.get(i), !shouldAutoStart()); + } catch (Exception e) { + addMessage(_("Unable to add {0}", foundNames.get(i)) + ": " + e); + } } } // now lets see which ones have been removed... @@ -765,7 +778,13 @@ public class SnarkManager implements Snark.CompleteListener { // known and still there. noop } else { // known, but removed. drop it - stopTorrent(name, true); + try { + // Snark.fatal() throws a RuntimeException + // don't let one bad torrent kill the whole loop + stopTorrent(name, true); + } catch (Exception e) { + // don't bother with message + } } } } -- GitLab