fix:已安装的软件不显示打开软件的按钮问题

This commit is contained in:
2026-03-11 14:20:23 +08:00
parent e3134afbfb
commit 207334608c
2 changed files with 44 additions and 17 deletions

View File

@@ -413,16 +413,43 @@ async function processNextInQueue() {
} }
} }
ipcMain.handle("check-installed", async (_event, pkgname: string) => { // eslint-disable-next-line @typescript-eslint/no-explicit-any
ipcMain.handle("check-installed", async (_event, payload: any) => {
const pkgname = typeof payload === "string" ? payload : payload.pkgname;
const origin = typeof payload === "string" ? "spark" : payload.origin;
if (!pkgname) { if (!pkgname) {
logger.warn("check-installed missing pkgname"); logger.warn("check-installed missing pkgname");
return false; return false;
} }
logger.info(`检查应用是否已安装: ${pkgname}`); logger.info(`检查应用是否已安装: ${pkgname} (来源: ${origin})`);
let isInstalled = false;
if (origin === "apm") {
const { code, stdout } = await runCommandCapture("apm", ["list", "--installed"]);
if (code === 0) {
// eslint-disable-next-line no-control-regex
const cleanStdout = stdout.replace(/\x1b\[[0-9;]*m/g, "");
const lines = cleanStdout.split("\n");
for (const line of lines) {
const trimmed = line.trim();
if (!trimmed || trimmed.startsWith("Listing") || trimmed.startsWith("[INFO]") || trimmed.startsWith("警告")) continue;
if (trimmed.includes("/")) {
const installedPkg = trimmed.split("/")[0].trim();
if (installedPkg === pkgname) {
isInstalled = true;
logger.info(`应用已安装 (APM检测): ${pkgname}`);
break;
}
}
}
}
return isInstalled;
}
const checkScript = "/opt/spark-store/extras/check-is-installed"; const checkScript = "/opt/spark-store/extras/check-is-installed";
let isInstalled = false;
// 首先尝试使用内置脚本 // 首先尝试使用内置脚本
if (fs.existsSync(checkScript)) { if (fs.existsSync(checkScript)) {
@@ -449,20 +476,20 @@ ipcMain.handle("check-installed", async (_event, pkgname: string) => {
if (isInstalled) return true; if (isInstalled) return true;
} }
// // 如果脚本不存在或检测不到,使用 dpkg-query 作为后备 // 如果脚本不存在或检测不到,使用 dpkg-query 作为后备
// logger.info(`尝试使用 dpkg-query 检测: ${pkgname}`); logger.info(`尝试使用 dpkg-query 检测: ${pkgname}`);
// const { code } = await runCommandCapture("dpkg-query", [ const { code, stdout } = await runCommandCapture("dpkg-query", [
// "-W", "-W",
// "-f='${Status}'", "-f=${Status}",
// pkgname, pkgname,
// ]); ]);
// if (code === 0) { if (code === 0 && stdout.includes("install ok installed")) {
// isInstalled = true; isInstalled = true;
// logger.info(`应用已安装 (dpkg-query 检测): ${pkgname}`); logger.info(`应用已安装 (dpkg-query 检测): ${pkgname}`);
// } else { } else {
// logger.info(`应用未安装: ${pkgname}`); logger.info(`应用未安装 (dpkg-query 检测): ${pkgname}`);
// } }
return isInstalled; return isInstalled;
}); });

View File

@@ -466,7 +466,7 @@ const openDetail = (app: App | Record<string, unknown>) => {
const checkAppInstalled = (app: App) => { const checkAppInstalled = (app: App) => {
window.ipcRenderer window.ipcRenderer
.invoke("check-installed", app.pkgname) .invoke("check-installed", { pkgname: app.pkgname, origin: app.origin })
.then((isInstalled: boolean) => { .then((isInstalled: boolean) => {
currentAppIsInstalled.value = isInstalled; currentAppIsInstalled.value = isInstalled;
}); });