gxde-kernel-manager/kernelinformation.cpp

163 lines
4.3 KiB
C++

#include "kernelinformation.h"
#include <QProcess>
KernelInformation::KernelInformation()
{
}
QStringList KernelInformation::GetAptPackageList(QString name)
{
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("LANG", "en");
QString data = GetCommandResult("apt", QStringList() << "list" << name, env);
QStringList lineData = data.split("\n");
QStringList result = {};
for(QString i: lineData) {
if(i.contains("Listing...")) {
continue;
}
result.append(i.split("/").at(0));
}
return result;
}
QByteArray KernelInformation::GetCommandResult(QString command, QStringList argv, QProcessEnvironment env)
{
QProcess process;
process.setProcessEnvironment(env);
process.start(command, argv);
process.waitForStarted();
process.waitForFinished();
QByteArray result = process.readAllStandardOutput();
process.close();
return result;
}
void KernelInformation::LoadInfo()
{
// 从 apt 获取信息
qDebug() << this->GetAptPackageList("linux-*");
// 从 Github 拉取信息
QUrl url(this->url);
QUrlQuery query;
query.addQueryItem("format", "j1");
url.setQuery(query.toString(QUrl::FullyEncoded));
qDebug() << url;
QNetworkRequest request(url);
QNetworkAccessManager *m_http = new QNetworkAccessManager(this);
QNetworkReply *reply = m_http->get(request);
connect(reply, &QNetworkReply::finished, this, [this, m_http](){
QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
QByteArray data = reply->readAll();
qDebug() << data;
qDebug() << reply->error();
this->listData = QJsonDocument::fromJson(data).array();
emit loadFinished(reply);
});
}
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;
}