import { type ReactNode } from 'react'; import { open } from '@tauri-apps/plugin-shell'; import { ArrowUpCircle, CheckCircle2, ChevronDown, Download, FolderOpen, RefreshCw, ShieldCheck } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { version as currentVersion } from '../../package.json'; import { formatBytes } from '../utils/format/formatBytes'; import { useAppUpdater } from '../hooks/useAppUpdater'; import Modal from './Modal'; import Changelog from './appUpdater/Changelog'; export default function AppUpdater() { const { t } = useTranslation(); const { release, dismissed, setDismissed, changelogOpen, setChangelogOpen, dlState, dlProgress, dlError, countdown, asset, showAurHint, showWingetHint, useTauriUpdater, showInstallBtn, pct, handleSkip, handleRestartNow, handleDownload, handleShowFolder, } = useAppUpdater(); if (!release || dismissed) return null; // Footer actions — state-dependent. Downloading has no actions (no footer). // When there is no in-app install (AUR / from-source), "Remind me later" is the // primary action, so it gets the accent button; Skip stays a clear button. let footer: ReactNode = null; if (dlState === 'idle') { footer = ( <>
{showInstallBtn && ( )} > ); } else if (dlState === 'done' && useTauriUpdater) { footer = ( <> > ); } else if (dlState === 'done') { footer = ( <> > ); } else if (dlState === 'error') { footer = ( <> > ); } return (yay -S psysonic-bin
sudo pacman -Syu psysonic-bin
winget upgrade Psysonic