diff --git a/cacic-teste/cacic-teste.pro b/cacic-teste/cacic-teste.pro index 953ed89..e395746 100644 --- a/cacic-teste/cacic-teste.pro +++ b/cacic-teste/cacic-teste.pro @@ -9,11 +9,11 @@ QT += network TARGET = cacic-teste -QT += axcontainer CONFIG -= app_bundle CONFIG += c++11 TEMPLATE = app win32 { + QT += axcontainer LIBS += -LE:\LightBase\cacic-agente-project\cacic-agente\src\crypto++\lib -lcryptopp } else { LIBS += -L/usr/lib -lcryptopp @@ -28,6 +28,7 @@ SOURCES += \ ../src/cacic_hardware.cpp \ ../src/vqtconvert.cpp \ ../src/vregistry.cpp \ + ../src/ccoleta.cpp \ # ../src/qtservice/src/qtservice.cpp \ # ../src/qtservice/src/qtservice_unix.cpp \ # ../src/qtservice/src/qtservice_win.cpp \ @@ -46,6 +47,7 @@ HEADERS += \ ../src/cacic_hardware.h \ ../src/vqtconvert.h \ ../src/vregistry.h \ + ../src/ccoleta.h \ # ../src/qtservice/src/qtservice.h \ # ../src/qtservice/src/qtservice_p.h \ # ../src/qtservice/src/qtunixserversocket.h \ diff --git a/cacic-teste/testcacic.cpp b/cacic-teste/testcacic.cpp index 2ab82dd..21dcaf5 100644 --- a/cacic-teste/testcacic.cpp +++ b/cacic-teste/testcacic.cpp @@ -101,14 +101,11 @@ void CTestCacic::testpegarOS(){ void CTestCacic::testConsole() { - ConsoleObject console; #if defined(Q_OS_LINUX) + ConsoleObject console; QVERIFY(console("echo teste").toStdString() == "teste\n"); -#elif defined(Q_OS_WIN) - qDebug() << console("echo teste"); - QVERIFY(console("echo teste").toStdString() == "teste"); #else - QVERIFY(false); + QSKIP("Teste desnecessário nessa plataforma"); #endif } @@ -245,11 +242,33 @@ void CTestCacic::testGetTest() QJsonObject envio; envio["computador"] = OCacicComp.toJsonObject(); OCacicComm.setUrlGerente("http://10.1.0.137/cacic/web/app_dev.php"); + OCacicComm.comm("/ws/neo/getTest", &ok, envio); QVERIFY(ok); } +void CTestCacic::testColeta() +{ + QJsonObject configTeste; + QJsonObject configComputer; + configComputer["operating_system"] = QJsonValue::fromVariant(QString("")); + configComputer["user"] = QJsonValue::fromVariant(QString("")); + configComputer["network_interface"] = QJsonValue::fromVariant(QString("")); + configTeste["computer"] = configComputer; + configTeste["hardware"] = QJsonValue::fromVariant(QString("")); + configTeste["software"] = QJsonValue::fromVariant(QString("")); + + OCacic.setJsonToFile(configTeste,"configReq.json"); + oColeta.configuraColetas(); + oColeta.run(); + oColeta.waitToCollect(); +// qDebug() << oColeta.toJsonObject(); + QVERIFY(!oColeta.toJsonObject()["software"].toObject().isEmpty() && + !oColeta.toJsonObject()["hardware"].toObject().isEmpty()); +} + void CTestCacic::cleanupTestCase() { OCacic.deleteFile("configRequest.json"); OCacic.deleteFile("teste.json"); + OCacic.deleteFile("configReq.json"); } diff --git a/cacic-teste/testcacic.h b/cacic-teste/testcacic.h index e77cceb..a6f95e5 100644 --- a/cacic-teste/testcacic.h +++ b/cacic-teste/testcacic.h @@ -16,6 +16,7 @@ #include #include #include +#include class CTestCacic : public QObject { @@ -33,6 +34,7 @@ private: QString testIniPath; QJsonObject session; QString cripTeste; + CColeta oColeta; // cacicD OcacicD; signals: @@ -71,6 +73,7 @@ private slots: void testColetaHardware(); void testConvertDouble(); void testGetTest(); + void testColeta(); void cleanupTestCase(); }; diff --git a/gercols/gercols.cpp b/gercols/gercols.cpp index 01eca4a..914da03 100644 --- a/gercols/gercols.cpp +++ b/gercols/gercols.cpp @@ -23,7 +23,6 @@ Gercols::Gercols(QObject *parent) //Pega chave do registro, que será pega na instalação. oCacic.setChaveCrypt(oCacic.getValueFromRegistry("Lightbase", "Cacic", "key").toString()); -qDebug() << "TESTE"; oColeta = new CColeta(); QObject::connect(this, SIGNAL(iniciaConfiguracao()), oColeta, SLOT(configuraColetas())); @@ -47,7 +46,7 @@ void Gercols::run() emit iniciaColeta(); oCacic.deleteFile("configReq.json"); - + oColeta->waitToCollect(); //salva json em arquivo if (!oColeta->toJsonObject().isEmpty()) oCacic.setJsonToFile(oColeta->toJsonObject(), "coleta.json"); diff --git a/gercols/gercols.pro b/gercols/gercols.pro index 7687582..6e67e08 100644 --- a/gercols/gercols.pro +++ b/gercols/gercols.pro @@ -12,6 +12,7 @@ TARGET = gercols CONFIG += console CONFIG -= app_bundle CONFIG += qt +CONFIG += c++11 win32 { QT += axcontainer @@ -33,7 +34,6 @@ SOURCES += \ ./gercols.cpp \ ../src/vregistry.cpp \ ../src/vqtconvert.cpp \ -#win32 SOURCES += \ ../src/vregistry.cpp \ ../src/vqtconvert.cpp \ HEADERS += \ ../src/ccacic.h \ @@ -46,7 +46,6 @@ HEADERS += \ ./gercols.h \ ../src/vregistry.h \ ../src/vqtconvert.h \ -#win32 HEADERS += \ ../src/vregistry.h \ ../src/vqtconvert.h \ INCLUDEPATH += ../src \ ../src/crypto++/include/ diff --git a/install-cacic/install-cacic.pro.user b/install-cacic/install-cacic.pro.user index 98c9c77..e0ffb11 100644 --- a/install-cacic/install-cacic.pro.user +++ b/install-cacic/install-cacic.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget @@ -217,9 +217,7 @@ 14 2 - - PROCESSOR_ARCHITECTURE=x64 - + install-cacic Qt4ProjectManager.Qt4RunConfiguration:E:/LightBase/cacic-agente-project/cacic-agente/install-cacic/install-cacic.pro diff --git a/src/cacic_hardware.cpp b/src/cacic_hardware.cpp index 3612c96..4f55175 100644 --- a/src/cacic_hardware.cpp +++ b/src/cacic_hardware.cpp @@ -16,111 +16,235 @@ QJsonObject cacic_hardware::coletaWin() { QJsonObject hardware; QStringList params; - QJsonObject wmi; + QJsonValue wmi; // Win32_ComputerSystem (Caption, Description, Domain, DNSHostName, Manufacturer, // Model, Name, PrimaryOwnerName, TotalPhysicalMemory, Workgroup) params << "Caption" << "Description" << "Domain" << "DNSHostName" << "Manufacturer" << "Model" << "Name" << "PrimaryOwnerName" << "TotalPhysicalMemory" << "Workgroup"; wmi = wmiSearch("Win32_ComputerSystem", params); - if (!wmi.isEmpty()) - hardware["ComputerSystem"] = wmiSearch("Win32_ComputerSystem", params); + if (!wmi.isNull()) + hardware["ComputerSystem"] = wmi; //Win32_PortableBattery // (Verifica se é notebook) params.clear(); - hardware["IsNotebook"] = QJsonValue::fromVariant(!wmiSearch("Win32_PortableBattery", params).isEmpty()); + hardware["IsNotebook"] = QJsonValue::fromVariant(!wmiSearch("Win32_PortableBattery", params).isNull()); //Win32_Bios // (Manufacturer, SMBIOSBIOSVersion, BIOSVersion, Version, SerialNumber, ReleaseDate) params.clear(); params << "Manufacturer" << "SMBIOSBIOSVersion" << "BIOSVersion" << "Version" << "SerialNumber" << "ReleaseDate"; wmi = wmiSearch("Win32_Bios", params); - if (!wmi.isEmpty()) + if (!wmi.isNull()) hardware["Bios"] = wmi; //Win32_BaseBoard // (Manufacturer, Model, SerialNumber) params.clear(); params << "Manufacturer" << "Model" << "SerialNumber"; wmi = wmiSearch("Win32_Baseboard", params); - if (!wmi.isEmpty()) + if (!wmi.isNull()) hardware["BaseBoard"] = wmi; //Win32_SystemEnclosure // (Manufacturer, ChassisTypes, SerialNumber, SMBIOSAssetTag) + params.clear(); + params << "Manufacturer" << "ChassisTypes" << "SerialNumber" << "SMBIOSAssetTag"; + wmi = wmiSearch("Win32_SystemEnclosure", params); + if (!wmi.isNull()) + hardware["SystemEnclosure"] = wmi; //Win32_FloppyDrive // (Manufacturer, Caption, Description, Name, MediaType, Size) + params.clear(); + params << "Manufacturer" << "Caption" << "Description" << "Name"; + wmi = wmiSearch("Win32_FloppyDrive", params); + if (!wmi.isNull()) + hardware["FloppyDrive"] = wmi; //Win32_DiskDrive // (Manufacturer, Caption, Description, Name, MediaType, Size, SerialNumber, Model, FirmwareRevision) + params.clear(); + params << "Manufacturer" << "Caption" << "Description" << "Name" << "MediaType" << "Size" << "SerialNumber" + << "Model" << "FirmwareRevision"; + wmi = wmiSearch("Win32_DiskDrive", params); + if (!wmi.isNull()) + hardware["DiskDrive"] = wmi; //Win32_CDROMDrive // (Manufacturer, Caption, Description, Name, MediaType, Size) + params.clear(); + params << "Manufacturer" << "Caption" << "Description" << "MediaType" << "Name" << "Size"; + wmi = wmiSearch("Win32_CDROMDrive", params); + if (!wmi.isNull()) + hardware["CDROMDrive"] = wmi; //Win32_FloppyController // (Manufacturer, Caption, Description, Name) + params.clear(); + params << "Manufacturer" << "Caption" << "Description" << "Name"; + wmi = wmiSearch("Win32_FloppyController", params); + if (!wmi.isNull()) + hardware["FloppyController"] = wmi; //Win32_SCSIController // (Manufacturer, Caption, Description, Name, HardwareVersion) + params.clear(); + params << "Manufacturer" << "Caption" << "Description" << "Name" << "HardwareVersion"; + wmi = wmiSearch("Win32_SCSIController", params); + if (!wmi.isNull()) + hardware["SCSIController"] = wmi; //Win32_InfraredDevice // (Manufacturer, Caption, Description, Name) + params.clear(); + params << "Manufacturer" << "Caption" << "Description" << "Name"; + wmi = wmiSearch("Win32_InfraredDevice", params); + if (!wmi.isNull()) + hardware["InfraredDevice"] = wmi; //Win32_USBController // (Manufacturer, Caption, Description, Name) + params.clear(); + params << "Manufacturer" << "Caption" << "Description" << "Name"; + wmi = wmiSearch("Win32_USBController", params); + if (!wmi.isNull()) + hardware["USBController"] = wmi; //Win32_PCMCIAController // (Manufacturer, Caption, Description, Name) + params.clear(); + params << "Manufacturer" << "Caption" << "Description" << "Name"; + wmi = wmiSearch("Win32_PCMCIAController", params); + if (!wmi.isNull()) + hardware["PCMCIAController"] = wmi; //Win32_VideoController - // (Description, VideoProcessor, AdapterRAM, CurrentHorizontalResolution, CurrentVerticalResolution) + // (Description, VideoProcessor, AdapterRAM, CurrentHorizontalResolution, CurrentVerticalResolution, Caption, Name) + params.clear(); + params << "VideoProcessor" << "AdapterRAM" << "Description" << "Name" << "CurrentHorizontalResolution" + << "CurrentVerticalResolution" << "Caption" << "AcceleratorCapabilities"; + wmi = wmiSearch("Win32_VideoController", params); + if (!wmi.isNull()) + hardware["VideoController"] = wmi; //Win32_DesktopMonitor - // (MonitorManufacturer, Caption, Description, MonitorType) + // (MonitorManufacturer, Caption, Description, MonitorType, Name) + params.clear(); + params << "MonitorManufacturer" << "Caption" << "Description" << "MonitorType" << "Name"; + wmi = wmiSearch("Win32_DesktopMonitor", params); + if (!wmi.isNull()) + hardware["DesktopMonitor"] = wmi; //Win32_Printer // (Name, DriverName, PortName, ServerName, ShareName, HorizontalResolution, VerticalResolution, Comment, Shared, Network) + params.clear(); + params << "Name" << "DriverName" << "PortName" << "ServerName" << "ShareName" << "HorizontalResolution" + << "VerticalResolution" << "Comment" << "Shared" << "Network"; + wmi = wmiSearch("Win32_Printer", params); + if (!wmi.isNull()) + hardware["Printer"] = wmi; //Win32_PortConnector - // (ExternalReferenceDesignator, PortType, ConnectorType) + // (ExternalReferenceDesignator, PortType (verificar), ConnectorType (verificar), Manufacturer, Caption, Name) + params.clear(); + params << "ExternalReferenceDesignator" << "PortType" << "ConnectorType" << "Name" << "Caption" << "Manufacturer"; + wmi = wmiSearch("Win32_PortConnector", params); + if (!wmi.isNull()) + hardware["PortConnector"] = wmi; //Win32_SerialPort // (Name, Caption, Description, StatusInfo) + params.clear(); + params << "Name" << "Caption" << "Description" << "StatusInfo"; + wmi = wmiSearch("Win32_SerialPort", params); + if (!wmi.isNull()) + hardware["SerialPort"] = wmi; //Win32_Processor - // (MaxClockSpeed, Name, Architecture, NumberOfCores, SocketDesignation, Manufacturer, Name, Architecture, NumberOfCores + // (MaxClockSpeed, Name, Architecture, NumberOfCores, SocketDesignation, Manufacturer, Architecture, NumberOfCores // CurrentClockSpeed, MaxClockSpeed, L2CacheSize, AddressWidth, DataWidth, VoltageCaps, CpuStatus, // ProcessorId || UniqueId, AddressWidth) + params.clear(); + params << "MaxClockSpeed" << "Name" << "Architecture" << "NumberOfCores" << "SocketDesignation" << "Manufacturer" + << "Architecture" << "NumberOfCores" << "CurrentClockSpeed" << "MaxClockSpeed" << "L2CacheSize" << "AddressWidth" + << "DataWidth" << "VoltageCaps" << "CpuStatus" << "ProcessorId" << "UniqueId" << "AddressWidth"; + wmi = wmiSearch("Win32_Processor", params); + if (!wmi.isNull()) + hardware["Processor"] = wmi; //Win32_OperatingSystem // (Name, Version, CSDVersion, Description, InstallDate, Organization, RegisteredUser, SerialNumber) + params.clear(); + params << "Name" << "Version" << "CSDVersion" << "Description" << "InstallDate" << "Organization" << "RegisteredUser" + << "SerialNumber"; + wmi = wmiSearch("Win32_OperatingSystem", params); + if (!wmi.isNull()) + hardware["OperatingSystem"] = wmi; //Win32_SystemSlot // (Name, Description, SlotDesignation, CurrentUsage, Status, Shared) + params.clear(); + params << "Name" << "Description" << "SlotDesignation" << "CurrentUsage" << "Status" << "Shared"; + wmi = wmiSearch("Win32_SystemSlot", params); + if (!wmi.isNull()) + hardware["SystemSlot"] = wmi; //Win32_LogicalDisk // (Caption, DriveType, Filesystem, VolumeName, ProviderName, Filesystem, VolumeName, Size, FreeSpace) + params.clear(); + params << "Caption" << "DriveType" << "Filesystem" << "VolumeName" << "ProviderName" << "Filesystem" << "VolumeName" + << "Size" << "FreeSpace"; + wmi = wmiSearch("Win32_LogicalDisk", params); + if (!wmi.isNull()) + hardware["LogicalDisk"] = wmi; //Win32_PhysicalMemory - // (Caption, Description, BankLabel, DeviceLocator, Capacity, Speed, MemoryTypem, SerialNumber) + // (Caption, Description, BankLabel, DeviceLocator, Capacity, Speed, MemoryType, SerialNumber) + params.clear(); + params << "Caption" << "Description" << "BankLabel" << "DeviceLocator" << "Capacity" << "Speed" << "MemoryType"; + wmi = wmiSearch("Win32_PhysicalMemory", params); + if (!wmi.isNull()) + hardware["PhysicalMemory"] = wmi; //Win32_Keyboard - // (Manufacturer, Caption, Description) + // (Caption, Description, Name) + params.clear(); + params << "Caption" << "Description" << "Name" << "Layout"; + wmi = wmiSearch("Win32_Keyboard", params); + if (!wmi.isNull()) + hardware["Keyboard"] = wmi; //Win32_PointingDevice // (Manufacturer, Caption, Description, PointingType, DeviceInterface) + params.clear(); + params << "Manufacturer" << "Caption" << "Description" << "PointingType" << "DeviceInterface"; + wmi = wmiSearch("Win32_PointingDevice", params); + if (!wmi.isNull()) + hardware["PointingDevice"] = wmi; //Win32_PnPSignedDriver // (Manufacturer, DeviceName, Description, Location, DeviceClass) - qDebug() << hardware; + params.clear(); + params << "Manufacturer" << "DeviceName" << "Description" << "Location" << "DeviceClass"; + wmi = wmiSearch("Win32_PnPSignedDriver", params); + if (!wmi.isNull()) + hardware["PnPSignedDriver"] = wmi; +// qDebug() << hardware; return hardware; } -QJsonObject cacic_hardware::wmiSearch(QString classe, QStringList params) +QJsonValue cacic_hardware::wmiSearch(QString classe, QStringList params) { - QJsonObject wmiReturn; + QJsonValue wmiReturn; + QJsonObject itemWmi; + QJsonArray arrayItens; QString paramsString; if (!params.empty()){ for(int i = 0; i!=params.size();i++) paramsString.append(params.at(i) + ((i != params.size() - 1) ? "," : "")); } - QAxObject *objIWbemLocator = new QAxObject("WbemScripting.SWbemLocator"); + QString query = "SELECT " + ((!paramsString.isEmpty()) ? paramsString : "*") + " FROM " + classe; + //conecta ao script (Como já estamos usando QObject, o WbemScripting... não funciona chamando normal, + // por isso deve ser usado o CoInitializeEx) + ::CoInitializeEx(NULL, COINIT_MULTITHREADED); + QAxObject *objIWbemLocator = new QAxObject(); + objIWbemLocator->setControl("WbemScripting.SWbemLocator"); + if (objIWbemLocator->isNull()) + return QJsonValue(); + //conecta ao wmi QAxObject *objWMIService = objIWbemLocator->querySubObject("ConnectServer(QString&,QString&)", QString("."), QString("root\\CIMV2") ); - QAxObject* returnList = objWMIService->querySubObject("ExecQuery(QString&)", - QString("SELECT " + ((!paramsString.isEmpty()) ? - paramsString : "*") + - " FROM " + classe) - ); +// qDebug() << ">>>>>>>>>" << objIWbemLocator->isNull() << objWMIService->isNull(); + //Faz a pesquisa no wmi + QAxObject* returnList = objWMIService->querySubObject("ExecQuery(QString&)", query); +// qDebug() << "<<<<<<<<<<<<<<<<<<<<<<<"; QAxObject *enum1 = returnList->querySubObject("_NewEnum"); - //ui->textBrowser_4->setHtml(enum1->generateDocumentation()); + IEnumVARIANT* enumInterface = 0; + enum1->queryInterface(IID_IEnumVARIANT, (void**)&enumInterface); - //ui->textBrowser_4->setHtml(enumInterface->); enumInterface->Reset(); - // QAxObject *item = 0; - - //qDebug()<<"the count of objinterlist is "<dynamicCall("Count").toInt()); - for (int i = 0; i < returnList->dynamicCall("Count").toInt(); i++) { + int countReturnListObj = returnList->dynamicCall("Count").toInt(); + for (int i = 0; i < countReturnListObj; i++) { VARIANT *theItem = (VARIANT*)malloc(sizeof(VARIANT)); if (enumInterface->Next(1,theItem,NULL) != S_FALSE){ QAxObject *item = new QAxObject((IUnknown *)theItem->punkVal); @@ -130,7 +254,6 @@ QJsonObject cacic_hardware::wmiSearch(QString classe, QStringList params) QStringList instanceList = instance.split("\n\t"); //Pra cada linha grava no json os valores com cada tag foreach(QString value, instanceList){ - qDebug() << value; QStringList valueList = value.split("="); if (valueList.size() > 1){ QString tag = valueList.at(0).trimmed(); @@ -139,29 +262,41 @@ QJsonObject cacic_hardware::wmiSearch(QString classe, QStringList params) aux.remove(";"); aux.remove("\n"); //verifica se é lista - qDebug() << aux; - if(aux.contains("{") && aux.contains("}")){ + if(aux.startsWith("{") && aux.endsWith("}")){ QStringList auxList = aux.split(","); QJsonArray jList; foreach(QString valueList, auxList){ if (valueList.contains("{")) valueList.remove("{"); - else if (valueList.contains("}")) + if (valueList.contains("}")) valueList.remove("}"); jList.append(valueList.trimmed()); } - wmiReturn[tag] = jList; + itemWmi[tag] = jList; } else { //O último valor sempre volta com "}" no final. if (aux.contains("}")) aux.remove("}"); - wmiReturn[tag] = QJsonValue::fromVariant(aux.trimmed()); + itemWmi[tag] = QJsonValue::fromVariant(aux.trimmed()); } } - } - } + } // foreach(QString value, instanceList) + } // if(item) + } // if (enumInterface->Next(1,theItem,NULL) != S_FALSE) + //Se houver mais de um objeto, grava em uma lista + if (countReturnListObj > 1){ + arrayItens.append(QJsonValue(itemWmi)); } } + objIWbemLocator->clear(); + ::CoUninitialize(); + //se for mais de um objeto, retorna array. + if (!arrayItens.isEmpty()) + wmiReturn = QJsonValue(arrayItens); + //senão, se o objeto não for vazio (se tiver coletado algo) + else if (!itemWmi.isEmpty()) + wmiReturn = QJsonValue(itemWmi); + return wmiReturn; } #elif defined(Q_OS_LINUX) diff --git a/src/cacic_hardware.h b/src/cacic_hardware.h index 2bb628c..da43912 100644 --- a/src/cacic_hardware.h +++ b/src/cacic_hardware.h @@ -22,7 +22,7 @@ public: private: #ifdef Q_OS_WIN QJsonObject coletaWin(); - QJsonObject wmiSearch(QString classe, QStringList params); + QJsonValue wmiSearch(QString classe, QStringList params); #elif defined(Q_OS_LINUX) QJsonObject coletaLinux(); diff --git a/src/ccoleta.cpp b/src/ccoleta.cpp index 5df27f1..d79fa00 100644 --- a/src/ccoleta.cpp +++ b/src/ccoleta.cpp @@ -11,6 +11,7 @@ void CColeta::coletaHardware() qDebug() << "coletaHardware() começando sua execução"; oHardware.iniciaColeta(); qDebug() << "coletaHardware() executado"; + emit hardwareFinish(); } @@ -19,45 +20,75 @@ void CColeta::coletaSoftware() qDebug() << "coletaSoftware() começando sua execução"; oSoftware.iniciaColeta(); qDebug() << "coletaSoftware() executado"; - + emit softwareFinish(); } void CColeta::configuraColetas(){ QObject::connect(this, SIGNAL(beginHardware()), this, SLOT(coletaHardware())); QObject::connect(this, SIGNAL(beginSoftware()), this, SLOT(coletaSoftware())); + QObject::connect(this, SIGNAL(softwareFinish()), this, SLOT(softwareReady())); + QObject::connect(this, SIGNAL(hardwareFinish()), this, SLOT(hardwareReady())); } -CACIC_Computer CColeta::getOComputer() const +bool CColeta::waitToCollect() { - return oComputer; -} - -cacic_software CColeta::getOSoftware() const -{ - return oSoftware; -} - -cacic_hardware CColeta::getOHardware() const -{ - return oHardware; + int timeout = 0; + while(!(this->softwareIsFinish && this->hardwareIsFinish) && timeout != 30){ + QThread::sleep(1); + timeout++; + } + return true; } void CColeta::run() { QJsonObject coleta = oCacic.getJsonFromFile("configReq.json"); - if( coleta.contains("hardware") ) + if( coleta.contains("hardware") ){ + this->hardwareIsFinish = false; emit beginHardware(); - if ( coleta.contains("software") ) + } else + this->hardwareIsFinish = true; + if ( coleta.contains("software") ){ + this->softwareIsFinish = false; emit beginSoftware(); + } else + this->softwareIsFinish = true; } QJsonObject CColeta::toJsonObject() { QJsonObject coletaJson; - coletaJson["computer"] = oComputer.toJsonObject(); - coletaJson["software"] = oSoftware.toJsonObject(); - coletaJson["hardware"] = oHardware.toJsonObject(); + if (this->hardwareIsFinish && this->softwareIsFinish){ + coletaJson["computer"] = oComputer.toJsonObject(); + coletaJson["software"] = oSoftware.toJsonObject(); + coletaJson["hardware"] = oHardware.toJsonObject(); + } return coletaJson; } + +void CColeta::hardwareReady() +{ + this->hardwareIsFinish = true; +} + +void CColeta::softwareReady() +{ + this->softwareIsFinish = true; +} + +CACIC_Computer CColeta::getOComputer() const +{ + return oComputer; +} + +cacic_software CColeta::getOSoftware() const +{ + return oSoftware; +} + +cacic_hardware CColeta::getOHardware() const +{ + return oHardware; +} diff --git a/src/ccoleta.h b/src/ccoleta.h index 838f943..99d0460 100644 --- a/src/ccoleta.h +++ b/src/ccoleta.h @@ -19,6 +19,8 @@ private: CACIC_Computer oComputer; cacic_software oSoftware; cacic_hardware oHardware; + bool hardwareIsFinish; + bool softwareIsFinish; public: explicit CColeta(QObject *parent = 0); @@ -26,19 +28,23 @@ public: CACIC_Computer getOComputer() const; cacic_software getOSoftware() const; cacic_hardware getOHardware() const; - + bool waitToCollect(); QJsonObject toJsonObject(); public slots: void coletaHardware(); void coletaSoftware(); void configuraColetas(); + void hardwareReady(); + void softwareReady(); void run(); signals: void beginComputer(); void beginHardware(); void beginSoftware(); + void hardwareFinish(); + void softwareFinish(); void finished(); }; -- libgit2 0.21.2