From 9178703442854a85af20031e86245c41d63b902f Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Wed, 10 Apr 2013 22:35:49 +0200 Subject: [PATCH] Show bandwidth in DCC information. --- .../pterodactylus/xdcc/ui/stdin/CommandReader.java | 37 +++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) 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 ad6cde1..5221456 100644 --- a/src/main/java/net/pterodactylus/xdcc/ui/stdin/CommandReader.java +++ b/src/main/java/net/pterodactylus/xdcc/ui/stdin/CommandReader.java @@ -110,7 +110,17 @@ public class CommandReader extends AbstractExecutionThreadService { } else if (words[0].equalsIgnoreCase("dcc")) { int counter = 0; for (DccReceiver dccReceiver : core.dccReceivers()) { - writer.write(String.format("[%d] %s (%s, %d%%%s)\n", counter++, dccReceiver.filename(), dccReceiver.size(), dccReceiver.progress() * 100 / dccReceiver.size(), dccReceiver.isRunning() ? "" : ", finished")); + writer.write(String.format("[%d] %s (%s, ", counter++, dccReceiver.filename(), dccReceiver.size())); + if (dccReceiver.isRunning()) { + writer.write(String.format("%.1f%%, %s", dccReceiver.progress() * 100.0 / dccReceiver.size(), f(dccReceiver.getCurrentRate()))); + } else { + if (dccReceiver.progress() >= dccReceiver.size()) { + writer.write(String.format("complete, %s", f(dccReceiver.getOverallRate()))); + } else { + writer.write(String.format("aborted at %.1f%%, %s", dccReceiver.progress() * 100.0 / dccReceiver.size(), f(dccReceiver.getCurrentRate()))); + } + } + writer.write("/s)\n"); } writer.write("End of DCCs.\n"); } else if (words[0].equalsIgnoreCase("get")) { @@ -140,6 +150,31 @@ public class CommandReader extends AbstractExecutionThreadService { } } + // + // PRIVATE METHODS + // + + /** + * Converts large numbers into a human-friendly format, by showing SI prefixes + * for ×1024 (K), ×1048576 (M), and ×1073741824 (G). + * + * @param number + * The number to convert + * @return The converted number + */ + private static String f(long number) { + if (number >= (1 << 30)) { + return String.format("%.1fG", number / (double) (1 << 30)); + } + if (number >= (1 << 20)) { + return String.format("%.1fM", number / (double) (1 << 20)); + } + if (number >= (1 << 10)) { + return String.format("%.1fK", number / (double) (1 << 10)); + } + return String.format("%dB", number); + } + /** Container for result information. */ private static class Result implements Comparable { -- 2.7.4