diff --git a/.vscode/launch.json b/.vscode/launch.json index 99537bc7..c51fa034 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -20,7 +20,6 @@ } ], "configurations": [ - { "name": "Debug Main Process", "type": "node", @@ -31,6 +30,7 @@ // }, "runtimeArgs": [ "--remote-debugging-port=9229", + "--no-spark", "." ], "envFile": "${workspaceFolder}/.vscode/.debug.env", diff --git a/electron/main/index.ts b/electron/main/index.ts index f0d7b969..88849693 100644 --- a/electron/main/index.ts +++ b/electron/main/index.ts @@ -74,6 +74,22 @@ const getUserAgent = (): string => { logger.info("User Agent: " + getUserAgent()); +/** 根据启动参数 --no-apm / --no-spark 决定只展示的来源 */ +function getStoreFilterFromArgv(): "spark" | "apm" | "both" { + const argv = process.argv; + const noApm = argv.includes("--no-apm"); + const noSpark = argv.includes("--no-spark"); + if (noApm && noSpark) return "both"; + if (noApm) return "spark"; + if (noSpark) return "apm"; + return "both"; +} + +ipcMain.handle( + "get-store-filter", + (): "spark" | "apm" | "both" => getStoreFilterFromArgv(), +); + async function createWindow() { win = new BrowserWindow({ title: "星火应用商店", diff --git a/src/App.vue b/src/App.vue index c75efa20..6646f44b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -241,6 +241,9 @@ const updateError = ref(""); const showUninstallModal = ref(false); const uninstallTargetApp: Ref = ref(null); +/** 启动参数 --no-apm => 仅 Spark;--no-spark => 仅 APM;由主进程 IPC 提供 */ +const storeFilter = ref<"spark" | "apm" | "both">("both"); + // 计算属性 const filteredApps = computed(() => { let result = [...apps.value]; @@ -509,7 +512,8 @@ const loadHome = async () => { homeLists.value = []; try { const arch = window.apm_store.arch || "amd64"; - const modes: Array<"spark" | "apm"> = ["spark", "apm"]; // 只保留混合模式 + const modes: Array<"spark" | "apm"> = + storeFilter.value === "both" ? ["spark", "apm"] : [storeFilter.value]; for (const mode of modes) { const finalArch = mode === "spark" ? `${arch}-store` : `${arch}-apm`; @@ -915,7 +919,8 @@ const openDownloadedApp = (pkgname: string, origin?: "spark" | "apm") => { const loadCategories = async () => { try { const arch = window.apm_store.arch || "amd64"; - const modes: Array<"spark" | "apm"> = ["spark", "apm"]; + const modes: Array<"spark" | "apm"> = + storeFilter.value === "both" ? ["spark", "apm"] : [storeFilter.value]; const categoryData: Record = {}; @@ -1039,6 +1044,8 @@ const handleSearchFocus = () => { onMounted(async () => { initTheme(); + // 从主进程获取启动参数(--no-apm / --no-spark),再加载数据 + storeFilter.value = await window.ipcRenderer.invoke("get-store-filter"); await loadCategories(); // 分类目录加载后,并行加载主页数据和所有应用列表 diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 807eb571..043c1114 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -12,7 +12,6 @@ interface Window { ipcRenderer: import("electron").IpcRenderer; apm_store: { arch: string; - [k: string]: any; }; }