update:从desktop文件中提取应用名

This commit is contained in:
2025-05-28 22:22:23 +08:00
parent 17b5c9afce
commit ddf1f7396b
3 changed files with 40 additions and 1 deletions

View File

@@ -2,11 +2,14 @@
#include <QProcess> #include <QProcess>
#include <QTextStream> #include <QTextStream>
#include <QRegularExpression> #include <QRegularExpression>
#include <QFile>
aptssUpdater::aptssUpdater(QWidget *parent) aptssUpdater::aptssUpdater(QWidget *parent)
: QWidget(parent) : QWidget(parent)
{ {
} }
QStringList aptssUpdater::getUpdateablePackages() QStringList aptssUpdater::getUpdateablePackages()
{ {
QStringList packageDetails; QStringList packageDetails;
@@ -35,6 +38,7 @@ QStringList aptssUpdater::getUpdateablePackages()
return packageDetails; return packageDetails;
} }
QStringList aptssUpdater::getPackageSizes() QStringList aptssUpdater::getPackageSizes()
{ {
QStringList packageSizes; QStringList packageSizes;
@@ -65,3 +69,33 @@ QStringList aptssUpdater::getPackageSizes()
return packageSizes; return packageSizes;
} }
QStringList aptssUpdater::getDesktopAppNames()
{
QStringList appNames;
QStringList updateablePackages = getUpdateablePackages();
for (const QString &packageDetail : updateablePackages) {
// 提取包名(忽略版本信息)
QString packageName = packageDetail.split(' ').first();
QString desktopFilePath = QString("/usr/share/applications/%1.desktop").arg(packageName);
QFile desktopFile(desktopFilePath);
if (desktopFile.exists() && desktopFile.open(QIODevice::ReadOnly)) {
QTextStream stream(&desktopFile);
while (!stream.atEnd()) {
QString line = stream.readLine();
if (line.startsWith("Name=")) {
QString appName = line.mid(5); // 提取 Name 属性值
appNames << appName;
break;
}
}
desktopFile.close();
} else {
appNames << QString("未找到 .desktop 文件: %1").arg(packageName);
}
}
return appNames;
}

View File

@@ -13,6 +13,8 @@ public:
QStringList getUpdateablePackages(); // 查询可更新包列表及更新内容 QStringList getUpdateablePackages(); // 查询可更新包列表及更新内容
qint64 getTotalDownloadSize(); // 获取更新总大小预估 qint64 getTotalDownloadSize(); // 获取更新总大小预估
QStringList getPackageSizes(); // 获取每个包的大小 QStringList getPackageSizes(); // 获取每个包的大小
QStringList getDesktopAppNames(); // 获取桌面应用名称列表
signals: signals:
}; };

View File

@@ -15,13 +15,16 @@ void MainWindow::checkUpdates()
// 获取可更新包列表 // 获取可更新包列表
QStringList updateablePackages = updater.getUpdateablePackages(); QStringList updateablePackages = updater.getUpdateablePackages();
QStringList packageSizes = updater.getPackageSizes(); QStringList packageSizes = updater.getPackageSizes();
QStringList appNames = updater.getDesktopAppNames();
qDebug() << "可更新包列表:"; qDebug() << "可更新包列表:";
for (int i = 0; i < updateablePackages.size(); ++i) { for (int i = 0; i < updateablePackages.size(); ++i) {
QString packageInfo = updateablePackages.at(i); QString packageInfo = updateablePackages.at(i);
QString packageSize = (i < packageSizes.size()) ? packageSizes.at(i) : "未知大小"; QString packageSize = (i < packageSizes.size()) ? packageSizes.at(i) : "未知大小";
qDebug() << QString("%1 (%2)").arg(packageInfo, packageSize); qDebug() << QString("%1 (%2)").arg(packageInfo, packageSize);
} }
for (const QString &appName : appNames) {
qDebug() << appName;
}
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()