From 17ab500f0e0e366f509bbdf3891ad2c53ea74d7e Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Thu, 8 Aug 2013 02:20:14 +0200 Subject: [PATCH] Show estimated time left on running downloads. --- .../pterodactylus/xdcc/ui/stdin/CommandReader.java | 27 ++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/pterodactylus/xdcc/ui/stdin/CommandReader.java b/src/main/java/net/pterodactylus/xdcc/ui/stdin/CommandReader.java index 5feabd7..26696f9 100644 --- a/src/main/java/net/pterodactylus/xdcc/ui/stdin/CommandReader.java +++ b/src/main/java/net/pterodactylus/xdcc/ui/stdin/CommandReader.java @@ -139,15 +139,15 @@ public class CommandReader extends AbstractExecutionThreadService { } writer.write(String.format("[%d] %s from %s (%s, ", counter++, dccReceiver.filename(), download.bot().name(), f(dccReceiver.size()))); if (dccReceiver.isRunning()) { - writer.write(String.format("%.1f%%, %s", dccReceiver.progress() * 100.0 / dccReceiver.size(), f(dccReceiver.currentRate()))); + writer.write(String.format("%.1f%%, %s/s, %s", dccReceiver.progress() * 100.0 / dccReceiver.size(), f(dccReceiver.currentRate()), getTimeLeft(dccReceiver))); } else { if (dccReceiver.progress() >= dccReceiver.size()) { - writer.write(String.format("complete, %s", f(dccReceiver.overallRate()))); + writer.write(String.format("complete, %s/s", f(dccReceiver.overallRate()))); } else { - writer.write(String.format("aborted at %.1f%%, %s", dccReceiver.progress() * 100.0 / dccReceiver.size(), f(dccReceiver.currentRate()))); + writer.write(String.format("aborted at %.1f%%, %s/s", dccReceiver.progress() * 100.0 / dccReceiver.size(), f(dccReceiver.currentRate()))); } } - writer.write("/s)\n"); + writer.write(")\n"); } writeLine("End of DCCs."); } else if (words[0].equalsIgnoreCase("get")) { @@ -315,6 +315,25 @@ public class CommandReader extends AbstractExecutionThreadService { return String.format("%dB", number); } + /** + * Returns the estimated time left for the given transfer. + * + * @param dccReceiver + * The DCC receiver to get the time left for + * @return The time left for the transfer, or “unknown” if the time can not be + * estimated + */ + private static String getTimeLeft(DccReceiver dccReceiver) { + if ((dccReceiver.size() == -1) || (dccReceiver.currentRate() == 0)) { + return "unknown"; + } + long secondsLeft = (dccReceiver.size() - dccReceiver.progress()) / dccReceiver.currentRate(); + if (secondsLeft > 3600) { + return String.format("%02d:%02d:%02d", secondsLeft / 3600, (secondsLeft / 60) % 60, secondsLeft % 60); + } + return String.format("%02d:%02d", (secondsLeft / 60) % 60, secondsLeft % 60); + } + /** Container for result information. */ private static class Result implements Comparable { -- 2.7.4