From 586c95ec1125fbbbaa5ab2cfa96c99ce2675daa6 Mon Sep 17 00:00:00 2001 From: Pandipipas <62224708+Pandipipas@users.noreply.github.com> Date: Tue, 3 Mar 2026 21:06:51 +0100 Subject: [PATCH] feat: cargar juegos de assets desde servidor HTTP --- .../scoreko-dev/stores/game-assets.ts | 33 +++-- .../scoreko-dev/views/GameAssets.vue | 59 +++----- src/extension/game-assets.ts | 133 ++++++++++++------ 3 files changed, 134 insertions(+), 91 deletions(-) diff --git a/src/dashboard/scoreko-dev/stores/game-assets.ts b/src/dashboard/scoreko-dev/stores/game-assets.ts index 1450ad8..e801877 100644 --- a/src/dashboard/scoreko-dev/stores/game-assets.ts +++ b/src/dashboard/scoreko-dev/stores/game-assets.ts @@ -9,6 +9,13 @@ type ProgressPayload = { status: DownloadStatus; }; +type RemoteGame = { + title: string; + slug: string; + repoFolder: string; + logoFile: string; +}; + const sendNodecgMessage = (messageName: string, payload?: unknown) => new Promise((resolve, reject) => { nodecg.sendMessage(messageName, payload, (error: unknown, response: unknown) => { if (error) { @@ -24,6 +31,7 @@ let progressListenerAttached = false; export const useGameAssetsStore = defineStore('game-assets', () => { const installedGames = ref([]); + const availableGames = ref([]); const characterNamesByGame = ref>({}); const loadingByTitle = ref>({}); const removingByTitle = ref>({}); @@ -62,6 +70,8 @@ export const useGameAssetsStore = defineStore('game-assets', () => { }; const refreshInstalledGames = async () => { + const availableResponse = await sendNodecgMessage('scoreko-assets:listRemoteGames'); + availableGames.value = Array.isArray(availableResponse) ? availableResponse : []; const response = await sendNodecgMessage('scoreko-assets:listInstalled'); installedGames.value = Array.isArray(response) ? response : []; const configResponse = await sendNodecgMessage<{ assetsBaseUrl?: string }>('scoreko-assets:getAssetsBaseUrl'); @@ -72,59 +82,60 @@ export const useGameAssetsStore = defineStore('game-assets', () => { return installedGames.value; }; - const downloadGame = async (title: string) => { + const downloadGame = async (slug: string) => { loadingByTitle.value = { ...loadingByTitle.value, - [title]: true, + [slug]: true, }; progressByTitle.value = { ...progressByTitle.value, - [title]: 0, + [slug]: 0, }; try { - const response = await sendNodecgMessage<{ installedGames: string[] }>('scoreko-assets:downloadGame', { title }); + const response = await sendNodecgMessage<{ installedGames: string[] }>('scoreko-assets:downloadGame', { slug }); installedGames.value = response.installedGames; await refreshCharacterNamesByGame(); loadingByTitle.value = { ...loadingByTitle.value, - [title]: false, + [slug]: false, }; progressByTitle.value = { ...progressByTitle.value, - [title]: 100, + [slug]: 100, }; return response; } catch (error) { loadingByTitle.value = { ...loadingByTitle.value, - [title]: false, + [slug]: false, }; throw error; } }; - const removeGame = async (title: string) => { + const removeGame = async (slug: string) => { removingByTitle.value = { ...removingByTitle.value, - [title]: true, + [slug]: true, }; try { - const response = await sendNodecgMessage<{ installedGames: string[] }>('scoreko-assets:removeGame', { title }); + const response = await sendNodecgMessage<{ installedGames: string[] }>('scoreko-assets:removeGame', { slug }); installedGames.value = response.installedGames; await refreshCharacterNamesByGame(); return response; } finally { removingByTitle.value = { ...removingByTitle.value, - [title]: false, + [slug]: false, }; } }; return { installedGames, + availableGames, characterNamesByGame, loadingByTitle, removingByTitle, diff --git a/src/dashboard/scoreko-dev/views/GameAssets.vue b/src/dashboard/scoreko-dev/views/GameAssets.vue index ba5fbd1..028e94f 100644 --- a/src/dashboard/scoreko-dev/views/GameAssets.vue +++ b/src/dashboard/scoreko-dev/views/GameAssets.vue @@ -1,7 +1,6 @@