From d454a586715d3fd86dc673ec494d9a5d12414216 Mon Sep 17 00:00:00 2001 From: momen Date: Thu, 5 Jun 2025 10:17:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=AD=A3=E4=BA=86=E6=97=A0?= =?UTF-8?q?=E8=BD=AF=E4=BB=B6=E5=90=8D=E6=97=B6=EF=BC=8C=E8=BD=AF=E4=BB=B6?= =?UTF-8?q?=E5=90=8D=E5=86=85=E5=AE=B9=E4=B8=BA=E7=A9=BA=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/aptssupdater.cpp | 48 ++++++++++++++++++++++++++------------------ src/aptssupdater.h | 6 +----- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/aptssupdater.cpp b/src/aptssupdater.cpp index 3459724..c671e1a 100644 --- a/src/aptssupdater.cpp +++ b/src/aptssupdater.cpp @@ -76,32 +76,44 @@ QStringList aptssUpdater::getDesktopAppNames() foreach (const QString &package, packages) { QString packageName = package.split(":")[0]; + QString finalName = packageName; // 默认使用包名 // 获取包文件列表 dpkgProcess.start("dpkg", QStringList() << "-L" << packageName); dpkgProcess.waitForFinished(); QStringList files = QString(dpkgProcess.readAllStandardOutput()).split('\n', Qt::SkipEmptyParts); - // 检查常规应用目录 - checkDesktopFiles(files.filter("/usr/share/applications/"), - appNames, - lang, - packageName); // 新增包名参数 + // 先检查常规应用目录 + QStringList regularDesktopFiles = files.filter("/usr/share/applications/"); + QString regularAppName; + if (!regularDesktopFiles.isEmpty()) { + checkDesktopFiles(regularDesktopFiles, regularAppName, lang, packageName); + } - // 检查特殊目录(/opt/apps) - checkDesktopFiles(files.filter(QRegularExpression(QString("/opt/apps/%1/entries/applications").arg(packageName))), - appNames, - lang, - packageName); // 新增包名参数 + // 如果常规目录没有找到,再检查特殊目录 + if (regularAppName.isEmpty()) { + QStringList specialDesktopFiles = files.filter(QRegularExpression(QString("/opt/apps/%1/entries/applications").arg(packageName))); + QString specialAppName; + if (!specialDesktopFiles.isEmpty()) { + checkDesktopFiles(specialDesktopFiles, specialAppName, lang, packageName); + if (!specialAppName.isEmpty()) { + finalName = specialAppName; + } + } + } else { + finalName = regularAppName; + } + // 输出格式为[软件名|包名] + appNames << QString("[%1|%2]").arg(finalName, packageName); } qDebug()<< "应用名称列表:" << appNames; return appNames; } -bool aptssUpdater::checkDesktopFiles(const QStringList &desktopFiles, QStringList &appNames, const QString &lang, const QString &packageName) + +bool aptssUpdater::checkDesktopFiles(const QStringList &desktopFiles, QString &appName, const QString &lang, const QString &packageName) { - bool hasFoundName = false; QString lastValidName; QRegularExpression noDisplayRe("^NoDisplay=(true|True)"); QRegularExpression nameRe("^Name\\[?" + lang + "?\\]?=(.*)"); @@ -145,21 +157,17 @@ bool aptssUpdater::checkDesktopFiles(const QStringList &desktopFiles, QStringLis } if (!skip && !currentName.isEmpty()) { - lastValidName = currentName; // 只更新最后一个有效名称 + lastValidName = currentName; } } // 处理最终的有效名称 if (!lastValidName.isEmpty()) { - if (!appNames.contains(lastValidName)) { - appNames << lastValidName; - } + appName = lastValidName; // 直接赋值而不是使用<< return true; } // 回退到包名 - if (!appNames.contains(packageName)) { - appNames << packageName; - } + appName = packageName; return false; -} \ No newline at end of file +} diff --git a/src/aptssupdater.h b/src/aptssupdater.h index 003160b..99be3b1 100644 --- a/src/aptssupdater.h +++ b/src/aptssupdater.h @@ -18,11 +18,7 @@ public: QString m_tempFilePath; signals: private: - bool checkDesktopFiles(const QStringList &desktopFiles, - QStringList &appNames, - const QString &lang, - const QString &packageName); // 新增包名参数 - +bool checkDesktopFiles(const QStringList &desktopFiles, QString &appName, const QString &lang, const QString &packageName); }; #endif // APTSSUPDATER_H \ No newline at end of file