summaryrefslogtreecommitdiff
path: root/frontend/src/store.tsx
diff options
context:
space:
mode:
authorBeebles <102569435+beebls@users.noreply.github.com>2024-08-07 16:57:21 -0600
committerBeebles <102569435+beebls@users.noreply.github.com>2025-08-01 06:45:40 -0600
commit5a212e95fc2dfb6725b6996b4a72a2acd8a6b942 (patch)
treef79e850d9cb8f3858c882db48c243093862dce13 /frontend/src/store.tsx
parent8f41eb93ef80bfbf3851ce8a82ea0f88c87e6c68 (diff)
downloaddecky-loader-5a212e95fc2dfb6725b6996b4a72a2acd8a6b942.tar.gz
decky-loader-5a212e95fc2dfb6725b6996b4a72a2acd8a6b942.zip
feat(motd): add motd component (untested)
Diffstat (limited to 'frontend/src/store.tsx')
-rw-r--r--frontend/src/store.tsx138
1 files changed, 0 insertions, 138 deletions
diff --git a/frontend/src/store.tsx b/frontend/src/store.tsx
deleted file mode 100644
index dfd9b04b..00000000
--- a/frontend/src/store.tsx
+++ /dev/null
@@ -1,138 +0,0 @@
-import { compare } from 'compare-versions';
-
-import { InstallType, Plugin, installPlugin, installPlugins } from './plugin';
-import { getSetting, setSetting } from './utils/settings';
-
-export enum Store {
- Default,
- Testing,
- Custom,
-}
-
-export enum SortOptions {
- name = 'name',
- date = 'date',
- downloads = 'downloads',
-}
-
-export enum SortDirections {
- ascending = 'asc',
- descending = 'desc',
-}
-
-export interface StorePluginVersion {
- name: string;
- hash: string;
- artifact: string | undefined | null;
-}
-
-export interface StorePlugin {
- id: number;
- name: string;
- versions: StorePluginVersion[];
- author: string;
- description: string;
- tags: string[];
- image_url: string;
-}
-
-export interface PluginInstallRequest {
- plugin: string;
- selectedVer: StorePluginVersion;
- installType: InstallType;
-}
-
-// name: version
-export type PluginUpdateMapping = Map<string, StorePluginVersion>;
-
-export async function getStore(): Promise<Store> {
- return await getSetting<Store>('store', Store.Default);
-}
-
-export async function getPluginList(
- sort_by: SortOptions | null = null,
- sort_direction: SortDirections | null = null,
-): Promise<StorePlugin[]> {
- let version = await window.DeckyPluginLoader.updateVersion();
- let store = await getSetting<Store | null>('store', null);
- let customURL = await getSetting<string>('store-url', 'https://plugins.deckbrew.xyz/plugins');
-
- let query: URLSearchParams | string = new URLSearchParams();
- sort_by && query.set('sort_by', sort_by);
- sort_direction && query.set('sort_direction', sort_direction);
- query = '?' + String(query);
-
- let storeURL;
- if (store === null) {
- console.log('Could not get store, using Default.');
- await setSetting('store', Store.Default);
- store = Store.Default;
- }
- 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 + query, {
- method: 'GET',
- headers: {
- 'X-Decky-Version': version.current,
- },
- }).then((r) => r.json());
-}
-
-export async function installFromURL(url: string) {
- const splitURL = url.split('/');
- await installPlugin(url, splitURL[splitURL.length - 1].replace('.zip', ''));
-}
-
-export async function requestPluginInstall(plugin: string, selectedVer: StorePluginVersion, installType: InstallType) {
- const artifactUrl = selectedVer.artifact ?? pluginUrl(selectedVer.hash);
- await installPlugin(artifactUrl, plugin, selectedVer.name, selectedVer.hash, installType);
-}
-
-export async function requestMultiplePluginInstalls(requests: PluginInstallRequest[]) {
- await installPlugins(
- requests.map(({ plugin, installType, selectedVer }) => ({
- name: plugin,
- artifact: selectedVer.artifact ?? pluginUrl(selectedVer.hash),
- version: selectedVer.name,
- hash: selectedVer.hash,
- install_type: installType,
- })),
- );
-}
-
-export async function checkForPluginUpdates(plugins: Plugin[]): Promise<PluginUpdateMapping> {
- const serverData = await getPluginList();
- const updateMap = new Map<string, StorePluginVersion>();
- for (let plugin of plugins) {
- const remotePlugin = serverData?.find((x) => x.name == plugin.name);
- //FIXME: Ugly hack since plugin.version might be null during evaluation,
- //so this will set the older version possible
- const curVer = plugin.version ? plugin.version : '0.0';
- if (
- remotePlugin &&
- remotePlugin.versions?.length > 0 &&
- plugin.version != remotePlugin?.versions?.[0]?.name &&
- compare(remotePlugin?.versions?.[0]?.name, curVer, '>')
- ) {
- updateMap.set(plugin.name, remotePlugin.versions[0]);
- }
- }
- return updateMap;
-}
-
-function pluginUrl(hash: string) {
- return `https://cdn.tzatzikiweeb.moe/file/steam-deck-homebrew/versions/${hash}.zip`;
-}