From 93151e4e5e4776e249d9d824bbdf8f610dbae708 Mon Sep 17 00:00:00 2001 From: EMERALD Date: Tue, 25 Apr 2023 21:20:39 -0500 Subject: Add file picker plugin install, plugin installs to developer page (#405) --- .../src/components/modals/PluginInstallModal.tsx | 8 +- .../src/components/modals/filepicker/index.tsx | 10 +- .../components/settings/pages/developer/index.tsx | 137 ++++++++++++++------- .../components/settings/pages/general/index.tsx | 21 +--- 4 files changed, 105 insertions(+), 71 deletions(-) (limited to 'frontend/src') diff --git a/frontend/src/components/modals/PluginInstallModal.tsx b/frontend/src/components/modals/PluginInstallModal.tsx index f2f13bbf..7f0683ee 100644 --- a/frontend/src/components/modals/PluginInstallModal.tsx +++ b/frontend/src/components/modals/PluginInstallModal.tsx @@ -29,10 +29,10 @@ const PluginInstallModal: FC = ({ artifact, version, ha strTitle={`Install ${artifact}`} strOKButtonText={loading ? 'Installing' : 'Install'} > - {hash == 'False' ? ( -

!!!!NO HASH PROVIDED!!!!

- ) : ( - `Are you sure you want to install ${artifact} ${version}?` + Are you sure you want to install {artifact} + {version ? ` ${version}` : ''}? + {hash == 'False' && ( + This plugin does not have a hash, you are installing it at your own risk. )} ); diff --git a/frontend/src/components/modals/filepicker/index.tsx b/frontend/src/components/modals/filepicker/index.tsx index dcf179a3..ec3fc260 100644 --- a/frontend/src/components/modals/filepicker/index.tsx +++ b/frontend/src/components/modals/filepicker/index.tsx @@ -134,7 +134,15 @@ const FilePicker: FunctionComponent = ({ )} )} - {file.name} + + {file.name} + ); diff --git a/frontend/src/components/settings/pages/developer/index.tsx b/frontend/src/components/settings/pages/developer/index.tsx index bd80cb77..e6e37813 100644 --- a/frontend/src/components/settings/pages/developer/index.tsx +++ b/frontend/src/components/settings/pages/developer/index.tsx @@ -1,64 +1,109 @@ -import { DialogBody, Field, TextField, Toggle } from 'decky-frontend-lib'; -import { useRef } from 'react'; -import { FaReact, FaSteamSymbol } from 'react-icons/fa'; +import { + DialogBody, + DialogButton, + DialogControlsSection, + DialogControlsSectionHeader, + Field, + TextField, + Toggle, +} from 'decky-frontend-lib'; +import { useRef, useState } from 'react'; +import { FaFileArchive, FaLink, FaReact, FaSteamSymbol } from 'react-icons/fa'; import { setShouldConnectToReactDevTools, setShowValveInternal } from '../../../../developer'; +import { installFromURL } from '../../../../store'; import { useSetting } from '../../../../utils/hooks/useSetting'; import RemoteDebuggingSettings from '../general/RemoteDebugging'; +const installFromZip = () => { + window.DeckyPluginLoader.openFilePicker('/home/deck', true).then((val) => { + const url = `file://${val.path}`; + console.log(`Installing plugin locally from ${url}`); + + if (url.endsWith('.zip')) { + installFromURL(url); + } else { + window.DeckyPluginLoader.toaster.toast({ + title: 'Decky', + body: `Installation failed! Only ZIP files are supported.`, + onClick: installFromZip, + }); + } + }); +}; + export default function DeveloperSettings() { const [enableValveInternal, setEnableValveInternal] = useSetting('developer.valve_internal', false); const [reactDevtoolsEnabled, setReactDevtoolsEnabled] = useSetting('developer.rdt.enabled', false); const [reactDevtoolsIP, setReactDevtoolsIP] = useSetting('developer.rdt.ip', ''); + const [pluginURL, setPluginURL] = useState(''); const textRef = useRef(null); return ( - - - Enables the Valve internal developer menu.{' '} - Do not touch anything in this menu unless you know what it does. - - } - icon={} - > - { - setEnableValveInternal(toggleValue); - setShowValveInternal(toggleValue); - }} - /> - - + + Third-Party Plugins + }> + Browse + + setPluginURL(e?.target.value)} />} + icon={} + > + installFromURL(pluginURL)}> + Install + + + + + Other + + - Enables connection to a computer running React DevTools. Changing this setting will reload Steam. Set the - IP address before enabling. + Enables the Valve internal developer menu.{' '} + Do not touch anything in this menu unless you know what it does. -
-
-
- setReactDevtoolsIP(e?.target.value)} /> -
- - } - icon={} - > - { - setReactDevtoolsEnabled(toggleValue); - setShouldConnectToReactDevTools(toggleValue); - }} - /> -
+ } + icon={} + > + { + setEnableValveInternal(toggleValue); + setShowValveInternal(toggleValue); + }} + /> +
+ + + Enables connection to a computer running React DevTools. Changing this setting will reload Steam. Set + the IP address before enabling. + +
+
+
+ setReactDevtoolsIP(e?.target.value)} /> +
+ + } + icon={} + > + { + setReactDevtoolsEnabled(toggleValue); + setShouldConnectToReactDevTools(toggleValue); + }} + /> +
+
); } diff --git a/frontend/src/components/settings/pages/general/index.tsx b/frontend/src/components/settings/pages/general/index.tsx index e0bd9691..97fd3e42 100644 --- a/frontend/src/components/settings/pages/general/index.tsx +++ b/frontend/src/components/settings/pages/general/index.tsx @@ -1,15 +1,5 @@ -import { - DialogBody, - DialogButton, - DialogControlsSection, - DialogControlsSectionHeader, - Field, - TextField, - Toggle, -} from 'decky-frontend-lib'; -import { useState } from 'react'; +import { DialogBody, DialogControlsSection, DialogControlsSectionHeader, Field, Toggle } from 'decky-frontend-lib'; -import { installFromURL } from '../../../../store'; import { useDeckyState } from '../../../DeckyState'; import BranchSelect from './BranchSelect'; import StoreSelect from './StoreSelect'; @@ -22,7 +12,6 @@ export default function GeneralSettings({ isDeveloper: boolean; setIsDeveloper: (val: boolean) => void; }) { - const [pluginURL, setPluginURL] = useState(''); const { versionInfo } = useDeckyState(); return ( @@ -46,14 +35,6 @@ export default function GeneralSettings({ }} /> - setPluginURL(e?.target.value)} />} - > - installFromURL(pluginURL)}> - Install - - About -- cgit v1.2.3