diff options
| author | TrainDoctor <traindoctor@protonmail.com> | 2022-10-29 15:03:12 -0700 |
|---|---|---|
| committer | TrainDoctor <traindoctor@protonmail.com> | 2022-10-29 15:03:21 -0700 |
| commit | 4d30339c34782a6e3d313804fa393c95ad38c4b2 (patch) | |
| tree | cdeb7463f3237f2dd998d51f2fa5b39f67ded196 | |
| parent | 5996a3f88be51e5ac59256b2d078fa6172639fb4 (diff) | |
| download | decky-loader-4d30339c34782a6e3d313804fa393c95ad38c4b2.tar.gz decky-loader-4d30339c34782a6e3d313804fa393c95ad38c4b2.zip | |
Add StoreSelect component
| -rw-r--r-- | frontend/src/components/settings/pages/general/BranchSelect.tsx | 2 | ||||
| -rw-r--r-- | frontend/src/components/settings/pages/general/StoreSelect.tsx | 52 | ||||
| -rw-r--r-- | frontend/src/components/settings/pages/general/index.tsx | 3 | ||||
| -rw-r--r-- | frontend/src/store.tsx | 48 | ||||
| -rw-r--r-- | frontend/src/updater.ts | 2 |
5 files changed, 99 insertions, 8 deletions
diff --git a/frontend/src/components/settings/pages/general/BranchSelect.tsx b/frontend/src/components/settings/pages/general/BranchSelect.tsx index 154bff9c..5e43a13d 100644 --- a/frontend/src/components/settings/pages/general/BranchSelect.tsx +++ b/frontend/src/components/settings/pages/general/BranchSelect.tsx @@ -10,7 +10,7 @@ const logger = new Logger('BranchSelect'); enum UpdateBranch { Stable, Prerelease, - // Nightly, + Testing, } const BranchSelect: FunctionComponent<{}> = () => { diff --git a/frontend/src/components/settings/pages/general/StoreSelect.tsx b/frontend/src/components/settings/pages/general/StoreSelect.tsx new file mode 100644 index 00000000..c24bacb9 --- /dev/null +++ b/frontend/src/components/settings/pages/general/StoreSelect.tsx @@ -0,0 +1,52 @@ +import { Dropdown, Field, TextField } from 'decky-frontend-lib'; +import { FunctionComponent } from 'react'; +import { FaShapes } from 'react-icons/fa'; + +import Logger from '../../../../logger'; +import { Store } from '../../../../store'; +import { useSetting } from '../../../../utils/hooks/useSetting'; + +const logger = new Logger('StoreSelect'); + +const StoreSelect: FunctionComponent<{}> = () => { + const [selectedStore, setSelectedStore] = useSetting<Store>('store', Store.Default); + const [selectedStoreURL, setSelectedStoreURL] = useSetting<string | null>('store-url', null); + + // Returns numerical values from 0 to 2 (with current branch setup as of 8/28/22) + // 0 being Default, 1 being Testing and 2 being Custom + return ( + <> + <Field label="Store Channel"> + <Dropdown + rgOptions={Object.values(Store) + .filter((store) => typeof store == 'string') + .map((store) => ({ + label: store, + data: Store[store], + }))} + selectedOption={selectedStore} + onChange={async (newVal) => { + await setSelectedStore(newVal.data); + logger.log('switching stores!'); + }} + /> + </Field> + {selectedStore == Store.Custom && ( + <Field + label="Custom Store" + indentLevel={1} + description={ + <TextField + label={'URL'} + value={selectedStoreURL || undefined} + onChange={(e) => setSelectedStoreURL(e?.target.value || null)} + /> + } + icon={<FaShapes style={{ display: 'block' }} />} + ></Field> + )} + </> + ); +}; + +export default StoreSelect; diff --git a/frontend/src/components/settings/pages/general/index.tsx b/frontend/src/components/settings/pages/general/index.tsx index 6ce9f682..d661b779 100644 --- a/frontend/src/components/settings/pages/general/index.tsx +++ b/frontend/src/components/settings/pages/general/index.tsx @@ -5,6 +5,7 @@ import { FaShapes, FaTools } from 'react-icons/fa'; import { installFromURL } from '../../../../store'; import BranchSelect from './BranchSelect'; import RemoteDebuggingSettings from './RemoteDebugging'; +import StoreSelect from './StoreSelect'; import UpdaterSettings from './Updater'; export default function GeneralSettings({ @@ -15,10 +16,12 @@ export default function GeneralSettings({ setIsDeveloper: (val: boolean) => void; }) { const [pluginURL, setPluginURL] = useState(''); + return ( <div> <UpdaterSettings /> <BranchSelect /> + <StoreSelect /> <RemoteDebuggingSettings /> <Field label="Developer mode" diff --git a/frontend/src/store.tsx b/frontend/src/store.tsx index cc0e4cf0..9b1c5d2e 100644 --- a/frontend/src/store.tsx +++ b/frontend/src/store.tsx @@ -1,4 +1,11 @@ import { Plugin } from './plugin'; +import { getSetting, setSetting } from './utils/settings'; + +export enum Store { + Default, + Testing, + Custom, +} export interface StorePluginVersion { name: string; @@ -20,12 +27,41 @@ export type PluginUpdateMapping = Map<string, StorePluginVersion>; export async function getPluginList(): Promise<StorePlugin[]> { let version = await window.DeckyPluginLoader.updateVersion(); - return fetch('https://plugins.deckbrew.xyz/plugins', { - method: 'GET', - headers: { - 'X-Decky-Version': version.current, - }, - }).then((r) => r.json()); + let store = await getSetting<Store>('store', Store.Default); + let customURL = await getSetting<string>('store-url', 'https://plugins.deckbrew.xyz/plugins'); + let storeURL; + if (!store) { + console.log('Could not get a default store, using Default.'); + await setSetting('store-url', Store.Default); + return fetch('https://plugins.deckbrew.xyz/plugins', { + method: 'GET', + headers: { + 'X-Decky-Version': version.current, + }, + }).then((r) => r.json()); + } else { + switch (+store) { + case Store.Default: + storeURL = 'https://plugins.deckbrew.xyz/plugins'; + break; + case Store.Testing: + storeURL = 'https://testing.deckbrew.xyz/plugins'; + break; + case Store.Custom: + storeURL = customURL; + break; + default: + console.error('Somehow you ended up without a standard URL, using the default URL.'); + storeURL = 'https://plugins.deckbrew.xyz/plugins'; + break; + } + return fetch(storeURL, { + method: 'GET', + headers: { + 'X-Decky-Version': version.current, + }, + }).then((r) => r.json()); + } } export async function installFromURL(url: string) { diff --git a/frontend/src/updater.ts b/frontend/src/updater.ts index 2c0b66fe..16955104 100644 --- a/frontend/src/updater.ts +++ b/frontend/src/updater.ts @@ -1,7 +1,7 @@ export enum Branches { Release, Prerelease, - Nightly, + Testing, } export interface DeckyUpdater { |
