Commit ebd01e4b5cbb0c20d7bdfd1ab0faf5db6b16f9b3

Authored by Eric Menezes Noronha
1 parent df1422ff
Exists in master

Modificação do esquema de verificação dos módulos. (Não funcional ainda)

cacic-daemon/cacicD/cacicd.cpp
... ... @@ -40,7 +40,7 @@ void cacicD::start() {
40 40 //o valor nu_intervalo_exec vem em minutos. O valor que o timer aceita é em milisegundos,por isso 60000
41 41 Ocacictimer->setPeriodicidadeExecucao(configuracoes["nu_intervalo_exec"].toString().toInt() * 60000);
42 42 Ocacictimer->iniciarTimer();
43   - }else{
  43 + } else {
44 44 //Iniciar com um timer default (4 horas), pra não ficar freezado pra sempre.
45 45 QLogger::QLog_Error("Cacic Daemon", QString("Problemas com o arquivo getConfig.json"));
46 46 QLogger::QLog_Info("Cacic Daemon", QString("Inicializando periodicidade de execução do serviço com tempo padrão."));
... ...
cacic-daemon/cacicD/cacictimer.cpp
... ... @@ -48,42 +48,44 @@ void CacicTimer::mslot(){
48 48 QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Não foi possivel verificar a periodicidade no getConfig.json"));
49 49 }
50 50  
51   - verificarEIniciarQMutex();
52   -
53   - if(getTest()){
54   - QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getTeste() success."));
55   - if(getConfig()){
56   - QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getConfig() success."));
57   - // QStringList nomesModulos = verificarModulos();
58   - // if ( !nomesModulos.empty() ) {
59   - // foreach( QString nome, nomesModulos ) {
60   - QString nome = "gercols";
61   - definirDirModulo(getApplicationDirPath(), nome);
62   - cacicthread->setCcacic(ccacic);
63   - cacicthread->setOCacicComm(OCacicComm);
64   - cacicthread->setNomeModulo(nome);
65   - cacicthread->setCMutex(cMutex);
66   - cacicthread->setModuloDirPath(getDirProgram());
67   - cacicthread->start(QThread::NormalPriority);
68   -// if(nome == "gercols" ){
69   -// //Envio do json gerado na coleta
70   -// bool ok = false;
71   -// QJsonObject jsonColeta = ccacic->getJsonFromFile(this->applicationDirPath + "/coleta.json");
72   -// OCacicComm->comm("/ws/neo/coleta", &ok, jsonColeta , false);
73   -// if(&ok){
74   -// QLogger::QLog_Info("Cacic Daemon (Timer)", QString("coleta enviada com sucesso."));
75   -// }
76   -// }
  51 + //Caso verifique que a thread ainda está em execução e não consiga finalizá-la.
  52 + //Acredito que seja difícil acontecer, mas vai que...
  53 + if (verificarEIniciarQMutex()) {
  54 + if(getTest()){
  55 + QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getTeste() success."));
  56 + if(getConfig()){
  57 + QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getConfig() success."));
  58 + // QStringList nomesModulos = verificarModulos();
  59 + // if ( !nomesModulos.empty() ) {
  60 + // foreach( QString nome, nomesModulos ) {
  61 + QString nome = "gercols";
  62 + definirDirModulo(getApplicationDirPath(), nome);
  63 + cacicthread->setCcacic(ccacic);
  64 + cacicthread->setOCacicComm(OCacicComm);
  65 + cacicthread->setNomeModulo(nome);
  66 + cacicthread->setCMutex(cMutex);
  67 + cacicthread->setModuloDirPath(getDirProgram());
  68 + cacicthread->start(QThread::NormalPriority);
  69 + // if(nome == "gercols" ){
  70 + // //Envio do json gerado na coleta
  71 + // bool ok = false;
  72 + // QJsonObject jsonColeta = ccacic->getJsonFromFile(this->applicationDirPath + "/coleta.json");
  73 + // OCacicComm->comm("/ws/neo/coleta", &ok, jsonColeta , false);
  74 + // if(&ok){
  75 + // QLogger::QLog_Info("Cacic Daemon (Timer)", QString("coleta enviada com sucesso."));
  76 + // }
  77 + // }
  78 + }else{
  79 + QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na obtenção do arquivo de configuração.");
  80 + }
77 81 }else{
78   - QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na obtenção do arquivo de configuração.");
  82 + QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na execução do getTest().");
79 83 }
80   - }else{
81   - QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na execução do getTest().");
82 84 }
83 85 }
84 86  
85 87  
86   -void CacicTimer::verificarEIniciarQMutex(){
  88 +bool CacicTimer::verificarEIniciarQMutex(){
87 89 if(!cacicthread->isRunning()){
88 90 cMutex->lock();
89 91 QLogger::QLog_Info("Cacic Daemon (Timer)", "Semáforo fechado com sucesso.");
... ... @@ -94,10 +96,11 @@ void CacicTimer::verificarEIniciarQMutex(){
94 96 QLogger::QLog_Info("Cacic Daemon (Timer)", "Gercols finalizado com sucesso.");
95 97 }catch (...){
96 98 QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha ao finalizar gercols.");
97   - return;
  99 + return false;
98 100 }
99 101 cMutex->lock();
100 102 QLogger::QLog_Info("Cacic Daemon (Timer)", "Semáforo fechado com sucesso.");
  103 + return true;
101 104 }
102 105 }
103 106  
... ... @@ -120,7 +123,7 @@ bool CacicTimer::getTest(){
120 123 try{
121 124 ccacic->setJsonToFile(jsonresult.contains("reply") ? jsonresult["reply"].toObject() : jsonresult,
122 125 this->applicationDirPath + "/getTest.json");
123   - return true; //acho que seria melhor retornar a variável 'ok'. Se der erro na conexão eu acho que não cai no catch.
  126 + return ok;
124 127 } catch (...) {
125 128 qDebug() << "Erro ao salvar o arquivo de configurações.";
126 129 return false;
... ... @@ -146,7 +149,7 @@ bool CacicTimer::getConfig(){
146 149 try{
147 150 ccacic->setJsonToFile(jsonresult.contains("reply") ? jsonresult["reply"].toObject() : jsonresult,
148 151 this->applicationDirPath + "/getConfigNew.json");
149   - return true; //mesma observação do getTest
  152 + return ok;
150 153 } catch (...) {
151 154 qDebug() << "Erro ao salvar o arquivo de configurações.";
152 155 return false;
... ... @@ -157,47 +160,6 @@ bool CacicTimer::getConfig(){
157 160 }
158 161 }
159 162  
160   -void CacicTimer::lerArquivoConfig ( const QJsonObject& jsonConfig )
161   -{
162   - /* lê json de configurações e armazena quais módulos executáveis.
163   - * E faz o mesmo tipo de comparação de hashs, com o fim de:
164   - * ou mantem o binário do módulo ou baixa um novo.
165   - */
166   - foreach( QJsonValue individualModule, jsonConfig["modulos"].toArray() ) {
167   - QString moduloKey, moduloValue;
168   -
169   - moduloKey = individualModule.toObject()["hash"].toString();
170   - moduloValue = individualModule.toObject()["nome"].toString();
171   -
172   - moduleMap.insert(moduloKey, moduloValue);
173   - }
174   -
175   - if ( jsonConfig["metodoDownload"].isArray() ) {
176   -
177   - foreach (QJsonValue individualMetodo, jsonConfig["metodoDownload"].toArray() ) {
178   - QMap<QString, QString> newEntry;
179   -
180   - newEntry.insert(QString("tipo"), individualMetodo.toObject()["tipo"].toString() );
181   - newEntry.insert(QString("url"), individualMetodo.toObject()["url"].toString() );
182   - newEntry.insert(QString("path"), individualMetodo.toObject()["path"].toString() );
183   - newEntry.insert(QString("usuario"), individualMetodo.toObject()["usario"].toString() );
184   - newEntry.insert(QString("senha"), individualMetodo.toObject()["senha"].toString() );
185   -
186   - metodosDownload.append( newEntry );
187   - }
188   - } else {
189   - QMap<QString, QString> newEntry;
190   -
191   - newEntry.insert(QString("tipo"), jsonConfig["metodoDownload"].toObject()["tipo"].toString() );
192   - newEntry.insert(QString("url"), jsonConfig["metodoDownload"].toObject()["url"].toString() );
193   - newEntry.insert(QString("path"), jsonConfig["metodoDownload"].toObject()["path"].toString() );
194   - newEntry.insert(QString("usuario"), jsonConfig["metodoDownload"].toObject()["usario"].toString() );
195   - newEntry.insert(QString("senha"), jsonConfig["metodoDownload"].toObject()["senha"].toString() );
196   -
197   - metodosDownload.append( newEntry );
198   - }
199   -}
200   -
201 163 QString CacicTimer::getDirProgram() const
202 164 {
203 165 return dirProgram;
... ... @@ -271,94 +233,3 @@ void CacicTimer::setPeriodicidadeExecucao(int value)
271 233 {
272 234 periodicidadeExecucao = value;
273 235 }
274   -
275   -
276   -QStringList CacicTimer::verificarModulos(){
277   - // Compara o novo arquivo de configuração com um antigo e se forem diferentes
278   - // mantem o mais recente; caso iguais simplesmente apaga o novo.
279   - QFile *fileOld;
280   - QFile *fileNew;
281   -
282   - fileOld = new QFile(this->applicationDirPath + "/getConfig.json");
283   - fileNew = new QFile(this->applicationDirPath + "/getConfigNew.json");
284   -
285   - if( fileOld->exists() && fileNew->exists() ){
286   - if( Md5IsEqual(QVariant::fromValue(fileOld), QVariant::fromValue(fileNew)) ) {
287   - fileNew->remove();
288   - } else {
289   - // Renomeia getConfigNew.json para getConfig.json
290   - fileOld->remove();
291   - fileNew->rename("getConfigNew.json","getConfig.json");
292   - }
293   - jsonConfig = ccacic->getJsonFromFile(this->applicationDirPath + "/getConfig.json");
294   - } else if( fileOld->exists() ){
295   - jsonConfig = ccacic->getJsonFromFile(this->applicationDirPath + "/getConfig.json");
296   - } else {
297   - QLogger::QLog_Error("Cacic Daemon (Timer)", "Arquivo de configuração não criado.");
298   - }
299   - delete fileOld;
300   - delete fileNew;
301   - lerArquivoConfig(jsonConfig["agentcomputer"].toObject());
302   -
303   - QStringList nomesModulos;
304   -
305   - int countExecNotFound = 0;
306   - QMap<QString, QString>::const_iterator moduloIterator = moduleMap.constBegin();
307   - while (moduloIterator != moduleMap.constEnd()) {
308   - QString nomeModulo = moduloIterator.value();
309   - QString hashModulo = moduloIterator.key();
310   - // Calcula hash do binario atual
311   -#if defined(Q_OS_WIN)
312   - fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo + ".exe");
313   -#else
314   - fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo);
315   -#endif
316   - if(!fileOld->exists()) {
317   - QLogger::QLog_Error("Cacic Daemon (Timer)", QString("Módulo ").append(nomeModulo).append(" não encontrado."));
318   - countExecNotFound++;
319   -
320   - if( countExecNotFound == moduleMap.size() ) {
321   - QLogger::QLog_Error("Cacic Daemon (Timer)", "Não foi possível encontrar nenhum módulo executável!");
322   - return QStringList();
323   - }
324   -
325   - // pula para o próximo módulo no moduloMap
326   - moduloIterator++;
327   - continue;
328   - }
329   -
330   - QString oldMd5 = QString(QCryptographicHash::hash(fileOld->readAll(),QCryptographicHash::Md5).toHex());
331   - if ( oldMd5 != hashModulo ) {
332   -
333   -#if defined(Q_OS_WIN)
334   - fileOld->rename(this->applicationDirPath + "/" + nomeModulo + ".exe",
335   - this->applicationDirPath + "/" + nomeModulo + "Old.exe");
336   -#elif defined(Q_OS_LINUX)
337   - fileOld->rename(this->applicationDirPath + "/" + nomeModulo,
338   - this->applicationDirPath + "/" + nomeModulo + "Old");
339   -#endif
340   -
341   - // Download nova versão do executável
342   - QList<QMap<QString,QString> >::const_iterator metodosIterator = metodosDownload.constBegin();
343   - bool downloadSucess = false;
344   - while ( !downloadSucess && metodosIterator != metodosDownload.constEnd() ) {
345   - if( metodosIterator->value("tipo") == "ftp" || metodosIterator->value("tipo") == "" ) {
346   - if ( OCacicComm->ftpDownload( metodosIterator->value("url"), metodosIterator->value("path") ) )
347   - downloadSucess = true;
348   - } else if ( metodosIterator->value("tipo") == "http" ) {
349   - if( OCacicComm->httpDownload( metodosIterator->value("url"), metodosIterator->value("path") ) )
350   - downloadSucess = true;
351   - }
352   - metodosIterator++;
353   - }
354   - fileOld->remove();
355   - delete fileOld;
356   - }
357   -
358   - nomesModulos.append(nomeModulo);
359   -
360   - moduloIterator++;
361   - }
362   -
363   - return nomesModulos;
364   -}
... ...
cacic-daemon/cacicD/cacictimer.h
... ... @@ -35,7 +35,7 @@ public:
35 35 void setPeriodicidadeExecucao(int value);
36 36  
37 37 private:
38   - void verificarEIniciarQMutex();
  38 + bool verificarEIniciarQMutex();
39 39 QStringList verificarModulos();
40 40 void reiniciarTimer();
41 41 QLogger::QLoggerManager *logManager;
... ... @@ -50,8 +50,6 @@ private:
50 50 QJsonObject jsonConfig;
51 51 int periodicidadeExecucao = 14400; // 4*3600. Tempo default de execução.
52 52 int getPeriodicidadeExecucao() const;
53   - QList<QMap<QString,QString> > metodosDownload;
54   - QMap<QString, QString> moduleMap; // key = hash md5, value = nome do modulo
55 53  
56 54 private slots:
57 55 void mslot();
... ...
cacic-teste/cacic-teste.pro
... ... @@ -31,7 +31,8 @@ SOURCES += \
31 31 ../src/vregistry.cpp \
32 32 ../src/ccoleta.cpp \
33 33 ../src/wmi.cpp \
34   - ../src/QLogger.cpp
  34 + ../src/QLogger.cpp \
  35 + ../src/checkmodules.cpp
35 36 # ../src/qtservice/src/qtservice.cpp \
36 37 # ../src/qtservice/src/qtservice_unix.cpp \
37 38 # ../src/qtservice/src/qtservice_win.cpp \
... ... @@ -52,7 +53,8 @@ HEADERS += \
52 53 ../src/vregistry.h \
53 54 ../src/ccoleta.h \
54 55 ../src/wmi.h \
55   - ../src/QLogger.h
  56 + ../src/QLogger.h \
  57 + ../src/checkmodules.h
56 58 # ../src/qtservice/src/qtservice.h \
57 59 # ../src/qtservice/src/qtservice_p.h \
58 60 # ../src/qtservice/src/qtunixserversocket.h \
... ...
cacic-teste/testcacic.cpp
... ... @@ -246,18 +246,14 @@ void CTestCacic::testGetTest()
246 246 QVERIFY(ok);
247 247 }
248 248  
249   -void CTestCacic::testColeta()
  249 +void CTestCacic::testGetConfig()
250 250 {
251 251 bool ok;
252 252 QJsonObject configEnvio;
253 253 configEnvio["computador"] = oColeta.getOComputer().toJsonObject();
254   - OCacic.setJsonToFile(OCacicComm->comm("/ws/neo/config", &ok, configEnvio), "getConfig.json");
255   - oColeta.configuraColetas();
256   - oColeta.run();
257   - oColeta.waitToCollect();
  254 + OCacic.setJsonToFile(OCacicComm->comm("/ws/neo/config", &ok, configEnvio)["reply"].toObject(), "getConfig.json");
258 255  
259   - QVERIFY(!oColeta.toJsonObject()["software"].toObject().isEmpty() &&
260   - !oColeta.toJsonObject()["hardware"].toObject().isEmpty());
  256 + QVERIFY(ok);
261 257 }
262 258  
263 259 void CTestCacic::testLogger()
... ... @@ -334,6 +330,12 @@ void CTestCacic::testEnviaColeta()
334 330 QVERIFY(ok);
335 331 }
336 332  
  333 +void CTestCacic::testGetModulesValues()
  334 +{
  335 + oCheckModules = new CheckModules(QDir::currentPath());
  336 + QVERIFY(false);
  337 +}
  338 +
337 339 void CTestCacic::cleanupTestCase()
338 340 {
339 341 // OCacic.deleteFile("gpl-2.0.txt");
... ... @@ -347,5 +349,5 @@ void CTestCacic::cleanupTestCase()
347 349 OCacic.deleteFolder("../logs");
348 350 OCacic.deleteFile("configRequest.json");
349 351 OCacic.deleteFile("teste.json");
350   - OCacic.deleteFile("getConfig.json");
  352 +// OCacic.deleteFile("getConfig.json");
351 353 }
... ...
cacic-teste/testcacic.h
... ... @@ -18,6 +18,7 @@
18 18 #include <QJsonObject>
19 19 #include <ccoleta.h>
20 20 #include <QLogger.h>
  21 +#include <checkmodules.h>
21 22  
22 23 class CTestCacic : public QObject
23 24 {
... ... @@ -36,6 +37,7 @@ private:
36 37 QJsonObject session;
37 38 QString cripTeste;
38 39 CColeta oColeta;
  40 + CheckModules *oCheckModules;
39 41 // cacicD OcacicD;
40 42  
41 43 signals:
... ... @@ -73,10 +75,11 @@ private slots:
73 75 void testColetaHardware();
74 76 void testConvertDouble();
75 77 void testGetTest();
76   - void testColeta();
  78 + void testGetConfig();
77 79 void testLogger();
78 80 void testFtpDownload();
79 81 void testEnviaColeta();
  82 + void testGetModulesValues();
80 83 void cleanupTestCase();
81 84 };
82 85  
... ...
src/checkmodules.cpp
1 1 #include "checkmodules.h"
2 2  
3   -CheckModules::CheckModules()
  3 +CheckModules::CheckModules(const QString &workingPath)
4 4 {
  5 + QJsonObject configFile;
  6 + configFile = oCacic.getJsonFromFile(workingPath + "/getConfig.json");
  7 + if (!configFile.isEmpty()) {
  8 + QJsonArray modulos;
  9 + modulos = configFile["agentcomputer"].toObject()["modulos"].toArray();
  10 + foreach (QJsonValue modulo, modulos){
  11 + modules[modulo.toObject()["nome"].toString()] = modulo.toObject()["hash"].toString();
  12 + }
  13 + }
  14 + //TODO: Completar constructor. Agora que tenho os nomes dos módulos e os hashs, fazer a verificação.
  15 + qDebug() << modules;
5 16 }
  17 +
  18 +bool CheckModules::start(){
  19 + return true;
  20 +}
  21 +
  22 +//QStringList CheckModules::verificaModulos(){
  23 +// // Compara o novo arquivo de configuração com um antigo e se forem diferentes
  24 +// // mantem o mais recente; caso iguais simplesmente apaga o novo.
  25 +// QFile *fileOld;
  26 +// QFile *fileNew;
  27 +
  28 +// fileOld = new QFile(this->applicationDirPath + "/getConfig.json");
  29 +// fileNew = new QFile(this->applicationDirPath + "/getConfigNew.json");
  30 +
  31 +// if( fileOld->exists() && fileNew->exists() ){
  32 +// if( Md5IsEqual(QVariant::fromValue(fileOld), QVariant::fromValue(fileNew)) ) {
  33 +// fileNew->remove();
  34 +// } else {
  35 +// // Renomeia getConfigNew.json para getConfig.json
  36 +// fileOld->remove();
  37 +// fileNew->rename("getConfigNew.json","getConfig.json");
  38 +// }
  39 +// jsonConfig = ccacic->getJsonFromFile(this->applicationDirPath + "/getConfig.json");
  40 +// } else if( fileOld->exists() ){
  41 +// jsonConfig = ccacic->getJsonFromFile(this->applicationDirPath + "/getConfig.json");
  42 +// } else {
  43 +// QLogger::QLog_Error("Cacic Daemon (Timer)", "Arquivo de configuração não criado.");
  44 +// }
  45 +// delete fileOld;
  46 +// delete fileNew;
  47 +// lerArquivoConfig(jsonConfig["agentcomputer"].toObject());
  48 +
  49 +// QStringList nomesModulos;
  50 +
  51 +// int countExecNotFound = 0;
  52 +// QMap<QString, QString>::const_iterator moduloIterator = moduleMap.constBegin();
  53 +// while (moduloIterator != moduleMap.constEnd()) {
  54 +// QString nomeModulo = moduloIterator.value();
  55 +// QString hashModulo = moduloIterator.key();
  56 +// // Calcula hash do binario atual
  57 +//#if defined(Q_OS_WIN)
  58 +// fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo + ".exe");
  59 +//#else
  60 +// fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo);
  61 +//#endif
  62 +// if(!fileOld->exists()) {
  63 +// QLogger::QLog_Error("Cacic Daemon (Timer)", QString("Módulo ").append(nomeModulo).append(" não encontrado."));
  64 +// countExecNotFound++;
  65 +
  66 +// if( countExecNotFound == moduleMap.size() ) {
  67 +// QLogger::QLog_Error("Cacic Daemon (Timer)", "Não foi possível encontrar nenhum módulo executável!");
  68 +// return QStringList();
  69 +// }
  70 +
  71 +// // pula para o próximo módulo no moduloMap
  72 +// moduloIterator++;
  73 +// continue;
  74 +// }
  75 +
  76 +// QString oldMd5 = QString(QCryptographicHash::hash(fileOld->readAll(),QCryptographicHash::Md5).toHex());
  77 +// if ( oldMd5 != hashModulo ) {
  78 +
  79 +//#if defined(Q_OS_WIN)
  80 +// fileOld->rename(this->applicationDirPath + "/" + nomeModulo + ".exe",
  81 +// this->applicationDirPath + "/" + nomeModulo + "Old.exe");
  82 +//#elif defined(Q_OS_LINUX)
  83 +// fileOld->rename(this->applicationDirPath + "/" + nomeModulo,
  84 +// this->applicationDirPath + "/" + nomeModulo + "Old");
  85 +//#endif
  86 +
  87 +// // Download nova versão do executável
  88 +// QList<QMap<QString,QString> >::const_iterator metodosIterator = metodosDownload.constBegin();
  89 +// bool downloadSucess = false;
  90 +// while ( !downloadSucess && metodosIterator != metodosDownload.constEnd() ) {
  91 +// if( metodosIterator->value("tipo") == "ftp" || metodosIterator->value("tipo") == "" ) {
  92 +// if ( OCacicComm->ftpDownload( metodosIterator->value("url"), metodosIterator->value("path") ) )
  93 +// downloadSucess = true;
  94 +// } else if ( metodosIterator->value("tipo") == "http" ) {
  95 +// if( OCacicComm->httpDownload( metodosIterator->value("url"), metodosIterator->value("path") ) )
  96 +// downloadSucess = true;
  97 +// }
  98 +// metodosIterator++;
  99 +// }
  100 +// fileOld->remove();
  101 +// delete fileOld;
  102 +// }
  103 +
  104 +// nomesModulos.append(nomeModulo);
  105 +
  106 +// moduloIterator++;
  107 +// }
  108 +
  109 +// return nomesModulos;
  110 +//}
  111 +
  112 +//void CheckModules::lerArquivoConfig ( const QJsonObject& jsonConfig )
  113 +//{
  114 +// /* lê json de configurações e armazena quais módulos executáveis.
  115 +// * E faz o mesmo tipo de comparação de hashs, com o fim de:
  116 +// * ou mantem o binário do módulo ou baixa um novo.
  117 +// */
  118 +// foreach( QJsonValue individualModule, jsonConfig["modulos"].toArray() ) {
  119 +// QString moduloKey, moduloValue;
  120 +
  121 +// moduloKey = individualModule.toObject()["hash"].toString();
  122 +// moduloValue = individualModule.toObject()["nome"].toString();
  123 +
  124 +// moduleMap.insert(moduloKey, moduloValue);
  125 +// }
  126 +
  127 +// if ( jsonConfig["metodoDownload"].isArray() ) {
  128 +
  129 +// foreach (QJsonValue individualMetodo, jsonConfig["metodoDownload"].toArray() ) {
  130 +// QMap<QString, QString> newEntry;
  131 +
  132 +// newEntry.insert(QString("tipo"), individualMetodo.toObject()["tipo"].toString() );
  133 +// newEntry.insert(QString("url"), individualMetodo.toObject()["url"].toString() );
  134 +// newEntry.insert(QString("path"), individualMetodo.toObject()["path"].toString() );
  135 +// newEntry.insert(QString("usuario"), individualMetodo.toObject()["usario"].toString() );
  136 +// newEntry.insert(QString("senha"), individualMetodo.toObject()["senha"].toString() );
  137 +
  138 +// metodosDownload.append( newEntry );
  139 +// }
  140 +// } else {
  141 +// QMap<QString, QString> newEntry;
  142 +
  143 +// newEntry.insert(QString("tipo"), jsonConfig["metodoDownload"].toObject()["tipo"].toString() );
  144 +// newEntry.insert(QString("url"), jsonConfig["metodoDownload"].toObject()["url"].toString() );
  145 +// newEntry.insert(QString("path"), jsonConfig["metodoDownload"].toObject()["path"].toString() );
  146 +// newEntry.insert(QString("usuario"), jsonConfig["metodoDownload"].toObject()["usario"].toString() );
  147 +// newEntry.insert(QString("senha"), jsonConfig["metodoDownload"].toObject()["senha"].toString() );
  148 +
  149 +// metodosDownload.append( newEntry );
  150 +// }
  151 +//}
... ...
src/checkmodules.h
1 1 #ifndef CHECKMODULES_H
2 2 #define CHECKMODULES_H
3 3  
  4 +#include <ccacic.h>
  5 +#include <cacic_comm.h>
  6 +#include <cacic_computer.h>
  7 +
4 8 class CheckModules
5 9 {
6 10 public:
7   - CheckModules();
  11 + CheckModules(const QString &workingPath);
  12 +// QStringList verificaModulos();
  13 + bool start();
  14 +private:
  15 + CCacic oCacic;
  16 + QVariantMap modules; //modules["name"] = hash;
  17 +// void lerArquivoConfig(const QJsonObject& jsonConfig);
8 18 };
9 19  
10 20 #endif // CHECKMODULES_H
... ...