summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2022-01-13 12:20:38 +0100
committerOskar Nyberg <oskar@mullvad.net>2022-01-13 12:20:38 +0100
commit12258e4474bf845e5eb900cf48df97d0dfa5a9f2 (patch)
treecfa1357cdfced2521e8d0d2e6d389c54302106ef
parentda47c24bd42d6c5b1ee7430af68ccb145eff74d0 (diff)
parentfb56ae3b924d09f16026224bd55062b8a12d3539 (diff)
downloadmullvadvpn-12258e4474bf845e5eb900cf48df97d0dfa5a9f2.tar.xz
mullvadvpn-12258e4474bf845e5eb900cf48df97d0dfa5a9f2.zip
Merge branch 'switch-to-next-state-tray-icon'
-rw-r--r--gui/src/main/index.ts31
1 files changed, 18 insertions, 13 deletions
diff --git a/gui/src/main/index.ts b/gui/src/main/index.ts
index 893045f614..05ee5cb3b3 100644
--- a/gui/src/main/index.ts
+++ b/gui/src/main/index.ts
@@ -134,8 +134,8 @@ class ApplicationMain {
private accountHistory?: AccountToken = undefined;
private tunnelState: TunnelState = { state: 'disconnected' };
private lastIgnoredTunnelState?: TunnelState;
- private ignoreTunnelStatesUntil?: TunnelState['state'];
- private ignoreTunnelStateFallbackScheduler = new Scheduler();
+ private optimisticTunnelState?: TunnelState['state'];
+ private optimisticTunnelStateFallbackScheduler = new Scheduler();
private settings: ISettings = {
accountToken: undefined,
allowLan: false,
@@ -701,7 +701,7 @@ class ApplicationMain {
// Reset the daemon event listener since it's going to be invalidated on disconnect
this.daemonEventListener = undefined;
- this.ignoreTunnelStatesUntil = undefined;
+ this.optimisticTunnelState = undefined;
this.lastIgnoredTunnelState = undefined;
this.autoConnectFallbackScheduler.cancel();
@@ -811,11 +811,15 @@ class ApplicationMain {
this.wireguardKeygenEventAutoConnect();
}
- private setIgnoreTunnelStatesUntil(state: TunnelState['state']) {
- this.ignoreTunnelStatesUntil = state;
- this.ignoreTunnelStateFallbackScheduler.schedule(() => {
+ private setOptimisticTunnelState(state: 'connecting' | 'disconnecting') {
+ const tunnelState =
+ state === 'disconnecting' ? ({ state, details: 'nothing' } as const) : { state };
+ this.updateTrayIcon(tunnelState, this.settings.blockWhenDisconnected);
+
+ this.optimisticTunnelState = state;
+ this.optimisticTunnelStateFallbackScheduler.schedule(() => {
if (this.lastIgnoredTunnelState) {
- this.ignoreTunnelStatesUntil = undefined;
+ this.optimisticTunnelState = undefined;
this.setTunnelState(this.lastIgnoredTunnelState);
this.lastIgnoredTunnelState = undefined;
}
@@ -823,9 +827,10 @@ class ApplicationMain {
}
private setTunnelState(newState: TunnelState) {
- if (this.ignoreTunnelStatesUntil) {
- if (this.ignoreTunnelStatesUntil === newState.state) {
- this.ignoreTunnelStatesUntil = undefined;
+ if (this.optimisticTunnelState) {
+ if (this.optimisticTunnelState === newState.state) {
+ this.optimisticTunnelStateFallbackScheduler.cancel();
+ this.optimisticTunnelState = undefined;
this.lastIgnoredTunnelState = undefined;
} else {
this.lastIgnoredTunnelState = newState;
@@ -1205,15 +1210,15 @@ class ApplicationMain {
IpcMainEventChannel.location.handleGet(() => this.daemonRpc.getLocation());
IpcMainEventChannel.tunnel.handleConnect(() => {
- this.setIgnoreTunnelStatesUntil('connecting');
+ this.setOptimisticTunnelState('connecting');
return this.daemonRpc.connectTunnel();
});
IpcMainEventChannel.tunnel.handleDisconnect(() => {
- this.setIgnoreTunnelStatesUntil('disconnecting');
+ this.setOptimisticTunnelState('disconnecting');
return this.daemonRpc.disconnectTunnel();
});
IpcMainEventChannel.tunnel.handleReconnect(() => {
- this.setIgnoreTunnelStatesUntil('connecting');
+ this.setOptimisticTunnelState('connecting');
return this.daemonRpc.reconnectTunnel();
});