From 1c90acb3746cf848c89e57f86477ff4c785d5788 Mon Sep 17 00:00:00 2001 From: Thiago Rocha Date: Tue, 19 Aug 2014 12:11:29 -0300 Subject: [PATCH] Métodos de coleta de software para Linux criados. --- gercols/gercols.cpp | 2 +- src/cacic_software.cpp | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- src/cacic_software.h | 6 +++++- src/ccoleta.cpp | 1 + src/ccoleta.h | 3 --- 5 files changed, 82 insertions(+), 7 deletions(-) diff --git a/gercols/gercols.cpp b/gercols/gercols.cpp index 102065e..10f0244 100644 --- a/gercols/gercols.cpp +++ b/gercols/gercols.cpp @@ -32,7 +32,7 @@ qDebug() << "TESTE"; void Gercols::run() { - QJsonObject coleta; + /* Pega configurações do Json de configurações localizado * na pasta principal do cacic (deverá ser pega do registro, * estou tentando implementar isso no installcacic). diff --git a/src/cacic_software.cpp b/src/cacic_software.cpp index c411e72..a056f5e 100644 --- a/src/cacic_software.cpp +++ b/src/cacic_software.cpp @@ -8,8 +8,9 @@ void cacic_software::iniciaColeta() { #ifdef Q_OS_WIN this->coletaSoftware = coletaWin(); -#else +#elif defined(Q_OS_LINUX) this->coletaSoftware = coletaLinux(); + #endif } @@ -33,10 +34,82 @@ QJsonObject cacic_software::coletaWin() return softwaresJson; } -void cacic_software::coletaLinux() +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(); + } +} + +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; diff --git a/src/cacic_software.h b/src/cacic_software.h index 7144e6c..5c41686 100644 --- a/src/cacic_software.h +++ b/src/cacic_software.h @@ -2,6 +2,8 @@ #define CACIC_SOFTWARE_H #include #include +#include +#include class cacic_software { public: @@ -11,7 +13,9 @@ public: private: QJsonObject coletaWin(); - void coletaLinux(); + QJsonObject coletaLinux(); + QJsonObject coletaArch(); + QJsonObject coletaDebian(); CCacic oCacic; QJsonObject coletaSoftware; diff --git a/src/ccoleta.cpp b/src/ccoleta.cpp index 908fab2..8e5c676 100644 --- a/src/ccoleta.cpp +++ b/src/ccoleta.cpp @@ -16,6 +16,7 @@ void CColeta::coletaSoftware() { qDebug() << "coletaSoftware() executado"; oSoftware.iniciaColeta(); + } void CColeta::configuraColetas(){ diff --git a/src/ccoleta.h b/src/ccoleta.h index 594f7dc..7874173 100644 --- a/src/ccoleta.h +++ b/src/ccoleta.h @@ -35,10 +35,7 @@ public slots: signals: void beginComputer(); void beginHardware(); - void beginNetworkInterfaces(); - void beginOperatingSystem(); void beginSoftware(); - void beginUser(); void finished(); }; -- libgit2 0.21.2