cacic_software.cpp
3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include "cacic_software.h"
cacic_software::cacic_software()
{
}
void cacic_software::iniciaColeta()
{
#ifdef Q_OS_WIN
this->coletaSoftware = coletaWin();
#elif defined(Q_OS_LINUX)
this->coletaSoftware = coletaLinux();
#endif
}
QJsonObject cacic_software::coletaWin()
{
QJsonObject softwaresJson;
QSettings softwares("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", QSettings::NativeFormat);
// qDebug() << softwares.childGroups();
foreach (QString group, softwares.childGroups()){
QVariantMap software;
softwares.beginGroup(group);
software["DisplayName"] = softwares.value("DisplayName");
software["Publisher"] = softwares.value("Publisher");
software["InstallLocation"] = softwares.value("InstallLocation");
software["InstallDate"] = softwares.value("InstallDate");
software["URLInfoAbout"] = softwares.value("URLInfoAbout");
softwares.endGroup();
softwaresJson[group] = QJsonObject::fromVariantMap(software);
}
// qDebug() << softwaresJson;
return softwaresJson;
}
QJsonObject cacic_software::coletaLinux()
{
OperatingSystem operatingSystem;
if( operatingSystem.getIdOs() == OperatingSystem::LINUX_ARCH ) {
return coletaArch();
} else if ( operatingSystem.getIdOs() == OperatingSystem::LINUX_DEBIAN ||
operatingSystem.getIdOs() == OperatingSystem::LINUX_UBUNTU ) {
return coletaDebian();
}
return QJsonObject();
}
QJsonObject cacic_software::coletaArch()
{
ConsoleObject console;
QJsonObject softwaresJson;
QStringList packages = console("pacman -Qe").split("\n");
foreach(QString package, packages) {
QString packageName = package.split(" ")[0];
QJsonObject packageJson;
QStringList packageInfo = console(QString("pacman -Qi ").append(packageName)).split("\n");
// qDebug() << packageInfo;
packageJson["name"] = QJsonValue::fromVariant(QString(packageName));
foreach(QString line, packageInfo) {
if(line.contains("Version"))
packageJson["version"] = line.split(":")[1].mid(1);
if(line.contains("Description"))
packageJson["description"] = line.split(":")[1].mid(1);
if(line.contains("URL"))
packageJson["url"] = line.split(":")[1].mid(1);
if(line.contains("Installed size"))
packageJson["installed_size"] = line.split(":")[1].mid(1);
if(line.contains("Install Date"))
packageJson["install_date"] = line.split(":")[1].mid(1);
}
softwaresJson[packageName] = packageJson;
}
return softwaresJson;
}
QJsonObject cacic_software::coletaDebian()
{
ConsoleObject console;
QJsonObject softwaresJson;
QStringList packages = console("dpkg --get-selections").split("\n");
foreach(QString package, packages) {
QString packageName = package.split(" ")[0];
QJsonObject packageJson;
QStringList packageInfo = console(QString("apt-cache show ").append(packageName)).split("\n");
// qDebug() << packageInfo;
packageJson["name"] = QJsonValue::fromVariant(QString(packageName));
foreach(QString line, packageInfo) {
if(line.contains("Version"))
packageJson["version"] = line.split(":")[1].mid(1);
if(line.contains("Description"))
packageJson["description"] = line.split(":")[1].mid(1);
if(line.contains("Homepage"))
packageJson["url"] = line.split(":")[1].mid(1);
if(line.contains("Installed-Size"))
packageJson["installed_size"] = line.split(":")[1].mid(1);
}
softwaresJson[packageName] = packageJson;
}
return softwaresJson;
}
QJsonObject cacic_software::toJsonObject()
{
return coletaSoftware;
}