From 1e6e776afe1c8f98fff7cfbc679be82b294d86df Mon Sep 17 00:00:00 2001 From: shenmo Date: Sun, 29 Mar 2026 12:48:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(install-manager):=20=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E5=B7=B2=E5=AE=89=E8=A3=85=E5=BA=94=E7=94=A8=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E7=9A=84=E8=A7=A3=E6=9E=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增强对APM包名的解析,支持带或不带section的格式 添加更多调试日志以帮助排查问题 --- electron/main/backend/install-manager.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/electron/main/backend/install-manager.ts b/electron/main/backend/install-manager.ts index 7c5c0e3d..150f72f7 100644 --- a/electron/main/backend/install-manager.ts +++ b/electron/main/backend/install-manager.ts @@ -806,11 +806,15 @@ ipcMain.handle("list-installed", async () => { ) continue; - // 解析格式: pkgname/repo,section version arch [flags] + // 解析格式: pkgname/repo,section version arch [flags] 或 pkgname/repo version arch [flags] + // 注意: repo后面可能有逗号和section,也可能没有 const match = trimmed.match( - /^(\S+)\/\S+,\S+\s+(\S+)\s+(\S+)\s+\[(.+)\]$/, + /^(\S+)\/\S+(?:,\S+)?\s+(\S+)\s+(\S+)\s+\[(.+)\]$/, ); - if (!match) continue; + if (!match) { + logger.debug(`Failed to parse line: ${trimmed}`); + continue; + } const [, pkgname, version, arch, flags] = match; @@ -824,20 +828,25 @@ ipcMain.handle("list-installed", async () => { if (hasEntries) { try { const desktopFiles = fs.readdirSync(entriesPath); + logger.debug(`Found desktop files for ${pkgname}: ${desktopFiles.join(", ")}`); for (const file of desktopFiles) { if (file.endsWith(".desktop")) { const desktopPath = path.join(entriesPath, file); + logger.debug(`Reading desktop file: ${desktopPath}`); const content = fs.readFileSync(desktopPath, "utf-8"); const nameMatch = content.match(/^Name=(.+)$/m); const iconMatch = content.match(/^Icon=(.+)$/m); if (nameMatch) appName = nameMatch[1].trim(); if (iconMatch) icon = iconMatch[1].trim(); + logger.debug(`Parsed desktop file for ${pkgname}: name=${appName}, icon=${icon}`); break; } } } catch (e) { logger.warn(`Failed to read desktop file for ${pkgname}: ${e}`); } + } else { + logger.debug(`No entries path for ${pkgname}: ${entriesPath}`); } installedApps.push({ @@ -866,6 +875,7 @@ ipcMain.handle("list-installed", async () => { return a.pkgname.localeCompare(b.pkgname); }); + logger.info(`Found ${installedApps.length} installed APM apps`); return { success: true, apps: installedApps }; } catch (error) { logger.error(