From 5b494e0af46449c736442eb252039a77cde14f8c Mon Sep 17 00:00:00 2001 From: Alvaro Denis Date: Fri, 6 Mar 2020 16:27:11 -0500 Subject: [PATCH] ClearSingleTimeOperationsCache on device disconnected ref #255 --- src/models/walletsModel.go | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/models/walletsModel.go b/src/models/walletsModel.go index 62ffe393..eb45d744 100644 --- a/src/models/walletsModel.go +++ b/src/models/walletsModel.go @@ -193,16 +193,34 @@ func (walletModel *WalletModel) sniffHw(qmlDevI *QDeviceInteraction, locker *QBr locker.lock() locker.unlock() } + deviceFailed := func(err error) { + if err == skyWallet.ErrNoDeviceConnected { + if hadHwConnected { + hadHwConnected = false + dev.IsBootloaderMode() + hwConnectedOn = []int{} + beginIndex := walletModel.Index(0, 0, core.NewQModelIndex()) + endIndex := walletModel.Index(walletModel.rowCount(core.NewQModelIndex())-1, 0, core.NewQModelIndex()) + walletModel.DataChanged(beginIndex, endIndex, []int{HasHardwareWallet}) + logSignersModel.WithError(err).Warningln("connection to hardware wallet was lose") + hardware.SkyWltInteractionInstance().ClearSingleTimeOperationsCache() + } else { + logWalletsModel.WithError(err).Infoln("no device connected") + } + } else { + logWalletsModel.Errorln(err) + } + } isBootloader, err := dev.ShouldUploadFirmware().Then(func(data interface{}) interface{} { if data.(bool) { openDialog(qmlDevI.OpenInteractionDialog) } return dev.IsBootloaderMode() }).Catch(func(err error) error { - logWalletsModel.WithError(err).Errorln("can not determine boot mode") + deviceFailed(err) return err }).Await() - if err != nil || isBootloader.(bool) { + if err == skyWallet.ErrNoDeviceConnected || isBootloader.(bool) { return } dev.FirstAddress(skyWallet.WalletTypeDeterministic).Then(func(data interface{}) interface{} { @@ -216,18 +234,7 @@ func (walletModel *WalletModel) sniffHw(qmlDevI *QDeviceInteraction, locker *QBr registerWlt(wlt) return data }).Catch(func(err error) error { - if hadHwConnected { - hadHwConnected = false - hwConnectedOn = []int{} - beginIndex := walletModel.Index(0, 0, core.NewQModelIndex()) - endIndex := walletModel.Index(walletModel.rowCount(core.NewQModelIndex())-1, 0, core.NewQModelIndex()) - walletModel.DataChanged(beginIndex, endIndex, []int{HasHardwareWallet}) - logSignersModel.WithError(err).Info("connection to hardware wallet was lose") - } - if err == skyWallet.ErrNoDeviceConnected { - logWalletsModel.Warningln("00000000000000000") - return err - } + deviceFailed(err) return err }).Await() dev.ShouldBeInitialized().Then(func(data interface{}) interface{} { @@ -241,7 +248,7 @@ func (walletModel *WalletModel) sniffHw(qmlDevI *QDeviceInteraction, locker *QBr } return data }).Catch(func(err error) error { - logWalletsModel.WithError(err).Errorln("uf") + deviceFailed(err) return err }).Await() }