Commit d538265d605aa3f2e9ceaa7422f89ca382c6c2b5

Authored by Thiago Rocha
1 parent af93bf85
Exists in master

Correção da leitura do json do getConfig() para refletir sua nova versão.

Showing 1 changed file with 39 additions and 14 deletions   Show diff stats
cacic-daemon/cacicD/cacictimer.cpp
@@ -120,10 +120,6 @@ void CacicTimer::lerArquivoConfig ( const QJsonObject& jsonConfig ) @@ -120,10 +120,6 @@ void CacicTimer::lerArquivoConfig ( const QJsonObject& jsonConfig )
120 /* lê json de configurações e armazena quais módulos executáveis. 120 /* lê json de configurações e armazena quais módulos executáveis.
121 * E faz o mesmo tipo de comparação de hashs, com o fim de: 121 * E faz o mesmo tipo de comparação de hashs, com o fim de:
122 * ou mantem o binário do módulo ou baixa um novo. 122 * ou mantem o binário do módulo ou baixa um novo.
123 - *  
124 - * Aqui estou assumindo um formato do .json em que:  
125 - * há a key modulos contem uma lista com o nome dos executaveis e os seus valores hash md5  
126 - * há a key metodo que explicita o método de download dos executaveis  
127 */ 123 */
128 foreach( QJsonValue individualModule, jsonConfig["modulos"].toArray() ) { 124 foreach( QJsonValue individualModule, jsonConfig["modulos"].toArray() ) {
129 QString moduloKey, moduloValue; 125 QString moduloKey, moduloValue;
@@ -134,12 +130,27 @@ void CacicTimer::lerArquivoConfig ( const QJsonObject& jsonConfig ) @@ -134,12 +130,27 @@ void CacicTimer::lerArquivoConfig ( const QJsonObject& jsonConfig )
134 moduleMap.insert(moduloKey, moduloValue); 130 moduleMap.insert(moduloKey, moduloValue);
135 } 131 }
136 132
137 - foreach (QJsonValue individualMetodo, jsonConfig["metodoDownload"].toArray() ) { 133 + if ( jsonConfig["metodoDownload"].isArray() ) {
  134 +
  135 + foreach (QJsonValue individualMetodo, jsonConfig["metodoDownload"].toArray() ) {
  136 + QMap<QString, QString> newEntry;
  137 +
  138 + newEntry.insert(QString("tipo"), individualMetodo.toObject()["tipo"].toString() );
  139 + newEntry.insert(QString("url"), individualMetodo.toObject()["url"].toString() );
  140 + newEntry.insert(QString("path"), individualMetodo.toObject()["path"].toString() );
  141 + newEntry.insert(QString("usuario"), individualMetodo.toObject()["usario"].toString() );
  142 + newEntry.insert(QString("senha"), individualMetodo.toObject()["senha"].toString() );
  143 +
  144 + metodosDownload.append( newEntry );
  145 + }
  146 + } else {
138 QMap<QString, QString> newEntry; 147 QMap<QString, QString> newEntry;
139 148
140 - newEntry.insert(QString("tipo"), individualMetodo.toObject()["tipo"].toString() );  
141 - newEntry.insert(QString("url"), individualMetodo.toObject()["url"].toString() );  
142 - newEntry.insert(QString("path"), individualMetodo.toObject()["path"].toString() ); 149 + newEntry.insert(QString("tipo"), jsonConfig["metodoDownload"].toObject()["tipo"].toString() );
  150 + newEntry.insert(QString("url"), jsonConfig["metodoDownload"].toObject()["url"].toString() );
  151 + newEntry.insert(QString("path"), jsonConfig["metodoDownload"].toObject()["path"].toString() );
  152 + newEntry.insert(QString("usuario"), jsonConfig["metodoDownload"].toObject()["usario"].toString() );
  153 + newEntry.insert(QString("senha"), jsonConfig["metodoDownload"].toObject()["senha"].toString() );
143 154
144 metodosDownload.append( newEntry ); 155 metodosDownload.append( newEntry );
145 } 156 }
@@ -255,8 +266,10 @@ QStringList CacicTimer::verificarModulos(){ @@ -255,8 +266,10 @@ QStringList CacicTimer::verificarModulos(){
255 // mantem o mais recente; caso iguais simplesmente apaga o novo. 266 // mantem o mais recente; caso iguais simplesmente apaga o novo.
256 QFile *fileOld; 267 QFile *fileOld;
257 QFile *fileNew; 268 QFile *fileNew;
  269 +
258 fileOld = new QFile(this->applicationDirPath + "/getConfig.json"); 270 fileOld = new QFile(this->applicationDirPath + "/getConfig.json");
259 fileNew = new QFile(this->applicationDirPath + "/getConfigNew.json"); 271 fileNew = new QFile(this->applicationDirPath + "/getConfigNew.json");
  272 +
260 if( fileOld->exists() && fileNew->exists() ){ 273 if( fileOld->exists() && fileNew->exists() ){
261 if( Md5IsEqual(QVariant::fromValue(fileOld), QVariant::fromValue(fileNew)) ) { 274 if( Md5IsEqual(QVariant::fromValue(fileOld), QVariant::fromValue(fileNew)) ) {
262 fileNew->remove(); 275 fileNew->remove();
@@ -278,29 +291,41 @@ QStringList CacicTimer::verificarModulos(){ @@ -278,29 +291,41 @@ QStringList CacicTimer::verificarModulos(){
278 QStringList nomesModulos; 291 QStringList nomesModulos;
279 292
280 int countExecNotFound = 0; 293 int countExecNotFound = 0;
281 - QMap<QString, QString>::const_iterator mapIterator = moduleMap.constBegin();  
282 - while (mapIterator != moduleMap.constEnd()) {  
283 - QString nomeModulo = mapIterator.value();  
284 - QString hashModulo = mapIterator.key(); 294 + QMap<QString, QString>::const_iterator moduloIterator = moduleMap.constBegin();
  295 + while (moduloIterator != moduleMap.constEnd()) {
  296 + QString nomeModulo = moduloIterator.value();
  297 + QString hashModulo = moduloIterator.key();
285 // Calcula hash do binario atual 298 // Calcula hash do binario atual
286 #if defined(Q_OS_WIN) 299 #if defined(Q_OS_WIN)
287 - fileOld = new QFile(this->applicationDirPath + "/" + modulo + ".exe"); 300 + fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo + ".exe");
288 #else 301 #else
289 fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo); 302 fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo);
290 #endif 303 #endif
291 if(!fileOld->exists()) { 304 if(!fileOld->exists()) {
292 QLogger::QLog_Error("Cacic Daemon (Timer)", QString("Módulo ").append(nomeModulo).append(" não encontrado.")); 305 QLogger::QLog_Error("Cacic Daemon (Timer)", QString("Módulo ").append(nomeModulo).append(" não encontrado."));
293 countExecNotFound++; 306 countExecNotFound++;
  307 +
294 if( countExecNotFound == moduleMap.size() ) { 308 if( countExecNotFound == moduleMap.size() ) {
295 QLogger::QLog_Error("Cacic Daemon (Timer)", "Não foi possível encontrar nenhum módulo executável!"); 309 QLogger::QLog_Error("Cacic Daemon (Timer)", "Não foi possível encontrar nenhum módulo executável!");
296 return QStringList(); 310 return QStringList();
297 } 311 }
  312 +
  313 + // pula para o próximo módulo no moduloMap
  314 + moduloIterator++;
298 continue; 315 continue;
299 } 316 }
  317 +
300 QString oldMd5 = QString(QCryptographicHash::hash(fileOld->readAll(),QCryptographicHash::Md5).toHex()); 318 QString oldMd5 = QString(QCryptographicHash::hash(fileOld->readAll(),QCryptographicHash::Md5).toHex());
301 if ( oldMd5 != hashModulo ) { 319 if ( oldMd5 != hashModulo ) {
  320 +
  321 +#if defined(Q_OS_WIN)
  322 + fileOld->rename(this->applicationDirPath + "/" + nomeModulo + ".exe",
  323 + this->applicationDirPath + "/" + nomeModulo + "Old.exe");
  324 +#elif defined(Q_OS_LINUX)
302 fileOld->rename(this->applicationDirPath + "/" + nomeModulo, 325 fileOld->rename(this->applicationDirPath + "/" + nomeModulo,
303 this->applicationDirPath + "/" + nomeModulo + "Old"); 326 this->applicationDirPath + "/" + nomeModulo + "Old");
  327 +#endif
  328 +
304 // Download nova versão do executável 329 // Download nova versão do executável
305 QList<QMap<QString,QString> >::const_iterator metodosIterator = metodosDownload.constBegin(); 330 QList<QMap<QString,QString> >::const_iterator metodosIterator = metodosDownload.constBegin();
306 bool downloadSucess = false; 331 bool downloadSucess = false;
@@ -320,7 +345,7 @@ QStringList CacicTimer::verificarModulos(){ @@ -320,7 +345,7 @@ QStringList CacicTimer::verificarModulos(){
320 345
321 nomesModulos.append(nomeModulo); 346 nomesModulos.append(nomeModulo);
322 347
323 - mapIterator++; 348 + moduloIterator++;
324 } 349 }
325 350
326 return nomesModulos; 351 return nomesModulos;