summaryrefslogtreecommitdiffhomepage
path: root/gui
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2019-03-27 16:47:04 +0100
committerAndrej Mihajlov <and@mullvad.net>2019-03-27 16:47:04 +0100
commitae59b0aa3f8798950f788310fe403fdc2f8f8f6f (patch)
tree37094fc6ce64372f34d880b5d430d06ad19052bf /gui
parent5c3a65a1aa6973ee31a3157d41c16a4a96dc0e4a (diff)
downloadmullvadvpn-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.ts37
-rw-r--r--gui/src/main/index.ts27
-rw-r--r--gui/src/shared/daemon-rpc-types.ts2
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 }