From 207d42153f38725dbd0a88fdc98ce6208ff934e6 Mon Sep 17 00:00:00 2001 From: momen Date: Sun, 5 Oct 2025 02:40:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:root=E8=B4=A6=E6=88=B7=E4=B8=8B=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E6=AD=A3=E7=A1=AE=E8=8E=B7=E5=BE=97=E5=8C=85=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/aptssupdater.cpp | 51 +++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/src/aptssupdater.cpp b/src/aptssupdater.cpp index 2ba3f33..c6ddd7d 100644 --- a/src/aptssupdater.cpp +++ b/src/aptssupdater.cpp @@ -79,8 +79,14 @@ QStringList aptssUpdater::getPackageSizes() foreach (const QString &packageName, updateablePackages) { QProcess process; // 在循环内部创建新的QProcess实例 - // 构建新命令(包含包名参数) - QString command = QString("apt download %1 --print-uris -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf " + // 设置环境变量确保在root权限下也能正确执行 + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("HOME", "/tmp"); // 设置HOME环境变量 + env.insert("LANGUAGE", "en_US"); // 设置语言环境 + process.setProcessEnvironment(env); + + // 使用apt-cache show获取包信息,包括大小 + QString command = QString("apt-cache show %1 -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf " "-o Dir::Etc::sourcelist=\"/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list\" " "-o Dir::Etc::sourceparts=\"/dev/null\"").arg(packageName); @@ -92,19 +98,38 @@ QStringList aptssUpdater::getPackageSizes() } QString output = process.readAllStandardOutput(); - // 使用正则匹配所有信息 - // 调整正则表达式匹配分组 - QRegularExpression regex(R"('([^']+)'\s+(\S+)\s+(\d+)\s+SHA512:([^\s]+))"); // 分组1:URL 分组2:文件名 分组3:大小 分组4:SHA512 - QRegularExpressionMatch match = regex.match(output); - - if (match.hasMatch()) { - QString url = match.captured(1); - QString fileName = match.captured(2); - QString size = match.captured(3); - QString sha512 = match.captured(4); - + QString errorOutput = process.readAllStandardError(); + + // 如果有错误输出,打印出来以便调试 + if (!errorOutput.isEmpty()) { + qWarning() << "apt-cache show命令错误输出:" << errorOutput; + } + + // 解析apt-cache show的输出获取包大小 + QStringList lines = output.split('\n'); + QString size; + QString filename; + QString sha512; + + for (const QString &line : lines) { + if (line.startsWith("Size:")) { + size = line.mid(6).trimmed(); // 跳过"Size:"前缀 + } else if (line.startsWith("Filename:")) { + filename = line.mid(10).trimmed(); // 跳过"Filename:"前缀 + } else if (line.startsWith("SHA512:")) { + sha512 = line.mid(8).trimmed(); // 跳过"SHA512:"前缀 + } + } + + // 构造下载URL + QString url = "http://sucdn.jerrywang.top/sparkstore/" + filename; + + // 如果获取到大小信息,则添加到结果中 + if (!size.isEmpty()) { // 调整字段顺序:包名 | 大小 | URL | SHA512 packageDetails << QString("%1: %2|%3|%4").arg(packageName, size, url, sha512); + } else { + qWarning() << "无法获取包大小信息:" << packageName; } }