diff --git a/src/renderer/components/Modal/ErrorDialog.tsx b/src/renderer/components/Modal/ErrorDialog.tsx index 58386037..4f9d392a 100644 --- a/src/renderer/components/Modal/ErrorDialog.tsx +++ b/src/renderer/components/Modal/ErrorDialog.tsx @@ -1,7 +1,7 @@ -import React, { FC } from 'react'; +import React, { FC, useState } from 'react'; import { AlertModal } from "renderer/components/Modal/index"; -import { ExclamationTriangle, Hdd, Shield } from "react-bootstrap-icons"; -import { shell } from "electron"; +import { Clipboard, ClipboardCheck, Ethernet, ExclamationTriangle, Hdd, ShieldExclamation, ShieldLock } from "react-bootstrap-icons"; +import { clipboard, shell } from "electron"; import { FragmenterError, FragmenterErrorCode } from "@flybywiresim/fragmenter"; import { SentrySessionCard } from "renderer/components/SentrySessionCard"; @@ -29,9 +29,8 @@ export const ErrorDialog: FC = ({ error, onAcknowledge }) => { switch (fragmenterError.code) { case FragmenterErrorCode.PermissionsError: errorVisualisation = ( - }> + }> Windows permissions error - Make sure the install folder has appropriate permissions. ); @@ -40,17 +39,51 @@ export const ErrorDialog: FC = ({ error, onAcknowledge }) => { errorVisualisation = ( }> No space left on device - Try to free up space in order to install this addon. ); break; + case FragmenterErrorCode.NetworkError: + errorVisualisation = ( + }> + Network error + Try again or use a VPN when connection problems persist. + + ); + break; + case FragmenterErrorCode.ResourcesBusy: // fallthrough + case FragmenterErrorCode.MaxModuleRetries: // fallthrough + case FragmenterErrorCode.FileNotFound: // fallthrough + case FragmenterErrorCode.DirectoryNotEmpty: // fallthrough + case FragmenterErrorCode.NotADirectory: // fallthrough + case FragmenterErrorCode.ModuleJsonInvalid: // fallthrough + case FragmenterErrorCode.ModuleCrcMismatch: // fallthrough + case FragmenterErrorCode.UserAborted: // fallthrough + case FragmenterErrorCode.CorruptedZipFile: + case FragmenterErrorCode.Null: // fallthrough + case FragmenterErrorCode.Unknown: // Fallthrough default: - errorVisualisation = null; + errorVisualisation = ( + }> + An error has occurred! + Please contact FlyByWire support on Discord. See below. + + ); break; } } + // Error stack to clipboard handling + const [showCopied, setShowCopied] = useState(false); + const handleCopy = () => { + clipboard.writeText(error.stack, 'clipboard'); + setShowCopied(true); + setTimeout(() => { + setShowCopied(false); + }, 1_500); + }; + return ( = ({ error, onAcknowledge }) => { bodyText={(
-

An error occurred while installing this addon.

- {errorVisualisation} -
{error.stack}
-

Obtain support with a screenshot of this dialog on Discord:

- +

Obtain support on Discord and provide the error message and on request + the sentry code:

+
+ {showCopied ? ( + <> + Copied! +
+ + + +
+ + ) : ( + <> + Copy error message to clipboard +
+ + + +
+ + )} +
)} acknowledgeText="Dismiss" - onAcknowledge={onAcknowledge} + onAcknowledge={ + onAcknowledge + } /> - ); + ) + ; }; interface ErrorVisualisationBoxProps { diff --git a/src/renderer/components/SentrySessionCard.tsx b/src/renderer/components/SentrySessionCard.tsx index 11baa952..eaae3854 100644 --- a/src/renderer/components/SentrySessionCard.tsx +++ b/src/renderer/components/SentrySessionCard.tsx @@ -19,20 +19,29 @@ export const SentrySessionCard: FC = () => { }; return ( -
- {sessionID} - -
- {showCopied ? ( - - Copied - - - - ) : ( - - )} -
+
+ {showCopied ? ( + <> + Copied! +
+ + + +
+ + ) : ( + <> + Copy Sentry Code to clipboard: {sessionID} +
+ + + +
+ + )}
); };