完善一点从apt源文件获取数据的库(暂不可用)
This commit is contained in:
parent
3c1b2ae424
commit
1bd4bad1cd
@ -3,8 +3,9 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
AptPkgInfo::AptPkgInfo(QString pkgName)
|
AptPkgInfo::AptPkgInfo(QString pkgName, PkgSearchOption option)
|
||||||
{
|
{
|
||||||
|
this->pkgSearchOption = option;
|
||||||
SetPkgName(pkgName);
|
SetPkgName(pkgName);
|
||||||
ReadAptData();
|
ReadAptData();
|
||||||
}
|
}
|
||||||
@ -19,13 +20,58 @@ void AptPkgInfo::ReadAptData()
|
|||||||
if(i == "." || i == "..") {
|
if(i == "." || i == "..") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// TODO: bug
|
if(i.mid(i.indexOf("_Packages")) != "_Packages") {
|
||||||
if(i.mid(-10, -1) != "_Packages") {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
QFile file(dir.path() + "/" + i);
|
QFile file(dir.path() + "/" + i);
|
||||||
file.open(QFile::ReadOnly);
|
file.open(QFile::ReadOnly);
|
||||||
aptData += file.readAll() + "\n";
|
// 分析
|
||||||
|
QString pkgData;
|
||||||
|
pkgDataStatus status = pkgDataStatus::None;
|
||||||
|
while(!file.atEnd()) {
|
||||||
|
QByteArray line = file.readLine();
|
||||||
|
if(line.replace(" ", "").replace("\n", "") == "") {
|
||||||
|
// 空行
|
||||||
|
if(status == pkgDataStatus::IsContain) {
|
||||||
|
aptData += pkgData + "\n";
|
||||||
|
}
|
||||||
|
status = pkgDataStatus::EmptyLine;
|
||||||
|
pkgData = ""; // 清空
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 如果已经被检测为非要寻找的包名,则
|
||||||
|
if(status == pkgDataStatus::UnContain) {
|
||||||
|
continue; // 忽略该行
|
||||||
|
}
|
||||||
|
// 分析行
|
||||||
|
if(line.contains("Package: ")) {
|
||||||
|
// 如果为包名行,则进行分析
|
||||||
|
// 是否含有要求关键字
|
||||||
|
QString pkgName = line.replace("Package: ", "").replace(" ", "").replace("\n", "");
|
||||||
|
switch(this->pkgSearchOption) {
|
||||||
|
case PkgSearchOption::Equal:
|
||||||
|
if(pkgName == this->pkgName) {
|
||||||
|
status = pkgDataStatus::IsContain;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
status = pkgDataStatus::UnContain;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PkgSearchOption::Include:
|
||||||
|
if(pkgName.contains(this->pkgName)) {
|
||||||
|
status = pkgDataStatus::IsContain;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
status = pkgDataStatus::UnContain;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pkgData += line + "\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 处理
|
||||||
|
pkgData += line + "\n";
|
||||||
|
}
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
qDebug() << aptData;
|
qDebug() << aptData;
|
||||||
|
20
aptpkginfo.h
20
aptpkginfo.h
@ -8,7 +8,12 @@ class AptPkgInfo: QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AptPkgInfo(QString pkgName);
|
enum PkgSearchOption {
|
||||||
|
Include = 0,
|
||||||
|
Equal = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
AptPkgInfo(QString pkgName, PkgSearchOption option = PkgSearchOption::Equal);
|
||||||
|
|
||||||
void SetPkgName(QString pkgName);
|
void SetPkgName(QString pkgName);
|
||||||
QStringList GetAptPackageList(QString name) const;
|
QStringList GetAptPackageList(QString name) const;
|
||||||
@ -20,10 +25,23 @@ public:
|
|||||||
QString get_version() const;
|
QString get_version() const;
|
||||||
QString get_maintainer() const;
|
QString get_maintainer() const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString pkgName;
|
QString pkgName;
|
||||||
QString pkgInfo;
|
QString pkgInfo;
|
||||||
QString aptData;
|
QString aptData;
|
||||||
|
PkgSearchOption pkgSearchOption = PkgSearchOption::Equal;
|
||||||
|
|
||||||
|
enum pkgDataStatus {
|
||||||
|
EmptyLine = 0,
|
||||||
|
EmptyLineAgain = 1,
|
||||||
|
Reading = 2,
|
||||||
|
Readed = 3,
|
||||||
|
None = 4,
|
||||||
|
UnContain = 5,
|
||||||
|
IsContain = 6
|
||||||
|
};
|
||||||
|
|
||||||
void ReadAptData();
|
void ReadAptData();
|
||||||
};
|
};
|
||||||
|
@ -15,7 +15,7 @@ void KernelInformation::LoadInfo()
|
|||||||
/*for(QString i: data) {
|
/*for(QString i: data) {
|
||||||
|
|
||||||
}*/
|
}*/
|
||||||
AptPkgInfo info = AptPkgInfo("");
|
AptPkgInfo info = AptPkgInfo("linux-", AptPkgInfo::PkgSearchOption::Include);
|
||||||
QJsonArray array;
|
QJsonArray array;
|
||||||
QStringList list = info.GetAptPackageList("linux-base");
|
QStringList list = info.GetAptPackageList("linux-base");
|
||||||
for(QString i: list) {
|
for(QString i: list) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user