mirror of
https://github.com/SteamDeckHomebrew/decky-loader.git
synced 2026-06-17 08:47:49 +00:00
35e7c80835
* First iteration for internationalization of the loader * First iteration for internationalization of the loader * Cleanup node mess * Cleanup node mess pt2 * Additional touches * Latest decky changed merged into i18n and updated translation. * Styling fixes * Initial backend hosting implementation * Added correct url path of the loopback server. * Added correct url path of the loopback server. * Some better namespaced text. * Added whitelist for locales path. * Refactor languages and fix hooks logic bugs. * Small typo in language translation structure. * Working backend, automatically swtich languages with steam and language fixes. * Fix to languages * Key fixes * Additional language fixes. * Additional json changes * Final text revision and added a vscode tasks to automatically extract text from code. * Typo in the middleware * Remove unused imports * Cleanup whitespaces. * Import changes * Revert "Import changes" This reverts commit8e8231950f. * Update index.d.ts * Clean up unused imports * Delete pnpm-lock.yaml * Update rollup.config.js * Update PluginInstallModal.tsx * Update index.tsx * Update plugin-loader.tsx * Update plugin-loader.tsx * Revert "Delete pnpm-lock.yaml" This reverts commit3a39f36f21. * Additional strings reworks. * Fixes for issues coming from github merge. * Fixes for master * Styling fixes * Styling pt2 * Missed a few strings in master, * Styling fixes * Additional master merge fixes. * Final cleanup and adaptation to master. * Final empty language cleanup and few string added * Small changes to italian translation * Disabled translation on a few components inside plugin-loader for missing react hooks. * Fixed passing tag to translation. * Disable debug output for reducing console spam. * Return correct content type * Small italian language change * Added support for country code * Fixed missing translation for uninstall popup. * Fix class name shenanigans for toast notification * Update dependencies * Fixed github workflow to include the new locales folder * Update dependencies to latest version (unless it's React) and fixed the new small errors that cropped up * Missed a file name change * Updated dev dependencies to latest version * Missed a few dev dependencies * Revert "Update dependencies to latest version (unless it's React) and fixed the new small errors that cropped up" Messed up merge with a different main branch * Messed up deletion of rollup config. * Fix broken pnpm lock file * Missed a localized string during the merge * Fixed a parameter mistake in the uninstall text parameter * Fix pnpm random issues * Small italian language tweaks * Fix wrong parameter passed to the uninstall function call * Another fix on a wrong function parameter * Additional translation text on the store and branch selection channels * Changed the default type passed to map to being able to index the two arrays. * Reverted and reworked the last changes * Distinguish events in UI for installing vs reinstalling plugins * Additional fixes for reinstall prompt * Revert the use of intevalPlural since the parser doesn't seem to support that. * Missed a routing path in the backend * Small bugfixes * Small fixes * Correctly adding the parameter to the request headers. * Refactoring of the UI popup modal * Fix pnpm shenanigans * Final fixes for the install UI localization * Clean up unnedeed backend code * Small rework on text selection. * Cleaned up parser configuration * Removed extracttext dependency to pnpmsetup * Merged translation and cleaned up parser * Fixed JSON structure after manual merge. * Added translation to the file picker * Revert changes to PluginInstallModal * Reworked the text modal for the final time * Missed the proper linted text * Missed the backend change * Final branch cleanup * Fixed small translation bleeding Caused from the manual merge of _old.json files. * fix extra space in browser.py * fix extra newline in plugin-loader.tsx * Cleanup i18next-parser.config.mjs * Update plugin-loader.tsx * Cleanup language files * Better labeling of text * Fixed language typos in BranchSelect * Fixed language typos in StoreSelect * Cleanup plugin-loader.tsx from unused imports * Removed the path bypass since I'm using authentication from the frontend. * Reimplemented this component as a functional component. * Updated dependencies and lockfile * Removed static route from main.py Already handled in loader.py * Small italian coherency fixes * Fix small typography fixes on plugin name uninstall * Fixed italian typo on removal popup * Reenabled manual escaping value in i18next * Set to fallback to the default language if the string in the JSON file is empty. * Fixed pnpm wankery * Added a missed italian text translation string --------- Co-authored-by: AAGaming <aa@mail.catvibers.me>
99 lines
3.0 KiB
TypeScript
99 lines
3.0 KiB
TypeScript
import { InstallType, Plugin } from './plugin';
|
|
import { getSetting, setSetting } from './utils/settings';
|
|
|
|
export enum Store {
|
|
Default,
|
|
Testing,
|
|
Custom,
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
// name: version
|
|
export type PluginUpdateMapping = Map<string, StorePluginVersion>;
|
|
|
|
export async function getPluginList(): Promise<StorePlugin[]> {
|
|
let version = await window.DeckyPluginLoader.updateVersion();
|
|
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) {
|
|
const splitURL = url.split('/');
|
|
await window.DeckyPluginLoader.callServerMethod('install_plugin', {
|
|
name: splitURL[splitURL.length - 1].replace('.zip', ''),
|
|
artifact: url,
|
|
});
|
|
}
|
|
|
|
export async function requestPluginInstall(plugin: string, selectedVer: StorePluginVersion, installType: InstallType) {
|
|
const artifactUrl =
|
|
selectedVer.artifact ?? `https://cdn.tzatzikiweeb.moe/file/steam-deck-homebrew/versions/${selectedVer.hash}.zip`;
|
|
await window.DeckyPluginLoader.callServerMethod('install_plugin', {
|
|
name: plugin,
|
|
artifact: artifactUrl,
|
|
version: selectedVer.name,
|
|
hash: selectedVer.hash,
|
|
install_type: installType,
|
|
});
|
|
}
|
|
|
|
export async function checkForUpdates(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);
|
|
if (remotePlugin && remotePlugin.versions?.length > 0 && plugin.version != remotePlugin?.versions?.[0]?.name) {
|
|
updateMap.set(plugin.name, remotePlugin.versions[0]);
|
|
}
|
|
}
|
|
return updateMap;
|
|
}
|