fix: Fixing windows crash after onboarding

The app is crashing when the QVariant set as module context property gets collected. Not sure why it happens more often in the onboarding flow and on windows.
This commit is contained in:
Alex Jbanca 2024-07-05 01:01:54 +03:00 committed by Alex Jbanca
parent b3df5476c7
commit 55b2a83c6f
10 changed files with 40 additions and 10 deletions

View File

@ -18,6 +18,7 @@ type
delegate: delegate_interface.AccessInterface delegate: delegate_interface.AccessInterface
events: EventEmitter events: EventEmitter
view: View view: View
viewVariant: QVariant
controller: Controller controller: Controller
moduleLoaded: bool moduleLoaded: bool
currentAccountIndex: int currentAccountIndex: int
@ -35,10 +36,12 @@ proc newModule*(
result.events = events result.events = events
result.currentAccountIndex = 0 result.currentAccountIndex = 0
result.view = newView(result) result.view = newView(result)
result.viewVariant = newQVariant(result.view)
result.controller = newController(result, walletAccountService, networkService, tokenService, currencyService) result.controller = newController(result, walletAccountService, networkService, tokenService, currencyService)
result.moduleLoaded = false result.moduleLoaded = false
method delete*(self: Module) = method delete*(self: Module) =
self.viewVariant.delete
self.view.delete self.view.delete
proc switchAccount*(self: Module, accountIndex: int) = proc switchAccount*(self: Module, accountIndex: int) =
@ -69,7 +72,7 @@ proc switchAccount*(self: Module, accountIndex: int) =
self.view.setData(accountItem) self.view.setData(accountItem)
method load*(self: Module) = method load*(self: Module) =
singletonInstance.engine.setRootContextProperty("browserSectionCurrentAccount", newQVariant(self.view)) singletonInstance.engine.setRootContextProperty("browserSectionCurrentAccount", self.viewVariant)
self.events.on(SIGNAL_KEYPAIR_SYNCED) do(e: Args): self.events.on(SIGNAL_KEYPAIR_SYNCED) do(e: Args):
let args = KeypairArgs(e) let args = KeypairArgs(e)

View File

@ -16,6 +16,7 @@ type
delegate: delegate_interface.AccessInterface delegate: delegate_interface.AccessInterface
events: EventEmitter events: EventEmitter
view: View view: View
viewVariant: QVariant
controller: Controller controller: Controller
moduleLoaded: bool moduleLoaded: bool
walletAccountService: wallet_account_service.Service walletAccountService: wallet_account_service.Service
@ -32,10 +33,12 @@ proc newModule*(
result.events = events result.events = events
result.walletAccountService = walletAccountService result.walletAccountService = walletAccountService
result.view = newView(result) result.view = newView(result)
result.viewVariant = newQVariant(result.view)
result.controller = controller.newController(result, walletAccountService, networkService, currencyService) result.controller = controller.newController(result, walletAccountService, networkService, currencyService)
result.moduleLoaded = false result.moduleLoaded = false
method delete*(self: Module) = method delete*(self: Module) =
self.viewVariant.delete
self.view.delete self.view.delete
self.controller.delete self.controller.delete
@ -63,7 +66,7 @@ method filterChanged*(self: Module, addresses: seq[string], chainIds: seq[int])
self.view.setItems(items) self.view.setItems(items)
method load*(self: Module) = method load*(self: Module) =
singletonInstance.engine.setRootContextProperty("walletSectionAccounts", newQVariant(self.view)) singletonInstance.engine.setRootContextProperty("walletSectionAccounts", self.viewVariant)
self.controller.init() self.controller.init()
self.view.load() self.view.load()

View File

@ -22,6 +22,7 @@ type
delegate: delegate_interface.AccessInterface delegate: delegate_interface.AccessInterface
events: EventEmitter events: EventEmitter
view: View view: View
viewVariant: QVariant
controller: all_collectibles_controller.Controller controller: all_collectibles_controller.Controller
collectiblesController: collectibles_controller.Controller collectiblesController: collectibles_controller.Controller
moduleLoaded: bool moduleLoaded: bool
@ -48,15 +49,17 @@ proc newModule*(
result.collectiblesController = collectiblesController result.collectiblesController = collectiblesController
result.view = newView(result) result.view = newView(result)
result.viewVariant = newQVariant(result.view)
result.moduleLoaded = false result.moduleLoaded = false
method delete*(self: Module) = method delete*(self: Module) =
self.viewVariant.delete
self.view.delete self.view.delete
self.controller.delete self.controller.delete
self.collectiblesController.delete self.collectiblesController.delete
method load*(self: Module) = method load*(self: Module) =
singletonInstance.engine.setRootContextProperty("walletSectionAllCollectibles", newQVariant(self.view)) singletonInstance.engine.setRootContextProperty("walletSectionAllCollectibles", self.viewVariant)
self.events.on(SIGNAL_COLLECTIBLE_PREFERENCES_UPDATED) do(e: Args): self.events.on(SIGNAL_COLLECTIBLE_PREFERENCES_UPDATED) do(e: Args):
let args = ResultArgs(e) let args = ResultArgs(e)

View File

@ -20,6 +20,7 @@ type
delegate: delegate_interface.AccessInterface delegate: delegate_interface.AccessInterface
events: EventEmitter events: EventEmitter
view: View view: View
viewVariant: QVariant
controller: Controller controller: Controller
moduleLoaded: bool moduleLoaded: bool
addresses: seq[string] addresses: seq[string]
@ -36,16 +37,18 @@ proc newModule*(
result.delegate = delegate result.delegate = delegate
result.events = events result.events = events
result.view = newView(result) result.view = newView(result)
result.viewVariant = newQVariant(result.view)
result.controller = controller.newController(result, events, tokenService, walletAccountService, settingsService, communityTokensService) result.controller = controller.newController(result, events, tokenService, walletAccountService, settingsService, communityTokensService)
result.moduleLoaded = false result.moduleLoaded = false
result.addresses = @[] result.addresses = @[]
method delete*(self: Module) = method delete*(self: Module) =
self.viewVariant.delete
self.view.delete self.view.delete
self.controller.delete self.controller.delete
method load*(self: Module) = method load*(self: Module) =
singletonInstance.engine.setRootContextProperty("walletSectionAllTokens", newQVariant(self.view)) singletonInstance.engine.setRootContextProperty("walletSectionAllTokens", self.viewVariant)
self.events.on(SIGNAL_CURRENCY_UPDATED) do(e:Args): self.events.on(SIGNAL_CURRENCY_UPDATED) do(e:Args):
self.controller.rebuildMarketData() self.controller.rebuildMarketData()

View File

@ -17,6 +17,7 @@ type
delegate: delegate_interface.AccessInterface delegate: delegate_interface.AccessInterface
events: EventEmitter events: EventEmitter
view: View view: View
viewVariant: QVariant
controller: Controller controller: Controller
moduleLoaded: bool moduleLoaded: bool
@ -32,14 +33,16 @@ proc newModule*(
result.delegate = delegate result.delegate = delegate
result.events = events result.events = events
result.view = newView(result) result.view = newView(result)
result.viewVariant = newQVariant(result.view)
result.controller = newController(result, walletAccountService, networkService, tokenService, currencyService) result.controller = newController(result, walletAccountService, networkService, tokenService, currencyService)
result.moduleLoaded = false result.moduleLoaded = false
method delete*(self: Module) = method delete*(self: Module) =
self.viewVariant.delete
self.view.delete self.view.delete
method load*(self: Module) = method load*(self: Module) =
singletonInstance.engine.setRootContextProperty("walletSectionAssets", newQVariant(self.view)) singletonInstance.engine.setRootContextProperty("walletSectionAssets", self.viewVariant)
self.events.on(SIGNAL_WALLET_ACCOUNT_TOKENS_REBUILT) do(e:Args): self.events.on(SIGNAL_WALLET_ACCOUNT_TOKENS_REBUILT) do(e:Args):
self.view.modelsUpdated() self.view.modelsUpdated()

View File

@ -14,6 +14,7 @@ type
delegate: delegate_interface.AccessInterface delegate: delegate_interface.AccessInterface
events: EventEmitter events: EventEmitter
view: View view: View
viewVariant: QVariant
controller: Controller controller: Controller
moduleLoaded: bool moduleLoaded: bool
@ -26,10 +27,12 @@ proc newModule*(
result.delegate = delegate result.delegate = delegate
result.events = events result.events = events
result.view = newView(result) result.view = newView(result)
result.viewVariant = newQVariant(result.view)
result.controller = controller.newController(result, events, transactionService) result.controller = controller.newController(result, events, transactionService)
result.moduleLoaded = false result.moduleLoaded = false
method delete*(self: Module) = method delete*(self: Module) =
self.viewVariant.delete
self.view.delete self.view.delete
self.controller.delete self.controller.delete
@ -46,7 +49,7 @@ method updateCryptoServices*(self: Module, cryptoServices: seq[CryptoRampDto]) =
self.view.setItems(items) self.view.setItems(items)
method load*(self: Module) = method load*(self: Module) =
singletonInstance.engine.setRootContextProperty("walletSectionBuySellCrypto", newQVariant(self.view)) singletonInstance.engine.setRootContextProperty("walletSectionBuySellCrypto", self.viewVariant)
self.controller.fetchCryptoServices() self.controller.fetchCryptoServices()
self.controller.init() self.controller.init()
self.view.load() self.view.load()

View File

@ -56,6 +56,7 @@ type
moduleLoaded: bool moduleLoaded: bool
controller: controller.Controller controller: controller.Controller
view: View view: View
viewVariant: QVariant
filter: Filter filter: Filter
# shared modules # shared modules
@ -171,6 +172,7 @@ proc newModule*(
result.walletConnectController = wc_controller.newController(result.walletConnectService, walletAccountService) result.walletConnectController = wc_controller.newController(result.walletConnectService, walletAccountService)
result.view = newView(result, result.activityController, result.tmpActivityControllers, result.activityDetailsController, result.collectibleDetailsController, result.walletConnectController) result.view = newView(result, result.activityController, result.tmpActivityControllers, result.activityDetailsController, result.collectibleDetailsController, result.walletConnectController)
result.viewVariant = newQVariant(result.view)
method delete*(self: Module) = method delete*(self: Module) =
self.accountsModule.delete self.accountsModule.delete
@ -181,6 +183,7 @@ method delete*(self: Module) =
self.buySellCryptoModule.delete self.buySellCryptoModule.delete
self.sendModule.delete self.sendModule.delete
self.controller.delete self.controller.delete
self.viewVariant.delete
self.view.delete self.view.delete
self.activityController.delete self.activityController.delete
for i in 0..self.tmpActivityControllers.len-1: for i in 0..self.tmpActivityControllers.len-1:
@ -257,7 +260,7 @@ method setFilterAllAddresses*(self: Module) =
self.notifyFilterChanged() self.notifyFilterChanged()
method load*(self: Module) = method load*(self: Module) =
singletonInstance.engine.setRootContextProperty("walletSection", newQVariant(self.view)) singletonInstance.engine.setRootContextProperty("walletSection", self.viewVariant)
self.events.on(SIGNAL_KEYPAIR_SYNCED) do(e: Args): self.events.on(SIGNAL_KEYPAIR_SYNCED) do(e: Args):
let args = KeypairArgs(e) let args = KeypairArgs(e)

View File

@ -18,6 +18,7 @@ type
delegate: delegate_interface.AccessInterface delegate: delegate_interface.AccessInterface
events: EventEmitter events: EventEmitter
view: View view: View
viewVariant: QVariant
controller: Controller controller: Controller
moduleLoaded: bool moduleLoaded: bool
isAllAccounts: bool isAllAccounts: bool
@ -32,15 +33,17 @@ proc newModule*(
result.delegate = delegate result.delegate = delegate
result.events = events result.events = events
result.view = newView(result) result.view = newView(result)
result.viewVariant = newQVariant(result.view)
result.controller = newController(result, walletAccountService, currencyService) result.controller = newController(result, walletAccountService, currencyService)
result.moduleLoaded = false result.moduleLoaded = false
result.isAllAccounts = false result.isAllAccounts = false
method delete*(self: Module) = method delete*(self: Module) =
self.viewVariant.delete
self.view.delete self.view.delete
method load*(self: Module) = method load*(self: Module) =
singletonInstance.engine.setRootContextProperty("walletSectionOverview", newQVariant(self.view)) singletonInstance.engine.setRootContextProperty("walletSectionOverview", self.viewVariant)
self.controller.init() self.controller.init()
self.view.load() self.view.load()

View File

@ -13,6 +13,7 @@ type
Module* = ref object of io_interface.AccessInterface Module* = ref object of io_interface.AccessInterface
delegate: delegate_interface.AccessInterface delegate: delegate_interface.AccessInterface
view: View view: View
viewVariant: QVariant
moduleLoaded: bool moduleLoaded: bool
controller: Controller controller: Controller
@ -24,10 +25,12 @@ proc newModule*(
result = Module() result = Module()
result.delegate = delegate result.delegate = delegate
result.view = newView(result) result.view = newView(result)
result.viewVariant = newQVariant(result.view)
result.controller = newController(result, events, savedAddressService) result.controller = newController(result, events, savedAddressService)
result.moduleLoaded = false result.moduleLoaded = false
method delete*(self: Module) = method delete*(self: Module) =
self.viewVariant.delete
self.view.delete self.view.delete
method loadSavedAddresses*(self: Module) = method loadSavedAddresses*(self: Module) =
@ -45,7 +48,7 @@ method loadSavedAddresses*(self: Module) =
) )
method load*(self: Module) = method load*(self: Module) =
singletonInstance.engine.setRootContextProperty("walletSectionSavedAddresses", newQVariant(self.view)) singletonInstance.engine.setRootContextProperty("walletSectionSavedAddresses", self.viewVariant)
self.loadSavedAddresses() self.loadSavedAddresses()
self.controller.init() self.controller.init()

View File

@ -48,6 +48,7 @@ type
delegate: delegate_interface.AccessInterface delegate: delegate_interface.AccessInterface
events: EventEmitter events: EventEmitter
view: View view: View
viewVariant: QVariant
controller: controller.Controller controller: controller.Controller
# Get the list of owned collectibles by the currently selected account # Get the list of owned collectibles by the currently selected account
collectiblesController: collectiblesc.Controller collectiblesController: collectiblesc.Controller
@ -82,10 +83,12 @@ proc newModule*(
) )
result.nestedCollectiblesModel = nested_collectibles.newModel(result.collectiblesController.getModel()) result.nestedCollectiblesModel = nested_collectibles.newModel(result.collectiblesController.getModel())
result.view = newView(result) result.view = newView(result)
result.viewVariant = newQVariant(result.view)
result.moduleLoaded = false result.moduleLoaded = false
method delete*(self: Module) = method delete*(self: Module) =
self.viewVariant.delete
self.view.delete self.view.delete
self.controller.delete self.controller.delete
self.nestedCollectiblesModel.delete self.nestedCollectiblesModel.delete
@ -162,7 +165,7 @@ proc refreshNetworks*(self: Module) =
self.view.setNetworkItems(fromNetworks, toNetworks) self.view.setNetworkItems(fromNetworks, toNetworks)
method load*(self: Module) = method load*(self: Module) =
singletonInstance.engine.setRootContextProperty("walletSectionSend", newQVariant(self.view)) singletonInstance.engine.setRootContextProperty("walletSectionSend", self.viewVariant)
# these connections should be part of the controller's init method # these connections should be part of the controller's init method
self.events.on(SIGNAL_WALLET_ACCOUNT_NETWORK_ENABLED_UPDATED) do(e:Args): self.events.on(SIGNAL_WALLET_ACCOUNT_NETWORK_ENABLED_UPDATED) do(e:Args):