diff --git a/aptpkginfo.cpp b/aptpkginfo.cpp index cd82f75..097d87e 100644 --- a/aptpkginfo.cpp +++ b/aptpkginfo.cpp @@ -1,11 +1,86 @@ #include "aptpkginfo.h" +#include <QFile> +#include <QDir> +#include <QDebug> -AptPkgInfo::AptPkgInfo() +AptPkgInfo::AptPkgInfo(QString pkgName) { - + SetPkgName(pkgName); + ReadAptData(); } -QStringList AptPkgInfo::GetAptPackageList(QString name) +void AptPkgInfo::ReadAptData() +{ + this->aptData = ""; + QDir dir("/var/lib/apt/lists/"); + QStringList list = dir.entryList(); + for(QString i: list) { + // 除去 . 和 .. + if(i == "." || i == "..") { + continue; + } + // TODO: bug + if(i.mid(-10, -1) != "_Packages") { + continue; + } + QFile file(dir.path() + "/" + i); + file.open(QFile::ReadOnly); + aptData += file.readAll() + "\n"; + file.close(); + } + qDebug() << aptData; +} + +void AptPkgInfo::SetPkgName(QString pkgName) +{ + this->pkgName = pkgName; + pkgInfo = GetPkgInfo(pkgName); +} + +QString AptPkgInfo::GetPkgInfo(QString pkgName) const +{ + if(pkgName == NULL) { + pkgName = this->pkgName; + } + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("LANG", "en"); + return this->GetCommandResult("apt", QStringList() << "list" << pkgName, env); +} + +QString AptPkgInfo::get_package() const +{ + QStringList list = pkgInfo.split("\n"); + for(QString i: list) { + if(i.contains("Package: ")) { + return i.replace("Package: ", "").replace(" ", ""); + } + } + return NULL; +} + +QString AptPkgInfo::get_version() const +{ + QStringList list = pkgInfo.split("\n"); + for(QString i: list) { + if(i.contains("Maintainer: ")) { + return i.replace("Maintainer: ", "").replace(" ", ""); + } + } + return NULL; +} + +QString AptPkgInfo::get_maintainer() const +{ + QStringList list = pkgInfo.split("\n"); + for(QString i: list) { + if(i.contains("Version: ")) { + return i.replace("Version: ", "").replace(" ", ""); + } + } + return NULL; +} + +QStringList AptPkgInfo::GetAptPackageList(QString name) const { QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert("LANG", "en"); @@ -21,7 +96,7 @@ QStringList AptPkgInfo::GetAptPackageList(QString name) return result; } -QByteArray AptPkgInfo::GetCommandResult(QString command, QStringList argv, QProcessEnvironment env) +QByteArray AptPkgInfo::GetCommandResult(QString command, QStringList argv, QProcessEnvironment env) const { QProcess process; process.setProcessEnvironment(env); diff --git a/aptpkginfo.h b/aptpkginfo.h index 79e9ac7..7f71ca4 100644 --- a/aptpkginfo.h +++ b/aptpkginfo.h @@ -10,8 +10,22 @@ class AptPkgInfo: QObject public: AptPkgInfo(QString pkgName); - QStringList GetAptPackageList(QString name); - QByteArray GetCommandResult(QString command, QStringList argv, QProcessEnvironment env = QProcessEnvironment::systemEnvironment()); + void SetPkgName(QString pkgName); + QStringList GetAptPackageList(QString name) const; + QByteArray GetCommandResult(QString command, QStringList argv, QProcessEnvironment env = QProcessEnvironment::systemEnvironment()) const; + + QString GetPkgInfo(QString pkgName=NULL) const; + + QString get_package() const; + QString get_version() const; + QString get_maintainer() const; + +private: + QString pkgName; + QString pkgInfo; + QString aptData; + + void ReadAptData(); }; #endif // APTPKGINFO_H diff --git a/kernelinformation.cpp b/kernelinformation.cpp index 3065ce4..696837f 100644 --- a/kernelinformation.cpp +++ b/kernelinformation.cpp @@ -1,4 +1,5 @@ #include "kernelinformation.h" +#include "aptpkginfo.h" #include <QProcess> @@ -14,6 +15,19 @@ void KernelInformation::LoadInfo() /*for(QString i: data) { }*/ + AptPkgInfo info = AptPkgInfo(""); + QJsonArray array; + QStringList list = info.GetAptPackageList("linux-base"); + for(QString i: list) { + QJsonObject object; + info.SetPkgName(i); + object.insert("Name", i); + object.insert("Author", info.get_maintainer()); + array.append(object); + } + this->listData = array; + emit loadFinished(NULL); + return; // 从 Github 拉取信息 QUrl url(this->url); QUrlQuery query; diff --git a/mainwindow.cpp b/mainwindow.cpp index 49d782d..d29e845 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -50,8 +50,8 @@ void MainWindow::RefreshKernelListView(KernelInformation *info, bool showLocalAr model->setItem(line, 0, new QStandardItem(QString::number(i))); model->setItem(line, 1, new QStandardItem(info->get_name(i))); model->setItem(line, 2, new QStandardItem(info->get_author(i))); - model->setItem(line, 3, new QStandardItem(kernelArch)); - model->setItem(line, 4, new QStandardItem((QStringList() << "" << "Y").at(info->get_installedAlready(i)))); + //model->setItem(line, 3, new QStandardItem(kernelArch)); + //model->setItem(line, 4, new QStandardItem((QStringList() << "" << "Y").at(info->get_installedAlready(i)))); line++; } ui->m_kernelShow->setModel(model);