i2psnark: Add recheck/start/stop buttons to details page (ticket #372)

remove dup CSS item
This commit is contained in:
zzz
2015-09-19 17:05:09 +00:00
parent 462c882f4e
commit 287f94ad19
8 changed files with 176 additions and 29 deletions

View File

@@ -8,6 +8,7 @@ import java.io.FilenameFilter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -2364,28 +2365,36 @@ public class SnarkManager implements CompleteListener {
public void startTorrent(byte[] infoHash) {
for (Snark snark : _snarks.values()) {
if (DataHelper.eq(infoHash, snark.getInfoHash())) {
if (snark.isStarting() || !snark.isStopped()) {
addMessage("Torrent already started");
return;
}
boolean connected = _util.connected();
if ((!connected) && !_util.isConnecting())
addMessage(_("Opening the I2P tunnel"));
addMessage(_("Starting up torrent {0}", snark.getBaseName()));
if (connected) {
snark.startTorrent();
} else {
// mark it for the UI
snark.setStarting();
(new I2PAppThread(new ThreadedStarter(snark), "TorrentStarter", true)).start();
try { Thread.sleep(200); } catch (InterruptedException ie) {}
}
startTorrent(snark);
return;
}
}
addMessage("Torrent not found?");
}
/**
* If not connected, thread it, otherwise inline
* @since 0.9.23
*/
public void startTorrent(Snark snark) {
if (snark.isStarting() || !snark.isStopped()) {
addMessage("Torrent already started");
return;
}
boolean connected = _util.connected();
if ((!connected) && !_util.isConnecting())
addMessage(_("Opening the I2P tunnel"));
addMessage(_("Starting up torrent {0}", snark.getBaseName()));
if (connected) {
snark.startTorrent();
} else {
// mark it for the UI
snark.setStarting();
(new I2PAppThread(new ThreadedStarter(snark), "TorrentStarter", true)).start();
try { Thread.sleep(200); } catch (InterruptedException ie) {}
}
}
/**
* If not connected, thread it, otherwise inline
* @since 0.9.1
@@ -2498,6 +2507,55 @@ public class SnarkManager implements CompleteListener {
}
}
}
/**
* Threaded. Torrent must be stopped.
* @since 0.9.23
*/
public void recheckTorrent(Snark snark) {
if (snark.isStarting() || !snark.isStopped()) {
addMessage("Cannot check " + snark.getBaseName() + ", torrent already started");
return;
}
Storage storage = snark.getStorage();
if (storage == null) {
addMessage("Cannot check " + snark.getBaseName() + ", no storage");
return;
}
(new I2PAppThread(new ThreadedRechecker(snark), "TorrentRechecker", true)).start();
try { Thread.sleep(200); } catch (InterruptedException ie) {}
}
/**
* @since 0.9.23
*/
private class ThreadedRechecker implements Runnable {
private final Snark snark;
/** must have non-null storage */
public ThreadedRechecker(Snark s) { snark = s; }
public void run() {
try {
if (_log.shouldWarn())
_log.warn("Starting recheck of " + snark.getBaseName());
boolean changed = snark.getStorage().recheck();
if (changed)
updateStatus(snark);
if (_log.shouldWarn())
_log.warn("Finished recheck of " + snark.getBaseName() + " changed? " + changed);
if (changed) {
int pieces = snark.getPieces();
double completion = (pieces - snark.getNeeded()) / (double) pieces;
String complete = (new DecimalFormat("0.00%")).format(completion);
addMessage(_("Finished recheck of torrent {0}, now {1} complete", snark.getBaseName(), complete));
} else {
addMessage(_("Finished recheck of torrent {0}, unchanged", snark.getBaseName()));
}
} catch (Exception e) {
_log.error("Error rechecking " + snark.getBaseName(), e);
addMessage(_("Error checking the torrent {0}", snark.getBaseName()) + ": " + e);
}
}
}
/**
* ignore case, current locale