Browse Source

Merge pull request #673 from mrfelton/fix/support-full-refresh

feat(wallet): restart onboarding on app refresh
renovate/lint-staged-8.x
JimmyMow 6 years ago
committed by GitHub
parent
commit
01ac400f56
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 42
      app/lib/zap/controller.js
  2. 29
      test/unit/lnd/neutrino.spec.js

42
app/lib/zap/controller.js

@ -105,9 +105,6 @@ class ZapController {
this.mainWindow.loadURL(`file://${__dirname}/dist/index.html`)
}
// Register IPC listeners so that we can react to instructions coming from the app.
this._registerIpcListeners()
// Show the window as soon as the application has finished loading.
this.mainWindow.webContents.on('did-finish-load', () => {
this.mainWindow.show()
@ -130,8 +127,31 @@ class ZapController {
// FSM Callbacks
// ------------------------------------
onOnboarding() {
mainLog.debug('[FSM] onOnboarding...')
// Deregister IPC listeners so that we can start fresh.
this._removeIpcListeners()
// Ensure wallet is disconnected.
this.disconnectLightningWallet()
// If Neutrino is running, kill it.
if (this.neutrino) {
this.neutrino.stop()
}
// Give the grpc connections a chance to be properly closed out.
return new Promise(resolve => setTimeout(resolve, 200))
}
onStartOnboarding() {
mainLog.debug('[FSM] onStartOnboarding...')
// Register IPC listeners so that we can react to instructions coming from the app.
this._registerIpcListeners()
// Notify the app to start the onboarding process.
this.sendMessage('startOnboarding', this.lndConfig)
}
@ -255,6 +275,9 @@ class ZapController {
* Create and subscribe to the Lightning service.
*/
async startLightningWallet() {
if (this.lightningGrpcConnected) {
return
}
mainLog.info('Starting lightning wallet...')
this.lightning = new Lightning()
@ -284,7 +307,7 @@ class ZapController {
mainLog.info('Disconnecting lightning Wallet...')
// Disconnect streams.
this.lightning.unsubscribe()
this.lightning.disconnect()
// Update our internal state.
this.lightningGrpcConnected = false
@ -397,11 +420,20 @@ class ZapController {
_registerIpcListeners() {
ipcMain.on('startLnd', (event, options: onboardingOptions) => this.finishOnboarding(options))
}
/**
* Add IPC event listeners...
*/
_removeIpcListeners() {
ipcMain.removeAllListeners('startLnd')
ipcMain.removeAllListeners('walletUnlocker')
ipcMain.removeAllListeners('lnd')
}
}
StateMachine.factory(ZapController, {
transitions: [
{ name: 'startOnboarding', from: 'none', to: 'onboarding' },
{ name: 'startOnboarding', from: '*', to: 'onboarding' },
{ name: 'startLnd', from: 'onboarding', to: 'running' },
{ name: 'connectLnd', from: 'onboarding', to: 'connected' },
{ name: 'terminate', from: '*', to: 'terminated' }

29
test/unit/lnd/neutrino.spec.js

@ -162,4 +162,33 @@ describe('Neutrino', function() {
})
})
})
describe('.start', () => {
describe('called when neutrino is already running', () => {
beforeEach(() => {
this.neutrino = new Neutrino()
this.neutrino.process = 123
})
it('should throw an error', () => {
expect(() => {
this.neutrino.start()
}).toThrow()
})
})
})
describe('.stop', () => {
describe('called when neutrino is already running', () => {
beforeEach(() => {
this.neutrino = new Neutrino()
this.neutrino.process = {
kill: jest.fn()
}
this.neutrino.stop()
})
it('should kill the neutrino process', () => {
expect(this.neutrino.process).toBeNull()
})
})
})
})

Loading…
Cancel
Save