mirror of
				https://gitee.com/spark-store-project/spark-store
				synced 2025-11-04 16:22:19 +08:00 
			
		
		
		
	feat:获取包大小
This commit is contained in:
		
							parent
							
								
									42b25b33dc
								
							
						
					
					
						commit
						4a846b825c
					
				@ -3,6 +3,7 @@
 | 
			
		||||
#include <QTextStream>
 | 
			
		||||
#include <QRegularExpression>
 | 
			
		||||
#include <QFile>
 | 
			
		||||
#include <qdebug.h>
 | 
			
		||||
 | 
			
		||||
aptssUpdater::aptssUpdater(QWidget *parent)
 | 
			
		||||
    : QWidget(parent)
 | 
			
		||||
@ -66,9 +67,55 @@ QStringList aptssUpdater::getUpdateablePackages()
 | 
			
		||||
 | 
			
		||||
QStringList aptssUpdater::getPackageSizes()
 | 
			
		||||
{
 | 
			
		||||
    QStringList packageSizes;
 | 
			
		||||
    QProcess process;
 | 
			
		||||
 | 
			
		||||
    // 使用绝对路径 + 自动输入N跳过交互
 | 
			
		||||
    QString command = R"(echo N | /opt/durapps/spark-store/bin/aptss upgrade --assume-no)";
 | 
			
		||||
 | 
			
		||||
    process.start("bash", QStringList() << "-c" << command);
 | 
			
		||||
    if (!process.waitForFinished()) {
 | 
			
		||||
        qWarning() << "获取包大小失败:进程未完成";
 | 
			
		||||
        return packageSizes;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    QString output = process.readAllStandardOutput() + process.readAllStandardError();
 | 
			
		||||
 | 
			
		||||
    // 清理颜色控制字符(ANSI 转义序列)
 | 
			
		||||
    output.remove(QRegularExpression(R"(\x1B\[[0-9;]*[a-zA-Z])"));  // \x1B is ESC
 | 
			
		||||
 | 
			
		||||
    QStringList lines = output.split('\n', Qt::SkipEmptyParts);
 | 
			
		||||
 | 
			
		||||
    // 从 getUpdateablePackages 获取包名
 | 
			
		||||
    QStringList updateablePackages;
 | 
			
		||||
    for (const QString &pkgInfo : getUpdateablePackages()) {
 | 
			
		||||
        QString pkgName = pkgInfo.section(":", 0, 0).trimmed();
 | 
			
		||||
        updateablePackages << pkgName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // 匹配 [apt-fast xx:xx:xx] 行,提取内容
 | 
			
		||||
    QRegularExpression sizeLineRegex(R"(\[apt-fast [^\]]+\](\S+)\s+\S+\s+(\d+(\.\d+)?[KMG]?iB))");
 | 
			
		||||
 | 
			
		||||
    for (const QString &line : lines) {
 | 
			
		||||
        QRegularExpressionMatch match = sizeLineRegex.match(line.trimmed());
 | 
			
		||||
        if (match.hasMatch()) {
 | 
			
		||||
            QString name = match.captured(1);
 | 
			
		||||
            QString size = match.captured(2);
 | 
			
		||||
 | 
			
		||||
            if (updateablePackages.contains(name)) {
 | 
			
		||||
                packageSizes << QString("%1: %2").arg(name, size);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    qDebug() << "包大小列表:" << packageSizes;
 | 
			
		||||
    return packageSizes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
QStringList aptssUpdater::getDesktopAppNames()
 | 
			
		||||
{
 | 
			
		||||
    QStringList appNames;
 | 
			
		||||
 | 
			
		||||
@ -106,6 +106,7 @@ void MainWindow::checkUpdates()
 | 
			
		||||
    // 获取可更新包列表
 | 
			
		||||
    // QStringList updateablePackages = updater.getUpdateablePackages();
 | 
			
		||||
    QStringList appName = updater.getDesktopAppNames();
 | 
			
		||||
    updater.getPackageSizes();
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user