diff options
| -rw-r--r-- | desktop/packages/mullvad-vpn/src/main/grpc-type-convertions.ts | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/desktop/packages/mullvad-vpn/src/main/grpc-type-convertions.ts b/desktop/packages/mullvad-vpn/src/main/grpc-type-convertions.ts index 96334cc435..44f1c8b3a6 100644 --- a/desktop/packages/mullvad-vpn/src/main/grpc-type-convertions.ts +++ b/desktop/packages/mullvad-vpn/src/main/grpc-type-convertions.ts @@ -14,6 +14,8 @@ import { Constraint, CustomLists, CustomProxy, + DaemonAppUpgradeError, + DaemonAppUpgradeEvent, DaemonEvent, DeviceEvent, DeviceState, @@ -713,6 +715,65 @@ function convertFromObfuscationSettings( }; } +function convertFromAppUpgradeError(error: grpcTypes.AppUpgradeError.Error): DaemonAppUpgradeError { + switch (error) { + case grpcTypes.AppUpgradeError.Error.DOWNLOAD_FAILED: + return 'DOWNLOAD_FAILED'; + case grpcTypes.AppUpgradeError.Error.VERFICATION_FAILED: + return 'VERIFICATION_FAILED'; + default: + return 'GENERAL_ERROR'; + } +} + +export function convertFromAppUpgradeEvent(data: grpcTypes.AppUpgradeEvent): DaemonAppUpgradeEvent { + const downloadStartingData = data.getDownloadStarting(); + if (downloadStartingData !== undefined) { + return { type: 'APP_UPGRADE_STATUS_DOWNLOAD_STARTED' }; + } + + const downloadProgressData = data.getDownloadProgress(); + if (downloadProgressData !== undefined) { + const [server, progress, timeLeftDuration] = [ + downloadProgressData.getServer(), + downloadProgressData.getProgress(), + downloadProgressData.getTimeLeft(), + ]; + + const timeLeft = timeLeftDuration?.getSeconds() || 0; + + return { type: 'APP_UPGRADE_STATUS_DOWNLOAD_PROGRESS', server, progress, timeLeft }; + } + + if (data.hasUpgradeAborted()) { + return { type: 'APP_UPGRADE_STATUS_ABORTED' }; + } + + if (data.hasVerifyingInstaller()) { + return { type: 'APP_UPGRADE_STATUS_VERIFYING_INSTALLER' }; + } + + if (data.hasVerifiedInstaller()) { + return { type: 'APP_UPGRADE_STATUS_VERIFIED_INSTALLER' }; + } + + const errorData = data.getError(); + if (errorData !== undefined) { + const error = errorData.getError(); + + return { + type: 'APP_UPGRADE_ERROR', + error: convertFromAppUpgradeError(error), + }; + } + + // Handle unknown AppUpgradeEvent messages + const keys = Object.entries(data.toObject()) + .filter(([, value]) => value !== undefined) + .map(([key]) => key); + throw new Error(`Unknown app upgrade event received containing ${keys}`); +} + export function convertFromDaemonEvent(data: grpcTypes.DaemonEvent): DaemonEvent { const tunnelState = data.getTunnelState(); if (tunnelState !== undefined) { |
