Skip to content

Commit

Permalink
Display number of seconds left correctly when show seconds flag is used
Browse files Browse the repository at this point in the history
  • Loading branch information
ripcurlx committed Jan 31, 2018
1 parent 8b14f6b commit 03d8dc6
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 49 deletions.
60 changes: 14 additions & 46 deletions gui/src/main/java/io/bisq/gui/util/BSFormatter.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import io.bisq.core.offer.OfferPayload;
import io.bisq.network.p2p.NodeAddress;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.time.DurationFormatUtils;
import org.bitcoinj.core.Coin;
import org.bitcoinj.core.Monetary;
Expand Down Expand Up @@ -492,7 +493,7 @@ public String formatDurationAsWords(long durationMillis) {
}

public static String formatDurationAsWords(long durationMillis, boolean showSeconds) {
String format;
String format = "";
String second = Res.get("time.second");
String minute = Res.get("time.minute");
String hour = Res.get("time.hour").toLowerCase();
Expand All @@ -501,55 +502,22 @@ public static String formatDurationAsWords(long durationMillis, boolean showSeco
String hours = Res.get("time.hours");
String minutes = Res.get("time.minutes");
String seconds = Res.get("time.seconds");
if (showSeconds) {
format = "d\' " + days + ", \'H\' " + hours + ", \'m\' " + minutes + ", \'s\' " + seconds + "\'";
} else
format = "d\' " + days + ", \'H\' " + hours + ", \'m\' " + minutes + "\'";
String duration = DurationFormatUtils.formatDuration(durationMillis, format);
String tmp;
duration = " " + duration;
tmp = StringUtils.replaceOnce(duration, " 0 " + days, "");
if (tmp.length() != duration.length()) {
duration = tmp;
tmp = StringUtils.replaceOnce(tmp, " 0 " + hours, "");
if (tmp.length() != duration.length()) {
tmp = StringUtils.replaceOnce(tmp, " 0 " + minutes, "");
duration = tmp;
if (tmp.length() != tmp.length()) {
duration = StringUtils.replaceOnce(tmp, " 0 " + seconds, "");
}
}
}

if (duration.length() != 0) {
duration = duration.substring(1);
if (durationMillis >= DateUtils.MILLIS_PER_DAY) {
format = "d\' " + days + ", \'";
}

tmp = StringUtils.replaceOnce(duration, " 0 " + seconds, "");

if (tmp.length() != duration.length()) {
duration = tmp;
tmp = StringUtils.replaceOnce(tmp, " 0 " + minutes, "");
if (tmp.length() != duration.length()) {
duration = tmp;
tmp = StringUtils.replaceOnce(tmp, " 0 " + hours, "");
if (tmp.length() != duration.length()) {
duration = StringUtils.replaceOnce(tmp, " 0 " + days, "");
}
}
}
if (showSeconds) {
format += "H\' " + hours + ", \'m\' " + minutes + ", \'s\' " + seconds + "\'";
} else
format += "H\' " + hours + ", \'m\' " + minutes + "\'";

String duration = durationMillis > 0 ? DurationFormatUtils.formatDuration(durationMillis, format) : Res.get("formatter.tradePeriodOver");

duration = " " + duration;
duration = StringUtils.replaceOnce(duration, " 1 " + seconds, " 1 " + second);
duration = StringUtils.replaceOnce(duration, " 1 " + minutes, " 1 " + minute);
duration = StringUtils.replaceOnce(duration, " 1 " + hours, " 1 " + hour);
duration = StringUtils.replaceOnce(duration, " 1 " + days, " 1 " + day);
if (duration.startsWith(" ,"))
duration = duration.replace(" ,", "");
else if (duration.startsWith(", "))
duration = duration.replace(", ", "");
if (duration.equals(""))
duration = Res.get("formatter.tradePeriodOver");
duration = StringUtils.replaceOnce(duration, "1 " + seconds, "1 " + second);
duration = StringUtils.replaceOnce(duration, "1 " + minutes, "1 " + minute);
duration = StringUtils.replaceOnce(duration, "1 " + hours, "1 " + hour);
duration = StringUtils.replaceOnce(duration, "1 " + days, "1 " + day);
return duration.trim();
}

Expand Down
20 changes: 17 additions & 3 deletions gui/src/test/java/io/bisq/gui/util/BSFormatterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,18 @@

public class BSFormatterTest {

private BSFormatter formatter;

@Before
public void setup() {
Locale.setDefault(new Locale("en", "US"));
formatter = new BSFormatter();
Res.setBaseCurrencyCode("BTC");
Res.setBaseCurrencyName("Bitcoin");
}

@Test
public void testIsValid() {
BSFormatter formatter = new BSFormatter();
Res.setBaseCurrencyCode("BTC");
Res.setBaseCurrencyName("Bitcoin");
assertEquals("0 days", formatter.formatAccountAge(TimeUnit.HOURS.toMillis(23)));
assertEquals("0 days", formatter.formatAccountAge(0));
assertEquals("0 days", formatter.formatAccountAge(-1));
Expand All @@ -46,4 +48,16 @@ public void testIsValid() {
assertEquals("30 days", formatter.formatAccountAge(TimeUnit.DAYS.toMillis(30)));
assertEquals("60 days", formatter.formatAccountAge(TimeUnit.DAYS.toMillis(60)));
}

@Test
public void testFormatDurationAsWords() {
assertEquals("1 hour, 0 minutes", formatter.formatDurationAsWords(60 * 60 * 1000));
assertEquals("1 day, 0 hours, 0 minutes", formatter.formatDurationAsWords(24 * 60 * 60 * 1000));
assertEquals("2 days, 0 hours, 1 minute", formatter.formatDurationAsWords((2 * 24 * 60 + 1) * 60 * 1000));
assertEquals("2 days, 0 hours, 2 minutes", formatter.formatDurationAsWords((2 * 24 * 60 + 2) * 60 * 1000));
assertEquals("1 hour, 0 minutes, 0 seconds", formatter.formatDurationAsWords(60 * 60 * 1000, true));
assertEquals("1 hour, 0 minutes, 1 second", formatter.formatDurationAsWords((60 * 60 + 1) * 1000, true));
assertEquals("1 hour, 0 minutes, 2 seconds", formatter.formatDurationAsWords((60 * 60 + 2) * 1000, true));
assertEquals("Trade period is over", formatter.formatDurationAsWords(0));
}
}

0 comments on commit 03d8dc6

Please sign in to comment.