diff options
| author | Markus Pettersson <markus.pettersson@mullvad.net> | 2024-06-18 11:35:41 +0200 |
|---|---|---|
| committer | Markus Pettersson <markus.pettersson@mullvad.net> | 2024-06-20 13:04:40 +0200 |
| commit | 751026be2029636e491b6c8d22b979a33fa7cec1 (patch) | |
| tree | 19cccc1f2add8354813da929f63eaa46444240f4 /gui/src | |
| parent | 397d094c516802e39a34282bf58a1121b85bcace (diff) | |
| download | mullvadvpn-751026be2029636e491b6c8d22b979a33fa7cec1.tar.xz mullvadvpn-751026be2029636e491b6c8d22b979a33fa7cec1.zip | |
Add `PrepareRestartv2` gRPC call
- Add option to automatically shutdown daemon on after running through
the same safety routine as `PrepareRestart`. This is exposed via a new
gRPC call called `PrepareRestartV2`.
- Add help text for enabling full disk access to the CLI
Diffstat (limited to 'gui/src')
| -rw-r--r-- | gui/src/main/daemon-rpc.ts | 4 | ||||
| -rw-r--r-- | gui/src/main/index.ts | 6 | ||||
| -rw-r--r-- | gui/src/main/tunnel-state.ts | 13 |
3 files changed, 21 insertions, 2 deletions
diff --git a/gui/src/main/daemon-rpc.ts b/gui/src/main/daemon-rpc.ts index e8f8d96e18..3461a85ac5 100644 --- a/gui/src/main/daemon-rpc.ts +++ b/gui/src/main/daemon-rpc.ts @@ -568,6 +568,10 @@ export class DaemonRpc { await this.callEmpty(this.client.updateDevice); } + public async prepareRestart(quit: boolean) { + await this.callBool(this.client.prepareRestartV2, quit); + } + public async setDaitaSettings(daitaSettings: IDaitaSettings): Promise<void> { const grpcDaitaSettings = new grpcTypes.DaitaSettings(); grpcDaitaSettings.setEnabled(daitaSettings.enabled); diff --git a/gui/src/main/index.ts b/gui/src/main/index.ts index ded7ea6ede..b96bc07f12 100644 --- a/gui/src/main/index.ts +++ b/gui/src/main/index.ts @@ -321,7 +321,11 @@ class ApplicationMain } }; - private onBeforeQuit = (event: Electron.Event) => { + private onBeforeQuit = async (event: Electron.Event) => { + if (this.tunnelState.hasReceivedFullDiskAccessError) { + await this.daemonRpc.prepareRestart(true); + } + log.info('before-quit received'); if (this.quitInitiated) { event.preventDefault(); diff --git a/gui/src/main/tunnel-state.ts b/gui/src/main/tunnel-state.ts index 6829118818..297a7e481e 100644 --- a/gui/src/main/tunnel-state.ts +++ b/gui/src/main/tunnel-state.ts @@ -1,5 +1,5 @@ import { connectEnabled, disconnectEnabled, reconnectEnabled } from '../shared/connect-helper'; -import { ILocation, TunnelState } from '../shared/daemon-rpc-types'; +import { ErrorStateCause, ILocation, TunnelState } from '../shared/daemon-rpc-types'; import { Scheduler } from '../shared/scheduler'; export interface TunnelStateProvider { @@ -20,10 +20,15 @@ export default class TunnelStateHandler { // Scheduler for discarding the assumed next state. private tunnelStateFallbackScheduler = new Scheduler(); + private receivedFullDiskAccessError = false; + private lastKnownDisconnectedLocation: Partial<ILocation> | undefined; public constructor(private delegate: TunnelStateHandlerDelegate) {} + public get hasReceivedFullDiskAccessError() { + return this.receivedFullDiskAccessError; + } public get tunnelState() { return this.tunnelStateValue; } @@ -53,6 +58,12 @@ export default class TunnelStateHandler { } public handleNewTunnelState(newState: TunnelState) { + if (newState.state === 'error' && newState.details) { + if (newState.details.cause === ErrorStateCause.needFullDiskPermissions) { + this.receivedFullDiskAccessError = true; + } + } + // If there's a fallback state set then the app is in an assumed next state and need to check // if it's now reached or if the current state should be ignored and set as the fallback state. if (this.tunnelStateFallback) { |
