diff --git a/lib/gui/app/models/store.ts b/lib/gui/app/models/store.ts index 9d8e30fa..b9301d7c 100644 --- a/lib/gui/app/models/store.ts +++ b/lib/gui/app/models/store.ts @@ -334,11 +334,18 @@ function storeReducer( action.data.results.averageFlashingSpeed = state.get( 'lastAverageFlashingSpeed', ); + + if (action.data.results.skip) { + return state + .set('isFlashing', false) + .set('flashResults', Immutable.fromJS(action.data)); + } } return state .set('isFlashing', false) - .set('flashResults', Immutable.fromJS(action.data)); + .set('flashResults', Immutable.fromJS(action.data)) + .set('flashState', DEFAULT_STATE.get('flashState')); } case Actions.SELECT_TARGET: { diff --git a/lib/gui/modules/child-writer.ts b/lib/gui/modules/child-writer.ts index ca0ba9e9..dda3c326 100644 --- a/lib/gui/modules/child-writer.ts +++ b/lib/gui/modules/child-writer.ts @@ -55,8 +55,9 @@ function log(message: string) { /** * @summary Terminate the child writer process */ -function terminate(exitCode: number) { +async function terminate(exitCode: number) { ipc.disconnect(IPC_SERVER_ID); + await cleanupTmpFiles(Date.now()); process.nextTick(() => { process.exit(exitCode || SUCCESS); }); @@ -68,7 +69,7 @@ function terminate(exitCode: number) { async function handleError(error: Error) { ipc.of[IPC_SERVER_ID].emit('error', toJSON(error)); await delay(DISCONNECT_DELAY); - terminate(GENERAL_ERROR); + await terminate(GENERAL_ERROR); } interface WriteResult { @@ -165,22 +166,22 @@ ipc.connectTo(IPC_SERVER_ID, () => { // no flashing information is available, then it will // assume that the child died halfway through. - process.once('SIGINT', () => { - terminate(SUCCESS); + process.once('SIGINT', async () => { + await terminate(SUCCESS); }); - process.once('SIGTERM', () => { - terminate(SUCCESS); + process.once('SIGTERM', async () => { + await terminate(SUCCESS); }); // The IPC server failed. Abort. - ipc.of[IPC_SERVER_ID].on('error', () => { - terminate(SUCCESS); + ipc.of[IPC_SERVER_ID].on('error', async () => { + await terminate(SUCCESS); }); // The IPC server was disconnected. Abort. - ipc.of[IPC_SERVER_ID].on('disconnect', () => { - terminate(SUCCESS); + ipc.of[IPC_SERVER_ID].on('disconnect', async () => { + await terminate(SUCCESS); }); ipc.of[IPC_SERVER_ID].on('write', async (options: WriteOptions) => { @@ -205,14 +206,14 @@ ipc.connectTo(IPC_SERVER_ID, () => { log('Abort'); ipc.of[IPC_SERVER_ID].emit('abort'); await delay(DISCONNECT_DELAY); - terminate(exitCode); + await terminate(exitCode); }; const onSkip = async () => { log('Skip validation'); ipc.of[IPC_SERVER_ID].emit('skip'); await delay(DISCONNECT_DELAY); - terminate(exitCode); + await terminate(exitCode); }; ipc.of[IPC_SERVER_ID].on('cancel', onAbort); @@ -286,7 +287,7 @@ ipc.connectTo(IPC_SERVER_ID, () => { }); ipc.of[IPC_SERVER_ID].emit('done', { results }); await delay(DISCONNECT_DELAY); - terminate(exitCode); + await terminate(exitCode); } catch (error) { log(`Error: ${error.message}`); exitCode = GENERAL_ERROR; diff --git a/tests/gui/models/flash-state.spec.ts b/tests/gui/models/flash-state.spec.ts index f03cad06..e5d966a0 100644 --- a/tests/gui/models/flash-state.spec.ts +++ b/tests/gui/models/flash-state.spec.ts @@ -393,6 +393,7 @@ describe('Model: flashState', function () { expect(flashResults).to.deep.equal({ cancelled: false, + skip: false, sourceChecksum: '1234', }); });