From 5b09dfb3d985a0fd6dcd222e33312f957c330cd5 Mon Sep 17 00:00:00 2001 From: Elysia Date: Sat, 31 Jan 2026 10:26:52 +0800 Subject: [PATCH] feat(preload): expose architecture detection to renderer process add multiarch support --- electron/preload/index.ts | 11 +++++++++++ package.json | 2 +- src/App.vue | 8 ++++---- src/components/AppCard.vue | 4 ++-- src/components/AppDetailModal.vue | 4 ++-- src/components/AppSidebar.vue | 2 +- src/global/storeConfig.ts | 1 - src/modeuls/processInstall.ts | 6 +++--- 8 files changed, 24 insertions(+), 14 deletions(-) diff --git a/electron/preload/index.ts b/electron/preload/index.ts index 53b585fa..1bc7e0cf 100644 --- a/electron/preload/index.ts +++ b/electron/preload/index.ts @@ -23,6 +23,17 @@ contextBridge.exposeInMainWorld('ipcRenderer', { // ... }) +contextBridge.exposeInMainWorld('apm_store', { + arch: (() => { + const arch = process.arch; + if (arch === 'x64') { + return 'amd64' + '-apm'; + } else { + return arch + '-apm'; + } + })() +}); + // --------- Preload scripts loading --------- function domReady(condition: DocumentReadyState[] = ['complete', 'interactive']) { return new Promise((resolve) => { diff --git a/package.json b/package.json index 4e354b63..c497b8df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apm-app-store", - "version": "1.0.3-beta.0", + "version": "1.0.3-beta.1", "main": "dist-electron/main/index.js", "description": "Client for APM App Store", "author": "elysia-best ", diff --git a/src/App.vue b/src/App.vue index 4f8bf1a1..0f7171f0 100644 --- a/src/App.vue +++ b/src/App.vue @@ -56,7 +56,7 @@ import DownloadDetail from './components/DownloadDetail.vue'; import InstalledAppsModal from './components/InstalledAppsModal.vue'; import UpdateAppsModal from './components/UpdateAppsModal.vue'; import UninstallConfirmModal from './components/UninstallConfirmModal.vue'; -import { APM_STORE_ARCHITECTURE, APM_STORE_BASE_URL, currentApp, currentAppIsInstalled } from './global/storeConfig'; +import { APM_STORE_BASE_URL, currentApp, currentAppIsInstalled } from './global/storeConfig'; import { downloads } from './global/downloadStatus'; import { handleInstall, handleRetry, handleUpgrade } from './modeuls/processInstall'; @@ -173,7 +173,7 @@ const checkAppInstalled = (app) => { const loadScreenshots = (app) => { screenshots.value = []; for (let i = 1; i <= 5; i++) { - const screenshotUrl = `${APM_STORE_BASE_URL}/${APM_STORE_ARCHITECTURE}/${app._category}/${app.Pkgname}/screen_${i}.png`; + const screenshotUrl = `${APM_STORE_BASE_URL}/${window.apm_store.arch}/${app._category}/${app.Pkgname}/screen_${i}.png`; const img = new Image(); img.src = screenshotUrl; img.onload = () => { @@ -480,7 +480,7 @@ const openDownloadedApp = (download) => { const loadCategories = async () => { try { - const response = await axiosInstance.get(`/${APM_STORE_ARCHITECTURE}/categories.json`); + const response = await axiosInstance.get(`/${window.apm_store.arch}/categories.json`); categories.value = response.data; } catch (error) { logger.error('读取 categories.json 失败', error); @@ -493,7 +493,7 @@ const loadApps = async () => { logger.info('开始加载应用数据...'); const promises = Object.keys(categories.value).map(async category => { try { - const response = await axiosInstance.get(`/${APM_STORE_ARCHITECTURE}/${category}/applist.json`); + const response = await axiosInstance.get(`/${window.apm_store.arch}/${category}/applist.json`); return response.status === 200 ? response.data : []; } catch { return []; diff --git a/src/components/AppCard.vue b/src/components/AppCard.vue index fd0ab266..e7186956 100644 --- a/src/components/AppCard.vue +++ b/src/components/AppCard.vue @@ -16,7 +16,7 @@