diff --git a/src/console/mirrorManager.ts b/src/console/mirrorManager.ts index b3e7c6c18..8a7514cb3 100644 --- a/src/console/mirrorManager.ts +++ b/src/console/mirrorManager.ts @@ -96,6 +96,7 @@ export class MirrorManager extends EventEmitter { ip: config.ipAddress, info: { nickname: details.consoleNick, + nintendontVersion: details.version, }, }); }); @@ -197,6 +198,7 @@ export class MirrorManager extends EventEmitter { status: ConnectionStatus.DISCONNECTED, isMirroring: false, filename: null, + nintendontVersion: null, }, }); } diff --git a/src/console/types.ts b/src/console/types.ts index 1e19f9983..59ac4fe18 100644 --- a/src/console/types.ts +++ b/src/console/types.ts @@ -8,6 +8,7 @@ export interface ConsoleMirrorStatusUpdate { isMirroring: boolean; filename: string | null; nickname: string; + nintendontVersion: string | null; } export interface MirrorConfig { diff --git a/src/renderer/containers/Console/SavedConnectionItem.tsx b/src/renderer/containers/Console/SavedConnectionItem.tsx index 70e67d747..dbc080511 100644 --- a/src/renderer/containers/Console/SavedConnectionItem.tsx +++ b/src/renderer/containers/Console/SavedConnectionItem.tsx @@ -10,11 +10,14 @@ import CardHeader from "@material-ui/core/CardHeader"; import IconButton from "@material-ui/core/IconButton"; import Tooltip from "@material-ui/core/Tooltip"; import MoreVertIcon from "@material-ui/icons/MoreVert"; +import WarningIcon from "@material-ui/icons/Warning"; import { StoredConnection } from "@settings/types"; import { ConnectionStatus, Ports } from "@slippi/slippi-js"; import React from "react"; import { useToasts } from "react-toast-notifications"; +import { lt } from "semver"; +import { ExternalLink as A } from "@/components/ExternalLink"; import { LabelledText } from "@/components/LabelledText"; import { connectToConsole, disconnectFromConsole, startConsoleMirror } from "@/lib/consoleConnection"; import { ReactComponent as WiiIcon } from "@/styles/images/wii-icon.svg"; @@ -26,6 +29,7 @@ export interface SavedConnectionItemProps { isMirroring: boolean; nickname?: string; currentFilename: string | null; + nintendontVersion: string | null; connection: StoredConnection; onOpenMenu: (index: number, element: HTMLElement) => void; } @@ -39,6 +43,7 @@ export const SavedConnectionItem: React.FC = ({ nickname, isAvailable, currentFilename, + nintendontVersion, }) => { const { addToast } = useToasts(); const onConnect = () => connectToConsole(connection); @@ -53,6 +58,7 @@ export const SavedConnectionItem: React.FC = ({ const statusName = status === ConnectionStatus.DISCONNECTED && isAvailable ? "Available" : renderStatusName(status); const isConnected = status !== ConnectionStatus.DISCONNECTED; const title = nickname ? `${connection.ipAddress} (${nickname})` : connection.ipAddress; + const nintendontIsOutdated = nintendontVersion !== null && lt(nintendontVersion, "1.9.1"); return ( = ({ } `} > + {nintendontIsOutdated && }
{ return `Unknown status: ${status}`; } }; + +const OutdatedNintendontWarning: React.FC = () => { + return ( +
+ + + Your Nintendont is out of date and no longer supported. Download the latest version from{" "} + the Slippi website. + +
+ ); +}; diff --git a/src/renderer/containers/Console/SavedConnectionsList.tsx b/src/renderer/containers/Console/SavedConnectionsList.tsx index 7e2f251b0..903b8af7d 100644 --- a/src/renderer/containers/Console/SavedConnectionsList.tsx +++ b/src/renderer/containers/Console/SavedConnectionsList.tsx @@ -72,6 +72,7 @@ export const SavedConnectionsList: React.FC = ({ avai isMirroring={isMirroring ?? false} isAvailable={Boolean(consoleInfo)} currentFilename={consoleStatus?.filename ?? null} + nintendontVersion={consoleStatus?.nintendontVersion ?? null} nickname={consoleStatus?.nickname ?? consoleInfo?.name} connection={conn} index={index} diff --git a/src/renderer/lib/hooks/useConsoleDiscovery.ts b/src/renderer/lib/hooks/useConsoleDiscovery.ts index 53f1aacf4..33e8c7b42 100644 --- a/src/renderer/lib/hooks/useConsoleDiscovery.ts +++ b/src/renderer/lib/hooks/useConsoleDiscovery.ts @@ -24,10 +24,13 @@ export const useConsoleDiscoveryStore = create( draft.connectedConsoles[ip].status = info.status ?? existing?.status; draft.connectedConsoles[ip].isMirroring = info.isMirroring ?? existing?.isMirroring; - // This value can be null so check against undefined + // These values can be null so check against undefined if (info.filename !== undefined) { draft.connectedConsoles[ip].filename = info.filename; } + if (info.nintendontVersion !== undefined) { + draft.connectedConsoles[ip].nintendontVersion = info.nintendontVersion; + } }), ), }),