diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2019-03-27 16:47:04 +0100 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2019-03-27 16:47:04 +0100 |
| commit | ae59b0aa3f8798950f788310fe403fdc2f8f8f6f (patch) | |
| tree | 37094fc6ce64372f34d880b5d430d06ad19052bf /gui | |
| parent | 5c3a65a1aa6973ee31a3157d41c16a4a96dc0e4a (diff) | |
| download | mullvadvpn-ae59b0aa3f8798950f788310fe403fdc2f8f8f6f.tar.xz mullvadvpn-ae59b0aa3f8798950f788310fe403fdc2f8f8f6f.zip | |
Update GUI to use a new daemon_event subscription
Diffstat (limited to 'gui')
| -rw-r--r-- | gui/src/main/daemon-rpc.ts | 37 | ||||
| -rw-r--r-- | gui/src/main/index.ts | 27 | ||||
| -rw-r--r-- | gui/src/shared/daemon-rpc-types.ts | 2 |
3 files changed, 29 insertions, 37 deletions
diff --git a/gui/src/main/daemon-rpc.ts b/gui/src/main/daemon-rpc.ts index 94cbeeb984..4464db6688 100644 --- a/gui/src/main/daemon-rpc.ts +++ b/gui/src/main/daemon-rpc.ts @@ -1,5 +1,6 @@ import { AccountToken, + DaemonEvent, IAccountData, IAppVersionInfo, ILocation, @@ -295,6 +296,15 @@ const settingsSchema = partialObject({ tunnel_options: tunnelOptionsSchema, }); +const daemonEventSchema = oneOf( + object({ + state_transition: tunnelStateTransitionSchema, + }), + object({ + settings: settingsSchema, + }), +); + export class ResponseParseError extends Error { constructor(message: string, private validationErrorValue?: Error) { super(message); @@ -432,28 +442,15 @@ export class DaemonRpc { } } - public subscribeStateListener( - listener: SubscriptionListener<TunnelStateTransition>, - ): Promise<void> { - return this.transport.subscribe('new_state', (payload) => { - try { - const newState = camelCaseObjectKeys( - validate(tunnelStateTransitionSchema, payload), - ) as TunnelStateTransition; - listener.onEvent(newState); - } catch (error) { - listener.onError(new ResponseParseError('Invalid payload from new_state', error)); - } - }); - } - - public subscribeSettingsListener(listener: SubscriptionListener<ISettings>): Promise<void> { - return this.transport.subscribe('settings', (payload) => { + public subscribeDaemonEventListener(listener: SubscriptionListener<DaemonEvent>): Promise<void> { + return this.transport.subscribe('daemon_event', (payload) => { try { - const newSettings = camelCaseObjectKeys(validate(settingsSchema, payload)) as ISettings; - listener.onEvent(newSettings); + const daemonEvent = camelCaseObjectKeys( + validate(daemonEventSchema, payload), + ) as DaemonEvent; + listener.onEvent(daemonEvent); } catch (error) { - listener.onError(new ResponseParseError('Invalid payload from settings', error)); + listener.onError(new ResponseParseError('Invalid payload from daemon_event', error)); } }); } diff --git a/gui/src/main/index.ts b/gui/src/main/index.ts index b5e466912a..d8b558ddcb 100644 --- a/gui/src/main/index.ts +++ b/gui/src/main/index.ts @@ -7,6 +7,7 @@ import * as path from 'path'; import * as uuid from 'uuid'; import { AccountToken, + DaemonEvent, IAppVersionInfo, ILocation, IRelayList, @@ -491,28 +492,20 @@ class ApplicationMain { } private async subscribeEvents(): Promise<void> { - const stateListener = new SubscriptionListener( - (newState: TunnelStateTransition) => { - this.setTunnelState(newState); - }, - (error: Error) => { - log.error(`Cannot deserialize the new state: ${error.message}`); - }, - ); - - const settingsListener = new SubscriptionListener( - (newSettings: ISettings) => { - this.setSettings(newSettings); + const daemonEventListener = new SubscriptionListener( + (daemonEvent: DaemonEvent) => { + if ('stateTransition' in daemonEvent) { + this.setTunnelState(daemonEvent.stateTransition); + } else if ('settings' in daemonEvent) { + this.setSettings(daemonEvent.settings); + } }, (error: Error) => { - log.error(`Cannot deserialize the new settings: ${error.message}`); + log.error(`Cannot deserialize the daemon event: ${error.message}`); }, ); - await Promise.all([ - this.daemonRpc.subscribeStateListener(stateListener), - this.daemonRpc.subscribeSettingsListener(settingsListener), - ]); + return this.daemonRpc.subscribeDaemonEventListener(daemonEventListener); } private setAccountHistory(accountHistory: AccountToken[]) { diff --git a/gui/src/shared/daemon-rpc-types.ts b/gui/src/shared/daemon-rpc-types.ts index 7908c4f67e..a3080b7590 100644 --- a/gui/src/shared/daemon-rpc-types.ts +++ b/gui/src/shared/daemon-rpc-types.ts @@ -41,6 +41,8 @@ export interface ITunnelEndpoint { tunnel: TunnelType; } +export type DaemonEvent = { stateTransition: TunnelStateTransition } | { settings: ISettings }; + export type TunnelStateTransition = | { state: 'disconnected' } | { state: 'connecting'; details?: ITunnelEndpoint } |
