Skip to content

Commit

Permalink
Display 'Connecting...' when connection to daemon is lost
Browse files Browse the repository at this point in the history
  • Loading branch information
j-berman committed Mar 25, 2022
1 parent dd92f7b commit 4ac01ab
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 12 deletions.
2 changes: 1 addition & 1 deletion app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ private void onWalletRescan() {
final WalletFragment walletFragment = getWalletFragment();
getWallet().rescanBlockchainAsync();
synced = false;
walletFragment.unsync();
walletFragment.onStartRescan();
invalidateOptionsMenu();
} catch (ClassCastException ex) {
Timber.d(ex.getLocalizedMessage());
Expand Down
11 changes: 11 additions & 0 deletions app/src/main/java/com/m2049r/xmrwallet/WalletFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,10 @@ public void unsync() {
bSend.setEnabled(false);
}
if (isVisible()) enableAccountsList(false); //otherwise it is enabled in onResume()
}

public void onStartRescan() {
unsync();
firstBlock = 0;
}

Expand Down Expand Up @@ -460,10 +464,17 @@ private void updateStatus(Wallet wallet) {
} else {
sync = getString(R.string.status_synced) + " " + formatter.format(wallet.getBlockChainHeight());
ivSynced.setVisibility(View.VISIBLE);
setProgress(-1);
}
} else {
sync = getString(R.string.status_wallet_connecting);
setProgress(101);
ivSynced.setVisibility(View.GONE);
}
if (wallet.isSynchronized()) {
onSynced();
} else {
unsync();
}
setProgress(sync);
// TODO show connected status somewhere
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/com/m2049r/xmrwallet/model/Wallet.java
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,10 @@ public void setSynchronized() {
this.synced = true;
}

public void setUnsynchronized() {
this.synced = false;
}

public static native String getDisplayAmount(long amount);

public static native long getAmountFromString(String amount);
Expand Down
37 changes: 26 additions & 11 deletions app/src/main/java/com/m2049r/xmrwallet/service/WalletService.java
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,9 @@ public void newBlock(long height) {
Timber.d("newBlock() @ %d with observer %s", height, observer);
if (observer != null) {
boolean fullRefresh = false;
updateDaemonState(wallet, wallet.isSynchronized() ? height : 0);
if (!wallet.isSynchronized()) {
boolean receivedNewBlock = true;
boolean updatedWalletConnectionStatus = updateDaemonState(wallet, height, receivedNewBlock);
if (updatedWalletConnectionStatus || !wallet.isSynchronized()) {
updated = true;
// we want to see our transactions as they come in
wallet.refreshHistory();
Expand All @@ -146,13 +147,13 @@ public void updated() {
updated = true;
}

public void refreshed() { // this means it's synced
public void refreshed() {
Timber.d("refreshed()");
final Wallet wallet = getWallet();
if (wallet == null) throw new IllegalStateException("No wallet!");
wallet.setSynchronized();
if (updated) {
updateDaemonState(wallet, wallet.getBlockChainHeight());
boolean receivedNewBlock = false;
boolean updatedWalletConnectionStatus = updateDaemonState(wallet, wallet.getBlockChainHeight(), receivedNewBlock);
if (updated || updatedWalletConnectionStatus) {
wallet.refreshHistory();
if (observer != null) {
updated = !observer.onRefreshed(wallet, true);
Expand All @@ -164,16 +165,20 @@ public void refreshed() { // this means it's synced
private long lastDaemonStatusUpdate = 0;
private long daemonHeight = 0;
private Wallet.ConnectionStatus connectionStatus = Wallet.ConnectionStatus.ConnectionStatus_Disconnected;
private static final long STATUS_UPDATE_INTERVAL = 120000; // 120s (blocktime)
private static final long STATUS_UPDATE_INTERVAL_SYNCED = 120000; // 120s (blocktime)
private static final long STATUS_UPDATE_INTERVAL_SYNCING = 10000; // 10s

private void updateDaemonState(Wallet wallet, long height) {
private boolean updateDaemonState(Wallet wallet, long height, boolean receivedNewBlock) {
Wallet.ConnectionStatus startConnectionStatus = connectionStatus;
long t = System.currentTimeMillis();
if (height > 0) { // if we get a height, we are connected
daemonHeight = height;
if (daemonHeight > 0 && height > 0 && (height > daemonHeight || receivedNewBlock)) {
if (height > daemonHeight)
daemonHeight = height;
connectionStatus = Wallet.ConnectionStatus.ConnectionStatus_Connected;
lastDaemonStatusUpdate = t;
} else {
if (t - lastDaemonStatusUpdate > STATUS_UPDATE_INTERVAL) {
long statusUpdateInterval = wallet.isSynchronized() ? STATUS_UPDATE_INTERVAL_SYNCED : STATUS_UPDATE_INTERVAL_SYNCING;
if (daemonHeight == 0 || t - lastDaemonStatusUpdate > statusUpdateInterval) {
lastDaemonStatusUpdate = t;
// these calls really connect to the daemon - wasting time
daemonHeight = wallet.getDaemonBlockChainHeight();
Expand All @@ -185,6 +190,16 @@ private void updateDaemonState(Wallet wallet, long height) {
}
}
}
setWalletSyncState(wallet);
return startConnectionStatus != connectionStatus;
}

public void setWalletSyncState(Wallet wallet) {
if (daemonHeight > 0 && daemonHeight <= wallet.getBlockChainHeight()) {
wallet.setSynchronized();
} else {
wallet.setUnsynchronized();
}
}

public long getDaemonHeight() {
Expand Down

0 comments on commit 4ac01ab

Please sign in to comment.