summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrainDoctor <traindoctor@protonmail.com>2022-10-29 15:03:12 -0700
committerTrainDoctor <traindoctor@protonmail.com>2022-10-29 15:03:21 -0700
commit4d30339c34782a6e3d313804fa393c95ad38c4b2 (patch)
treecdeb7463f3237f2dd998d51f2fa5b39f67ded196
parent5996a3f88be51e5ac59256b2d078fa6172639fb4 (diff)
downloaddecky-loader-4d30339c34782a6e3d313804fa393c95ad38c4b2.tar.gz
decky-loader-4d30339c34782a6e3d313804fa393c95ad38c4b2.zip
Add StoreSelect component
-rw-r--r--frontend/src/components/settings/pages/general/BranchSelect.tsx2
-rw-r--r--frontend/src/components/settings/pages/general/StoreSelect.tsx52
-rw-r--r--frontend/src/components/settings/pages/general/index.tsx3
-rw-r--r--frontend/src/store.tsx48
-rw-r--r--frontend/src/updater.ts2
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 {