improve status bar feedback when starting bwt, syncing and scanning

This commit is contained in:
Craig Raw 2021-01-13 20:25:55 +02:00
parent 64a9cce837
commit ff828b483b
5 changed files with 61 additions and 13 deletions

View file

@ -1196,7 +1196,7 @@ public class AppController implements Initializable {
if(wait != null && wait.getStatus() == Animation.Status.RUNNING) {
wait.stop();
}
wait = new PauseTransition(Duration.seconds(20));
wait = new PauseTransition(Duration.seconds(event.getShowDuration()));
wait.setOnFinished((e) -> {
if(statusBar.getText().equals(event.getStatus())) {
statusBar.setText("");
@ -1272,14 +1272,20 @@ public class AppController implements Initializable {
@Subscribe
public void bwtBootStatus(BwtBootStatusEvent event) {
serverToggle.setDisable(true);
statusUpdated(new StatusEvent(event.getStatus()));
statusUpdated(new StatusEvent(event.getStatus(), 60));
if(statusTimeline == null || statusTimeline.getStatus() != Animation.Status.RUNNING) {
statusBar.setProgress(0.01);
}
}
@Subscribe
public void bwtSyncStatus(BwtSyncStatusEvent event) {
serverToggle.setDisable(false);
if((AppServices.isConnecting() || AppServices.isConnected()) && !event.isCompleted()) {
statusUpdated(new StatusEvent(event.getStatus()));
statusUpdated(new StatusEvent("Syncing... (" + event.getProgress() + "% complete, synced to " + event.getTipAsString() + ")"));
if(event.getProgress() > 0 && (statusTimeline == null || statusTimeline.getStatus() != Animation.Status.RUNNING)) {
statusBar.setProgress((double)event.getProgress() / 100);
}
}
}
@ -1287,13 +1293,19 @@ public class AppController implements Initializable {
public void bwtScanStatus(BwtScanStatusEvent event) {
serverToggle.setDisable(true);
if((AppServices.isConnecting() || AppServices.isConnected()) && !event.isCompleted()) {
statusUpdated(new StatusEvent(event.getStatus()));
statusUpdated(new StatusEvent("Scanning... (" + event.getProgress() + "% complete" + (event.getProgress() > 30 ? ", " + event.getRemainingAsString() + " remaining)" : ")")));
if(event.getProgress() > 0 && (statusTimeline == null || statusTimeline.getStatus() != Animation.Status.RUNNING)) {
statusBar.setProgress((double)event.getProgress() / 100);
}
}
}
@Subscribe
public void bwtReadyStatus(BwtReadyStatusEvent event) {
serverToggle.setDisable(false);
if(statusTimeline == null || statusTimeline.getStatus() != Animation.Status.RUNNING) {
statusBar.setProgress(0);
}
}
@Subscribe
@ -1302,6 +1314,9 @@ public class AppController implements Initializable {
if(!AppServices.isConnecting() && !AppServices.isConnected() && !statusBar.getText().startsWith("Connection error")) {
statusUpdated(new StatusEvent("Disconnected"));
}
if(statusTimeline == null || statusTimeline.getStatus() != Animation.Status.RUNNING) {
statusBar.setProgress(0);
}
}
@Subscribe

View file

@ -1,15 +1,15 @@
package com.sparrowwallet.sparrow.event;
import java.util.Date;
import java.time.Duration;
public class BwtScanStatusEvent extends BwtStatusEvent {
private final int progress;
private final Date eta;
private final Duration remainingDuration;
public BwtScanStatusEvent(String status, int progress, Date eta) {
public BwtScanStatusEvent(String status, int progress, Duration remainingDuration) {
super(status);
this.progress = progress;
this.eta = eta;
this.remainingDuration = remainingDuration;
}
public int getProgress() {
@ -20,7 +20,19 @@ public class BwtScanStatusEvent extends BwtStatusEvent {
return progress == 100;
}
public Date getEta() {
return eta;
public Duration getRemaining() {
return remainingDuration;
}
public String getRemainingAsString() {
if(remainingDuration != null) {
if(progress < 30) {
return Math.round((double)remainingDuration.toSeconds() / 60) + "m";
} else {
return remainingDuration.toMinutesPart() + "m " + remainingDuration.toSecondsPart() + "s";
}
}
return "";
}
}

View file

@ -1,8 +1,12 @@
package com.sparrowwallet.sparrow.event;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class BwtSyncStatusEvent extends BwtStatusEvent {
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm");
private final int progress;
private final Date tip;
@ -23,4 +27,8 @@ public class BwtSyncStatusEvent extends BwtStatusEvent {
public Date getTip() {
return tip;
}
public String getTipAsString() {
return tip == null ? "" : DATE_FORMAT.format(tip);
}
}

View file

@ -1,13 +1,25 @@
package com.sparrowwallet.sparrow.event;
public class StatusEvent {
public static final int DEFAULT_SHOW_DURATION_SECS = 20;
private final String status;
private final int showDuration;
public StatusEvent(String status) {
this(status, DEFAULT_SHOW_DURATION_SECS);
}
public StatusEvent(String status, int showDuration) {
this.status = status;
this.showDuration = showDuration;
}
public String getStatus() {
return status;
}
public int getShowDuration() {
return showDuration;
}
}

View file

@ -19,6 +19,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.time.Duration;
import java.util.*;
import java.util.stream.Collectors;
@ -254,12 +255,12 @@ public class Bwt {
}
@Override
public void onScanProgress(float progress, int eta) {
public void onScanProgress(float progress, int remaining) {
int percent = (int) (progress * 100.0);
Date date = new Date((long) eta * 1000);
Duration remainingDuration = Duration.ofSeconds(remaining);
log.debug("Scanning " + percent + "%");
if(!terminating) {
Platform.runLater(() -> EventManager.get().post(new BwtScanStatusEvent("Scanning" + (percent < 100 ? " (" + percent + "%)" : ""), percent, date)));
Platform.runLater(() -> EventManager.get().post(new BwtScanStatusEvent("Scanning" + (percent < 100 ? " (" + percent + "%)" : ""), percent, remainingDuration)));
}
}