#include "kernelinformation.h" #include "aptpkginfo.h" #include <QProcess> KernelInformation::KernelInformation() { } void KernelInformation::LoadInfo() { // 添加 GXDE Kernel Manager QJsonArray array; AptPkgInfo kernelManagerinfo = AptPkgInfo("gxde-kernel-manager", AptPkgInfo::PkgSearchOption::Equal); QStringList list = kernelManagerinfo.GetAptPackageList(); qDebug() << kernelManagerinfo.get_data(); for(QString i: list) { QJsonObject object; kernelManagerinfo.SetPkgName(i); object.insert("Name", i); object.insert("Author", kernelManagerinfo.get_maintainer(i)); object.insert("Des", kernelManagerinfo.get_description(i)); object.insert("Ver", kernelManagerinfo.get_version(i)); object.insert("Arch", QJsonArray::fromStringList(QStringList() << arch())); object.insert("PkgName", QJsonArray::fromStringList(QStringList() << i)); array.append(object); } AptPkgInfo info = AptPkgInfo("linux-", AptPkgInfo::PkgSearchOption::HeadInclude); list = info.GetAptPackageList(); indexMap = {}; for(QString i: list) { QJsonObject object; bool isContinue = false; for(QString j: unShowMap) { if(i.contains(j)) { isContinue = true; break; } } // 跳过此次循环 if(isContinue) { continue; } isContinue = true; for(QString j: showMap) { if(i.contains(j)) { isContinue = false; break; } } // 跳过此次循环 if(isContinue) { continue; } QString strTemp = i; strTemp.replace("-image", ""); strTemp.replace("-headers", ""); int alreadyIndex = -1; if(indexMap.contains(strTemp)) { // 如果已经存在 alreadyIndex = indexMap.value(strTemp); QJsonArray pkgArray = array.at(alreadyIndex).toObject().value("PkgName").toArray(); QJsonArray archArray = array.at(alreadyIndex).toObject().value("Arch").toArray(); pkgArray.append(i); QString pkgArch = info.get_architecture(i); if(!archArray.contains(pkgArch)) { archArray.append(pkgArch); } QJsonObject pkgObject = array.at(alreadyIndex).toObject(); pkgObject["PkgName"] = pkgArray; pkgObject["Arch"] = archArray; array.replace(alreadyIndex, pkgObject); continue; } info.SetPkgName(strTemp); object.insert("Name", strTemp); object.insert("Author", info.get_maintainer(i)); object.insert("Des", info.get_description(i)); object.insert("Ver", info.get_version(i)); object.insert("Arch", QJsonArray::fromStringList(QStringList() << info.get_architecture(i))); object.insert("PkgName", QJsonArray::fromStringList(QStringList() << i)); indexMap.insert(strTemp, array.count()); array.append(object); } this->listData = array; emit loadFinished(NULL); } QJsonArray KernelInformation::get_listData() const { return this->listData; } int KernelInformation::get_count() const { return this->listData.count(); } QJsonObject KernelInformation::get_kernelData(int value) const { return this->listData.at(value).toObject(); } QString KernelInformation::get_name(int value) const { return get_kernelData(value).value("Name").toString(); } QString KernelInformation::get_author(int value) const { return get_kernelData(value).value("Author").toString(); } QString KernelInformation::get_des(int value) const { return get_kernelData(value).value("Des").toString().replace("\\n", "\n"); } QString KernelInformation::get_ver(int value) const { return get_kernelData(value).value("Ver").toString(); } QStringList KernelInformation::get_pkgName(int value) const { QJsonArray list = get_kernelData(value).value("PkgName").toArray(); int count = list.count(); QStringList result; for(int i = 0; i < count; i++) { result << list.at(i).toString(); } return result; } QStringList KernelInformation::get_system(int value) const { QJsonArray list = get_kernelData(value).value("System").toArray(); int count = list.count(); QStringList result; for(int i = 0; i < count; i++) { result << list.at(i).toString(); } if(!result.count()) { result << "all"; } return result; } QStringList KernelInformation::get_arch(int value) const { QJsonArray list = get_kernelData(value).value("Arch").toArray(); int count = list.count(); QStringList result; for(int i = 0; i < count; i++) { result << list.at(i).toString(); } if(!result.count()) { result << "all"; } return result; } QString KernelInformation::localKernelName() const { QProcess process; process.start("uname", QStringList() << "-r"); process.waitForStarted(); process.waitForFinished(); QString result = process.readAllStandardOutput().replace("\n", "").replace(" ", ""); process.close(); return result; } bool KernelInformation::get_installedAlready(int value) const { QString pkgName = this->get_pkgName(value).at(0); return QFile::exists("/var/lib/dpkg/info/" + pkgName + ".list"); } QString KernelInformation::arch() const { QProcess process; process.start("dpkg", QStringList() << "--print-architecture"); process.waitForStarted(); process.waitForFinished(); QString data = process.readAllStandardOutput(); data = data.replace("\n", "").replace(" ", ""); process.close(); return data; }