import { Carousel, DialogButton, Field, FocusRing, Focusable, ProgressBarWithInfo, Spinner, findSP, showModal, } from 'decky-frontend-lib'; import { useCallback } from 'react'; import { Suspense, lazy } from 'react'; import { useEffect, useState } from 'react'; import { FaExclamation } 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?: () => {} }) { const SP = findSP(); return ( (

{versionInfo?.all?.[id]?.name || 'Invalid Update Name'}

{versionInfo?.all?.[id]?.body ? ( {versionInfo.all[id].body} ) : ( 'no patch notes for this version' )}
)} fnGetId={(id) => id} nNumItems={versionInfo?.all?.length} nHeight={SP.innerHeight - 40} nItemHeight={SP.innerHeight - 40} nItemMarginX={0} initialColumn={0} autoFocus={true} fnGetColumnWidth={() => SP.innerWidth} name="Decky Updates" />
); } 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 ( <> Up to date: running {versionInfo?.current} ) } icon={ versionInfo?.remote && versionInfo?.remote?.tag_name != versionInfo?.current && ( ) } childrenContainerWidth={'fixed'} > {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?.tag_name != versionInfo?.current && ( }> {versionInfo?.remote.body} )} ); }