diff --git a/src/app/main.cpp b/src/app/main.cpp index 3f7305e..bbb40c9 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -31,7 +31,7 @@ int main(int argc, char *argv[]) // Log messge Filtering QStringList filters; filters << "qt.*=false"; - filters << "sdk.core.*=true"; + filters << "sdk*=false"; //filters << "*=false"; QLoggingCategory::setFilterRules(filters.join(QStringLiteral("\n"))); diff --git a/src/colnod/colnodapi.cpp b/src/colnod/colnodapi.cpp index a663829..8e464a4 100644 --- a/src/colnod/colnodapi.cpp +++ b/src/colnod/colnodapi.cpp @@ -7,7 +7,7 @@ ColnodAPI::ColnodAPI(serversdk::RequestManager* reqMan, const qint64 &lastSync, :mReqMan(reqMan), mUserName(userName), mPassword(password), mDryMode(dryMode) { mLastSync.set_timestamp(lastSync); - data = std::make_shared(); + mData = std::make_shared(); // ----------------------------------- mReqMan->setIgnoreSsl(true); @@ -35,6 +35,13 @@ void ColnodAPI::downloadData() void ColnodAPI::processData(const std::shared_ptr &data) { + + qInfo(colnod) << tab << "-> DATA PROCESSED TO COLNOD:"; + qInfo(colnod) << tab << tab << data->updatedTokens.size() << "TOKENS UPDATED"; + qInfo(colnod) << tab << tab << data->deletedTokens.size() << "TOKENS DELETED"; + qInfo(colnod) << dash; + + connect(this, &ColnodAPI::partOfDataProcessFinished, this, &ColnodAPI::isDataProcessFinished); if ( !data->updatedTokens.isEmpty() && !mDryMode) { setTokens(data->updatedTokens); @@ -76,7 +83,7 @@ void ColnodAPI::getTokensUpdated(const Timestamp &time) mReqMan->processRequest(request); connect(request.get(), &serversdk::Request::finished, [=](){ saveUpdatedTokens(request->responseData()); - emit partOfDataReady(data); + emit partOfDataReady(mData); }); } @@ -188,13 +195,13 @@ void ColnodAPI::areDataReady() if (++amountData == 4) { qInfo(colnod) << tab << "-> COLNOD DATA:"; - qInfo(colnod) << tab << tab << data->updatedTokens.size() << "TOKENS WERE MODIFIED"; - qInfo(colnod) << tab << tab << data->deletedTokens.size() << "TOKENS MARKED FOR DELETION"; - qInfo(colnod) << tab << tab << data->updatedSubjects.size() << "SUBJECTS WERE MODIFIED"; - qInfo(colnod) << tab << tab << data->deletedSubjects.size() << "SUBJECTS MARKED FOR DELETION"; + qInfo(colnod) << tab << tab << mData->updatedTokens.size() << "TOKENS WERE MODIFIED"; + qInfo(colnod) << tab << tab << mData->deletedTokens.size() << "TOKENS MARKED FOR DELETION"; + qInfo(colnod) << tab << tab << mData->updatedSubjects.size() << "SUBJECTS WERE MODIFIED"; + qInfo(colnod) << tab << tab << mData->deletedSubjects.size() << "SUBJECTS MARKED FOR DELETION"; qInfo(colnod) << dash; - emit downloadDataFinished(data); + emit downloadDataFinished(mData); newData(); } } @@ -202,18 +209,13 @@ void ColnodAPI::areDataReady() void ColnodAPI::isDataProcessFinished() { if (++amountProccessesFinished == 2) { - qInfo(colnod) << tab << "-> DATA PROCESSED TO COLNOD:"; - qInfo(colnod) << tab << tab << data->updatedTokens.size() << "TOKENS UPDATED"; - qInfo(colnod) << tab << tab << data->deletedTokens.size() << "TOKENS DELETED"; - qInfo(colnod) << dash; - emit dataProcessFinished(); } } void ColnodAPI::saveUpdatedTokens(const QByteArray &responseData) { - data->loadTokensFromJson(responseData); + mData->loadTokensFromJson(responseData); } void ColnodAPI::saveDeletedTokens(const QByteArray &responseData) @@ -221,13 +223,13 @@ void ColnodAPI::saveDeletedTokens(const QByteArray &responseData) QJsonDocument doc = QJsonDocument::fromJson(responseData); QJsonArray items = doc.object()["items"].toArray(); for (QJsonValueRef item : items) { - data->deletedTokens.append(item.toString()); + mData->deletedTokens.append(item.toString()); } } void ColnodAPI::saveUpdatedSubjects(const QByteArray &responseData) { - data->loadSubjectsFormJson(responseData); + mData->loadSubjectsFormJson(responseData); } void ColnodAPI::saveDeletedSubjects(const QByteArray &responseData) @@ -235,13 +237,13 @@ void ColnodAPI::saveDeletedSubjects(const QByteArray &responseData) QJsonDocument doc = QJsonDocument::fromJson(responseData); QJsonArray items = doc.object()["items"].toArray(); for (QJsonValueRef item : items) { - data->deletedSubjects.append(item.toString()); + mData->deletedSubjects.append(item.toString()); } } void ColnodAPI::newData() { - data = std::make_shared(); + mData = std::make_shared(); } bool ColnodAPI::checkResponse(const QByteArray &responseData) diff --git a/src/colnod/colnodapi.h b/src/colnod/colnodapi.h index 851a0d8..c239c14 100644 --- a/src/colnod/colnodapi.h +++ b/src/colnod/colnodapi.h @@ -91,7 +91,7 @@ private: Timestamp mLastSync; bool mDryMode = false; - std::shared_ptr data; + std::shared_ptr mData; QString authToken; qint16 amountData = 0; diff --git a/src/colnod/databaseapi.cpp b/src/colnod/databaseapi.cpp index 6dab7e2..cadd378 100644 --- a/src/colnod/databaseapi.cpp +++ b/src/colnod/databaseapi.cpp @@ -1,6 +1,6 @@ #include "databaseapi.h" -Q_LOGGING_CATEGORY(database, "db.api"); +Q_LOGGING_CATEGORY(database, "database.api"); DatabaseAPI::DatabaseAPI(serversdk::DatabaseManager *dbMan, bool dryMode) : mDryMode(dryMode), @@ -129,7 +129,6 @@ void DatabaseAPI::uploadTokens(const QHash> &tok else { query = utils->insertIntoTable(token.get(), "colnod_token"); } - query = mDbMan->executeQuery(query); } } @@ -144,7 +143,6 @@ void DatabaseAPI::uploadSubjects(const QHash> else { query = utils->insertIntoTable(attribute.get(), "colnod_subject_attribute"); } - query = mDbMan->executeQuery(query); } // NOTE: about actions if (exists(subject->id(), "colnod_subject")) { @@ -153,7 +151,6 @@ void DatabaseAPI::uploadSubjects(const QHash> else { query = utils->insertIntoTable(subject.get(), "colnod_subject"); } - query = mDbMan->executeQuery(query); } } @@ -172,13 +169,13 @@ void DatabaseAPI::deleteItems(const QList &ids, const QString &tableNam std::shared_ptr DatabaseAPI::getLastUpdate(const QString &id) { auto query = mDbMan->createQuery(); - query.prepare("SELECT last_update FROM colnod_token WHERE id = :id"); + query.prepare("SELECT * FROM colnod_token WHERE id = :id"); query.bindValue(":id", id); mDbMan->executeQuery(query); - if (query.next()) { - return utils->tableFromQuery(query).at(0); - } - return nullptr; + auto list = utils->tableFromQuery(query); + if (list.isEmpty()) + return nullptr; + return list.at(0); } bool DatabaseAPI::exists(const QString &id, const QString &tableName) diff --git a/src/colnod/subject.cpp b/src/colnod/subject.cpp index 73f4ce7..773e530 100644 --- a/src/colnod/subject.cpp +++ b/src/colnod/subject.cpp @@ -21,6 +21,9 @@ bool Subject::fromJson(const QByteArray &data) attributes.append(newAtr); } QVariantMap variant = qvariant_cast(doc.toVariant()); + auto lastUpdate = variant["lastUpdate"].toLongLong(); + variant["lastUpdate"] = QDateTime::fromMSecsSinceEpoch(lastUpdate); + variant.insert("lastModified", QDateTime::fromMSecsSinceEpoch(lastUpdate)); // Populate this object data bool res = fromVariantMap(variant); diff --git a/src/colnod/syncmanager.cpp b/src/colnod/syncmanager.cpp index a8bac90..c247916 100644 --- a/src/colnod/syncmanager.cpp +++ b/src/colnod/syncmanager.cpp @@ -42,6 +42,10 @@ void SyncManager::run() prepareData(); connect(this, &SyncManager::dataProcessFinished, [=](){ + + qInfo(syncmanager) << "PROCESSING DATA -> FINISHED"; + qInfo(syncmanager) << equals; + updateLastUpdate(syncBegin); connect(this, &SyncManager::syncFinished, [=](){ database->setLastSync(syncBegin); @@ -99,7 +103,7 @@ void SyncManager::prepareData() continue; } auto token = database->getLastUpdate(colnodToken->id()); - if ( !token ) + if ( token ) if (token == colnodToken) alreadySynced.append(colnodToken->id()); } @@ -120,6 +124,12 @@ void SyncManager::prepareData() if (databaseToken > colnodDataToProcess->updatedTokens.value(databaseToken->id())) conflicts.append(databaseToken->id()); } + else { + if (databaseToken->description() != "mobile") { + qWarning(syncmanager) << "Token:" << databaseToken->id() << "doesn't have 'mobile' in description and won't be pushed to Colnod"; + conflicts.append(databaseToken->id()); + } + } } for (const auto &id : conflicts) colnodDataToProcess->updatedTokens.remove(id); @@ -137,15 +147,12 @@ void SyncManager::processData() qInfo(syncmanager) << equals; qInfo(syncmanager) << "PROCESSING DATA -> BEGIN"; qInfo(syncmanager) << dash; - qInfo(syncmanager) << "Push changes to both Colnod ad Database:"; + qInfo(syncmanager) << "Push changes to both Colnod and Database:"; qInfo(syncmanager) << dash; database->processData(colnodDataToProcess); connect(colnod.get(), &ColnodAPI::dataProcessFinished, this, &SyncManager::dataProcessFinished); colnod->processData(databaseDataToProcess); - - qInfo(syncmanager) << "PROCESSING DATA -> FINISHED"; - qInfo(syncmanager) << equals; } void SyncManager::updateLastUpdate(qint64 syncBegin) diff --git a/src/colnod/token.h b/src/colnod/token.h index 0ea30e4..db19737 100644 --- a/src/colnod/token.h +++ b/src/colnod/token.h @@ -43,26 +43,26 @@ public: QByteArray jsonData(const QSet &filters = {}) const override; bool fromJson(const QByteArray &data) override; - friend bool operator<(const Token &lToken, const Token &rToken){ - return lToken.lastModified() < rToken.lastUpdate(); + friend bool operator<(const std::shared_ptr &lToken, const std::shared_ptr &rToken){ + return lToken->lastModified() < rToken->lastUpdate(); } - friend bool operator>(const Token &lToken, const Token &rToken){ - return lToken.lastModified() > rToken.lastUpdate(); + friend bool operator>(const std::shared_ptr &lToken, const std::shared_ptr &rToken){ + return lToken->lastModified() > rToken->lastUpdate(); } - - friend bool operator==(const Token &lToken, const Token &rToken){ - return lToken.id() == rToken.id() && - lToken.name() == rToken.name() && - lToken.description() == rToken.description() && - lToken.lastUpdate() == rToken.lastUpdate() && - lToken.tokenType() == rToken.tokenType() && - lToken.tokenBits() == rToken.tokenBits() && - lToken.tokenData() == rToken.tokenData() && - lToken.timeToLive() == rToken.timeToLive() && - lToken.authErrors() == rToken.authErrors() && - lToken.noValidity() == rToken.noValidity() && - lToken.enabled() == rToken.enabled() && - lToken.subjectId() == rToken.subjectId(); + friend bool operator==(const std::shared_ptr &lToken, const std::shared_ptr &rToken) + { + return lToken->id() == rToken->id() && + lToken->name() == rToken->name() && + lToken->description() == rToken->description() && + lToken->lastUpdate() == rToken->lastUpdate() && + lToken->tokenType() == rToken->tokenType() && + lToken->tokenBits() == rToken->tokenBits() && + lToken->tokenData() == rToken->tokenData() && + lToken->timeToLive() == rToken->timeToLive() && + lToken->authErrors() == rToken->authErrors() && + lToken->noValidity() == rToken->noValidity() && + lToken->enabled() == rToken->enabled() && + lToken->subjectId() == rToken->subjectId(); } void fromSQLRecord(const QSqlQuery& query);