Commit d538265d605aa3f2e9ceaa7422f89ca382c6c2b5
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 | 120 | /* lê json de configurações e armazena quais módulos executáveis. |
| 121 | 121 | * E faz o mesmo tipo de comparação de hashs, com o fim de: |
| 122 | 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 | 124 | foreach( QJsonValue individualModule, jsonConfig["modulos"].toArray() ) { |
| 129 | 125 | QString moduloKey, moduloValue; |
| ... | ... | @@ -134,12 +130,27 @@ void CacicTimer::lerArquivoConfig ( const QJsonObject& jsonConfig ) |
| 134 | 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 | 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 | 155 | metodosDownload.append( newEntry ); |
| 145 | 156 | } |
| ... | ... | @@ -255,8 +266,10 @@ QStringList CacicTimer::verificarModulos(){ |
| 255 | 266 | // mantem o mais recente; caso iguais simplesmente apaga o novo. |
| 256 | 267 | QFile *fileOld; |
| 257 | 268 | QFile *fileNew; |
| 269 | + | |
| 258 | 270 | fileOld = new QFile(this->applicationDirPath + "/getConfig.json"); |
| 259 | 271 | fileNew = new QFile(this->applicationDirPath + "/getConfigNew.json"); |
| 272 | + | |
| 260 | 273 | if( fileOld->exists() && fileNew->exists() ){ |
| 261 | 274 | if( Md5IsEqual(QVariant::fromValue(fileOld), QVariant::fromValue(fileNew)) ) { |
| 262 | 275 | fileNew->remove(); |
| ... | ... | @@ -278,29 +291,41 @@ QStringList CacicTimer::verificarModulos(){ |
| 278 | 291 | QStringList nomesModulos; |
| 279 | 292 | |
| 280 | 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 | 298 | // Calcula hash do binario atual |
| 286 | 299 | #if defined(Q_OS_WIN) |
| 287 | - fileOld = new QFile(this->applicationDirPath + "/" + modulo + ".exe"); | |
| 300 | + fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo + ".exe"); | |
| 288 | 301 | #else |
| 289 | 302 | fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo); |
| 290 | 303 | #endif |
| 291 | 304 | if(!fileOld->exists()) { |
| 292 | 305 | QLogger::QLog_Error("Cacic Daemon (Timer)", QString("Módulo ").append(nomeModulo).append(" não encontrado.")); |
| 293 | 306 | countExecNotFound++; |
| 307 | + | |
| 294 | 308 | if( countExecNotFound == moduleMap.size() ) { |
| 295 | 309 | QLogger::QLog_Error("Cacic Daemon (Timer)", "Não foi possível encontrar nenhum módulo executável!"); |
| 296 | 310 | return QStringList(); |
| 297 | 311 | } |
| 312 | + | |
| 313 | + // pula para o próximo módulo no moduloMap | |
| 314 | + moduloIterator++; | |
| 298 | 315 | continue; |
| 299 | 316 | } |
| 317 | + | |
| 300 | 318 | QString oldMd5 = QString(QCryptographicHash::hash(fileOld->readAll(),QCryptographicHash::Md5).toHex()); |
| 301 | 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 | 325 | fileOld->rename(this->applicationDirPath + "/" + nomeModulo, |
| 303 | 326 | this->applicationDirPath + "/" + nomeModulo + "Old"); |
| 327 | +#endif | |
| 328 | + | |
| 304 | 329 | // Download nova versão do executável |
| 305 | 330 | QList<QMap<QString,QString> >::const_iterator metodosIterator = metodosDownload.constBegin(); |
| 306 | 331 | bool downloadSucess = false; |
| ... | ... | @@ -320,7 +345,7 @@ QStringList CacicTimer::verificarModulos(){ |
| 320 | 345 | |
| 321 | 346 | nomesModulos.append(nomeModulo); |
| 322 | 347 | |
| 323 | - mapIterator++; | |
| 348 | + moduloIterator++; | |
| 324 | 349 | } |
| 325 | 350 | |
| 326 | 351 | return nomesModulos; | ... | ... |