import { Carousel, DialogButton, Field, Focusable, ProgressBarWithInfo, Spinner, showModal } from 'decky-frontend-lib'; import { useCallback } from 'react'; import { Suspense, lazy } from 'react'; import { useEffect, useState } from 'react'; import { FaArrowDown } from 'react-icons/fa'; import { VerInfo, callUpdaterMethod, finishUpdate } from '../../../../updater'; import { useDeckyState } from '../../../DeckyState'; import InlinePatchNotes from '../../../patchnotes/InlinePatchNotes'; import WithSuspense from '../../../WithSuspense'; const MarkdownRenderer = lazy(() => import('../../../Markdown')); function PatchNotesModal({ versionInfo, closeModal }: { versionInfo: VerInfo | null; closeModal?: () => {} }) { return ( (

{versionInfo?.all?.[id]?.name}

{versionInfo?.all?.[id]?.body ? ( {versionInfo.all[id].body} ) : ( 'no patch notes for this version' )}
)} fnGetId={(id) => id} nNumItems={versionInfo?.all?.length} nHeight={window.innerHeight - 40} nItemHeight={window.innerHeight - 40} nItemMarginX={0} initialColumn={0} autoFocus={true} fnGetColumnWidth={() => window.innerWidth} />
); } export default function UpdaterSettings() { const { isLoaderUpdating, setIsLoaderUpdating, versionInfo, setVersionInfo } = useDeckyState(); const [checkingForUpdates, setCheckingForUpdates] = useState(false); const [updateProgress, setUpdateProgress] = useState(-1); const [reloading, setReloading] = useState(false); useEffect(() => { window.DeckyUpdater = { updateProgress: (i) => { setUpdateProgress(i); setIsLoaderUpdating(true); }, finish: async () => { setUpdateProgress(0); setReloading(true); await finishUpdate(); }, }; }, []); const showPatchNotes = useCallback(() => { showModal(); }, [versionInfo]); return ( <> {`Current version: ${versionInfo.current}\n${ versionInfo.updatable ? `Latest version: ${versionInfo.remote?.tag_name}` : '' }`} ) } icon={ !versionInfo ? ( ) : ( ) } > {updateProgress == -1 && !isLoaderUpdating ? ( { setCheckingForUpdates(true); const res = (await callUpdaterMethod('check_for_updates')) as { result: VerInfo }; setVersionInfo(res.result); setCheckingForUpdates(false); } : async () => { setUpdateProgress(0); callUpdaterMethod('do_update'); } } > {checkingForUpdates ? 'Checking' : !versionInfo?.remote || versionInfo?.remote?.tag_name == versionInfo?.current ? 'Check For Updates' : 'Install Update'} ) : ( )} {versionInfo?.remote && ( }> {versionInfo?.remote.body} )} ); }