From 397bf4314716c3b38223ae3468d5408bd76e2bb2 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Sun, 4 Aug 2019 20:29:46 +0000 Subject: [PATCH] i2psnark: Fix autostart to start only torrents running previously, save torrent running status on torrent stop when autostart is enabled, remove dup call to startTorrent() (ticket #2120) --- .../java/src/org/klomp/snark/CompleteListener.java | 5 +++++ apps/i2psnark/java/src/org/klomp/snark/Snark.java | 5 ++++- apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java | 9 +++++---- apps/i2psnark/java/src/org/klomp/snark/UpdateRunner.java | 5 +++++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/CompleteListener.java b/apps/i2psnark/java/src/org/klomp/snark/CompleteListener.java index 353825be8b..97d510afbd 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/CompleteListener.java +++ b/apps/i2psnark/java/src/org/klomp/snark/CompleteListener.java @@ -78,4 +78,9 @@ public interface CompleteListener { * @since 0.9.31 */ public void locked_saveComments(Snark snark, CommentSet comments); + + /** + * @since 0.9.42 + */ + public boolean shouldAutoStart(); } diff --git a/apps/i2psnark/java/src/org/klomp/snark/Snark.java b/apps/i2psnark/java/src/org/klomp/snark/Snark.java index 58a26962d6..6aba06ee2f 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Snark.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Snark.java @@ -648,7 +648,10 @@ public class Snark // TODO: Cache the config-in-mem to compare vs config-on-disk // (needed for auto-save to not double-save in some cases) long nowUploaded = getUploaded(); - boolean changed = storage.isChanged() || nowUploaded != savedUploaded; + // If autoStart is enabled, always save the config, so we know + // whether to start it up next time + boolean changed = storage.isChanged() || nowUploaded != savedUploaded || + (completeListener != null && completeListener.shouldAutoStart()); try { storage.close(); } catch (IOException ioe) { diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index 7b37568ee8..0872c476ab 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -1537,6 +1537,7 @@ public class SnarkManager implements CompleteListener, ClientApp { * * @param filename the absolute path to save the metainfo to, generally ending in ".torrent" * @param baseFile may be null, if so look in dataDir + * @param dontAutoStart must be false, AND running=true or null in torrent config file, to start * @throws RuntimeException via Snark.fatal() * @return success */ @@ -1549,6 +1550,7 @@ public class SnarkManager implements CompleteListener, ClientApp { * * @param filename the absolute path to save the metainfo to, generally ending in ".torrent" * @param baseFile may be null, if so look in dataDir + * @param dontAutoStart must be false, AND running=true or null in torrent config file, to start * @param dataDir must exist, or null to default to snark data directory * @throws RuntimeException via Snark.fatal() * @return success @@ -1652,8 +1654,6 @@ public class SnarkManager implements CompleteListener, ClientApp { synchronized (_snarks) { putSnark(filename, torrent); } - if (shouldAutoStart()) - torrent.startTorrent(); } catch (IOException ioe) { // close before rename/delete for windows if (fis != null) try { fis.close(); fis = null; } catch (IOException ioe2) {} @@ -2705,16 +2705,17 @@ public class SnarkManager implements CompleteListener, ClientApp { if (_log.shouldLog(Log.DEBUG)) _log.debug("DirMon found: " + DataHelper.toString(foundNames) + " existing: " + DataHelper.toString(existingNames)); // lets find new ones first... + boolean shouldStart = shouldAutoStart(); for (String name : foundNames) { if (existingNames.contains(name)) { // already known. noop } else { - if (shouldAutoStart() && !_util.connect()) + if (shouldStart && !_util.connect()) addMessage(_t("Unable to connect to I2P!")); try { // Snark.fatal() throws a RuntimeException // don't let one bad torrent kill the whole loop - boolean ok = addTorrent(name, null, !shouldAutoStart()); + boolean ok = addTorrent(name, null, !shouldStart); if (!ok) { addMessage(_t("Error: Could not add the torrent {0}", name)); _log.error("Unable to add the torrent " + name); diff --git a/apps/i2psnark/java/src/org/klomp/snark/UpdateRunner.java b/apps/i2psnark/java/src/org/klomp/snark/UpdateRunner.java index 3c04feea9c..fea3dc4b6d 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/UpdateRunner.java +++ b/apps/i2psnark/java/src/org/klomp/snark/UpdateRunner.java @@ -314,6 +314,11 @@ class UpdateRunner implements UpdateTask, CompleteListener { _smgr.locked_saveComments(snark, comments); } + /** @since 0.9.42 */ + public boolean shouldAutoStart() { + return _smgr.shouldAutoStart(); + } + //////// end CompleteListener methods private static String linkify(String url) { -- GitLab