import React, { useState, useEffect } from "react"; import { Button } from "@/components/button.tsx"; import { VersionAlert } from "@/components/version-alert.tsx"; import { useTranslation } from "react-i18next"; import { isElectron } from "@/lib/electron"; import { checkElectronUpdate } from "@/main-axios.ts"; import { useTheme } from "@/components/theme-provider"; interface VersionCheckModalProps { onContinue: () => void; } type ElectronWindow = Window & { electronAPI?: { getAppVersion?: () => Promise; }; }; export function ElectronVersionCheck({ onContinue }: VersionCheckModalProps) { const { t } = useTranslation(); const { theme } = useTheme(); const [versionInfo, setVersionInfo] = useState | null>(null); const [versionChecking, setVersionChecking] = useState(false); const [versionDismissed] = useState(false); const isDarkMode = theme === "dark" || theme === "dracula" || theme === "gentlemansChoice" || theme === "midnightEspresso" || theme === "catppuccinMocha" || (theme === "system" && window.matchMedia("(prefers-color-scheme: dark)").matches); const lineColor = isDarkMode ? "#151517" : "#f9f9f9"; const versionModalTitle = versionInfo?.status === "beta" ? t("versionCheck.betaVersion") : t("versionCheck.updateRequired"); useEffect(() => { const updateCheckDisabled = localStorage.getItem("disableUpdateCheck") === "true"; if (updateCheckDisabled) { onContinue(); return; } if (isElectron()) { checkForUpdates(); } else { onContinue(); } }, []); const checkForUpdates = async () => { setVersionChecking(true); try { const updateInfo = await checkElectronUpdate(); setVersionInfo(updateInfo); const currentVersion = await ( window as ElectronWindow ).electronAPI?.getAppVersion?.(); const dismissedVersion = localStorage.getItem( "electron-version-check-dismissed", ); if (dismissedVersion === currentVersion) { onContinue(); return; } if (updateInfo?.status === "up_to_date") { if (currentVersion) { localStorage.setItem( "electron-version-check-dismissed", currentVersion, ); } onContinue(); return; } } catch (error) { console.error("Failed to check for updates:", error); setVersionInfo({ success: false, error: "Check failed" }); } finally { setVersionChecking(false); } }; const handleDownloadUpdate = () => { if (versionInfo?.latest_release?.html_url) { window.open(versionInfo.latest_release.html_url, "_blank"); } }; const handleContinue = async () => { const currentVersion = await ( window as ElectronWindow ).electronAPI?.getAppVersion?.(); if (currentVersion) { localStorage.setItem("electron-version-check-dismissed", currentVersion); } onContinue(); }; if (!isElectron()) { return null; } if (versionChecking && !versionInfo) { return (

{t("versionCheck.checkingUpdates")}

); } if (!versionInfo || versionDismissed) { return (

{t("versionCheck.checkUpdates")}

{versionInfo && !versionDismissed && (
)}
); } return (

{versionModalTitle}

); }