diff --git a/libwallet/assets/dcr/sync.go b/libwallet/assets/dcr/sync.go index ebd69e178..d24997137 100644 --- a/libwallet/assets/dcr/sync.go +++ b/libwallet/assets/dcr/sync.go @@ -26,7 +26,6 @@ type SyncData struct { synced bool syncing bool - cancelCtx context.Context cancelSync context.CancelFunc cancelRescan context.CancelFunc syncCanceled chan struct{} @@ -90,6 +89,8 @@ type activeSyncData struct { rescanStartTime int64 totalInactiveSeconds int64 + isrescanning bool + isAddDiscovering bool } const ( @@ -382,6 +383,28 @@ func (asset *Asset) CurrentSyncStage() utils.SyncStage { return InvalidSyncStage } +func (asset *Asset) IsAddressDiscovering() bool { + asset.syncData.mu.RLock() + defer asset.syncData.mu.RUnlock() + + if asset.syncData != nil && asset.syncData.syncing { + return asset.syncData.isAddDiscovering + } + + return false +} + +func (asset *Asset) IsSycnRescanning() bool { + asset.syncData.mu.RLock() + defer asset.syncData.mu.RUnlock() + + if asset.syncData != nil && asset.syncData.syncing { + return asset.syncData.isrescanning + } + + return false +} + func (asset *Asset) ConnectedPeers() int32 { return asset.syncData.connectedPeers() } diff --git a/libwallet/assets/dcr/syncnotification.go b/libwallet/assets/dcr/syncnotification.go index 0b9df634c..2b7f4db83 100644 --- a/libwallet/assets/dcr/syncnotification.go +++ b/libwallet/assets/dcr/syncnotification.go @@ -145,7 +145,6 @@ func (asset *Asset) fetchCFiltersEnded() { } // Fetch Headers Callbacks - func (asset *Asset) fetchHeadersStarted() { if !asset.IsSyncing() { return @@ -295,6 +294,7 @@ func (asset *Asset) discoverAddressesStarted() { } asset.syncData.mu.Lock() + asset.syncData.isAddDiscovering = true asset.syncData.syncStage = AddressDiscoverySyncStage asset.syncData.addressDiscoveryProgress.AddressDiscoveryStartTime = time.Now().Unix() asset.syncData.addressDiscoveryCompletedOrCanceled = make(chan bool) @@ -402,6 +402,9 @@ func (asset *Asset) discoverAddressesFinished() { if !asset.IsSyncing() { return } + asset.syncData.mu.Lock() + asset.syncData.isAddDiscovering = false + asset.syncData.mu.Unlock() asset.stopUpdatingAddressDiscoveryProgress() } @@ -417,7 +420,6 @@ func (asset *Asset) stopUpdatingAddressDiscoveryProgress() { } // Blocks Scan Callbacks - func (asset *Asset) rescanStarted() { asset.stopUpdatingAddressDiscoveryProgress() @@ -429,6 +431,7 @@ func (asset *Asset) rescanStarted() { return } + asset.syncData.isrescanning = true asset.syncData.syncStage = HeadersRescanSyncStage asset.syncData.rescanStartTime = time.Now().Unix() @@ -518,6 +521,7 @@ func (asset *Asset) rescanFinished() { } asset.syncData.mu.Lock() + asset.syncData.isrescanning = false asset.syncData.headersRescanProgress.TotalTimeRemainingSeconds = 0 asset.syncData.headersRescanProgress.TotalSyncProgress = 100 diff --git a/ui/page/components/wallet_sync_info.go b/ui/page/components/wallet_sync_info.go index eeca3f621..5900fab90 100644 --- a/ui/page/components/wallet_sync_info.go +++ b/ui/page/components/wallet_sync_info.go @@ -8,6 +8,7 @@ import ( "gioui.org/font" "gioui.org/layout" "gioui.org/unit" + "github.com/crypto-power/cryptopower/libwallet/assets/dcr" sharedW "github.com/crypto-power/cryptopower/libwallet/assets/wallet" libutils "github.com/crypto-power/cryptopower/libwallet/utils" "github.com/crypto-power/cryptopower/ui/cryptomaterial" @@ -273,6 +274,12 @@ func (wsi *WalletSyncInfo) syncContent(gtx C, uniform layout.Inset) D { isRescanning := wsi.wallet.IsRescanning() && !isSyncing isInProgress := isSyncing || isRescanning bestBlock := wsi.wallet.GetBestBlock() + isAddDiscovering := false + syncIsScanning := false + if !isBtcORLtcAsset { + isAddDiscovering = wsi.wallet.(*dcr.Asset).IsAddressDiscovering() + syncIsScanning = wsi.wallet.(*dcr.Asset).IsSycnRescanning() + } dp8 := values.MarginPadding8 return uniform.Layout(gtx, func(gtx C) D { return layout.Flex{Axis: layout.Horizontal}.Layout(gtx, @@ -292,13 +299,13 @@ func (wsi *WalletSyncInfo) syncContent(gtx C, uniform layout.Inset) D { return wsi.labelTexSize16Layout(values.String(values.StrSyncingProgress), dp8, true)(gtx) }), layout.Rigid(func(gtx C) D { - if !isInProgress || (isRescanning && (isBtcORLtcAsset)) { + if !isInProgress || (isRescanning && isBtcORLtcAsset) { return D{} } return wsi.labelTexSize16Layout(values.String(values.StrSyncCompTime), dp8, true)(gtx) }), layout.Rigid(func(gtx C) D { - if !(isRescanning && (isBtcORLtcAsset)) { + if !(isRescanning && isBtcORLtcAsset) { return D{} } return wsi.labelTexSize16Layout(values.String(values.StrAddressDiscoveryInProgress), dp8, true)(gtx) @@ -327,6 +334,13 @@ func (wsi *WalletSyncInfo) syncContent(gtx C, uniform layout.Inset) D { syncProgress := values.String(values.StrWalletNotSynced) if wsi.wallet.IsSyncing() { syncProgress = values.StringF(values.StrSyncingProgressStat, daysBehind) + if !isBtcORLtcAsset { + if isAddDiscovering { + syncProgress = values.String(values.StrAddressDiscovering) + } else if syncIsScanning { + syncProgress = values.String(values.StrRescanningBlocks) + } + } } else if wsi.wallet.IsRescanning() { syncProgress = values.String(values.StrRescanningBlocks) } else if wsi.wallet.IsSynced() { @@ -336,7 +350,7 @@ func (wsi *WalletSyncInfo) syncContent(gtx C, uniform layout.Inset) D { return wsi.labelTexSize16Layout(syncProgress, dp8, false)(gtx) }), layout.Rigid(func(gtx C) D { - if !isInProgress || (isRescanning && (isBtcORLtcAsset)) { + if !isInProgress || (isRescanning && isBtcORLtcAsset) { return D{} } _, timeLeft := wsi.progressStatusDetails() diff --git a/ui/values/localizable/en.go b/ui/values/localizable/en.go index deca906ef..4ca32ec7e 100644 --- a/ui/values/localizable/en.go +++ b/ui/values/localizable/en.go @@ -24,6 +24,7 @@ const EN = ` "address" = "Address" "addressCopied" = "Address copied" "addressDiscoveryInProgress" = "Address Discovery in Progress..." +"addressDiscovering" = "Address Discovering" "addressDiscoveryStarted" = "Address discovery started successfully" "addressDiscoveryStartedBody" = "See wallet information page for progress" "addrNotOwned" = "Address not owned by any wallet" diff --git a/ui/values/strings.go b/ui/values/strings.go index da564307a..093e26443 100644 --- a/ui/values/strings.go +++ b/ui/values/strings.go @@ -136,6 +136,7 @@ const ( StrAddressDiscoveryInProgress = "addressDiscoveryInProgress" StrAddressDiscoveryStarted = "addressDiscoveryStarted" StrAddressDiscoveryStartedBody = "addressDiscoveryStartedBody" + StrAddressDiscovering = "addressDiscovering" StrAddrNotOwned = "addrNotOwned" StrAddVSP = "addVSP" StrAddWallet = "addWallet"