diff --git a/src/colnod/colnodapi.cpp b/src/colnod/colnodapi.cpp index 7946161..dfeab3c 100644 --- a/src/colnod/colnodapi.cpp +++ b/src/colnod/colnodapi.cpp @@ -31,14 +31,14 @@ void ColnodAPI::downloadData(const qint64 &time) return; } AuthToken token; - auto responseData = login->responseData(); - if (responseData.isEmpty()) { + + if (checkResponse(login->responseData())) { qCWarning(colnod) << "empty response data when logging in"; emit downloadDataFinished(nullptr); return; } - token.fromJson(responseData); + token.fromJson(login->responseData()); authToken = token.id(); if (authToken.isEmpty()) { qCCritical(colnod) << "Token uuid is empty"; @@ -52,11 +52,12 @@ void ColnodAPI::downloadData(const qint64 &time) if (!checkRequest(request)) { qWarning(colnod) << "ERROR during calling" << request->url() << ", request unsuccessful"; mValid = false; - emit downloadDataFinished(nullptr); // TODO: think about it, will the other if passed? + emit downloadDataFinished(nullptr); } else if (!checkResponse(request->responseData())) { qWarning(colnod) << "Data from" << request->url() << "are invalid"; mValid = false; + emit downloadDataFinished(nullptr); } }; @@ -99,12 +100,6 @@ void ColnodAPI::downloadData(const qint64 &time) void ColnodAPI::processData(const std::shared_ptr &data) { - for (const auto &token : data->updatedTokens) { - qInfo(colnod).noquote() << Message::massageTemplate("Updating", "token", "colnod", token->name()); - } - for (const auto &id : data->deletedTokens) { - qInfo(colnod).noquote() << Message::massageTemplate("Deleting", "token", "colnod", id); - } if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty()) { qInfo(colnod) << dash; } @@ -188,15 +183,18 @@ std::shared_ptr ColnodAPI::setTokens(const QHashresponseData())) { + + for (const auto &token : tokens) { + qInfo(colnod).noquote() << Message::massageTemplate("Updating", "token", "colnod", token->name()); + } emit partOfDataProcessFinished(); } else { qWarning(colnod) << "Tokens wasn't updated"; mValid = false; - emit partOfDataProcessFinished(); + emit partOfDataProcessFinished(false); } }); return request; @@ -210,15 +208,17 @@ std::shared_ptr ColnodAPI::deleteTokens(const QList connect(request.get(), &serversdk::Request::finished, [=](){ if (!checkRequest(request)) { qCritical(colnod) << "ERROR during calling /TokenManager/deleteTokens, request unsuccessful. EXIT"; - emit error(); // TODO: return nullptr and check it } if (checkResponse(request->responseData())) { + for (const auto &id : ids) { + qInfo(colnod).noquote() << Message::massageTemplate("Deleting", "token", "colnod", id); + } emit partOfDataProcessFinished(); } else { qWarning(colnod) << "Tokens wasn't deleted"; mValid = false; - emit partOfDataProcessFinished(); + emit partOfDataProcessFinished(false); } }); return request; @@ -276,10 +276,13 @@ void ColnodAPI::areDataReady(const std::shared_ptr &data) } } -void ColnodAPI::isDataProcessFinished() +void ColnodAPI::isDataProcessFinished(bool success) { + if (!success) { + mSuccess = false; + } if (++amountProccessesFinished == 2) { - emit dataProcessFinished(); + emit dataProcessFinished(mSuccess); } } diff --git a/src/colnod/colnodapi.h b/src/colnod/colnodapi.h index 7d87e79..5c11a3b 100644 --- a/src/colnod/colnodapi.h +++ b/src/colnod/colnodapi.h @@ -66,7 +66,7 @@ public: private: Q_SLOT void areDataReady(const std::shared_ptr& data); - Q_SLOT void isDataProcessFinished(); + Q_SLOT void isDataProcessFinished(bool success); private: void saveUpdatedTokens(const std::shared_ptr& data, const QByteArray &responseData); @@ -84,8 +84,8 @@ private: signals: void downloadDataFinished(std::shared_ptr = std::shared_ptr()); void partOfDataReady(std::shared_ptr = std::shared_ptr()); - void partOfDataProcessFinished(); - void dataProcessFinished(); + void partOfDataProcessFinished(bool success = true); + void dataProcessFinished(bool success = true); void error(); @@ -97,6 +97,7 @@ private: Timestamp mLastSync; bool mDryMode = false; bool mValid = true; + bool mSuccess = true; QString authToken; qint16 amountData = 0; diff --git a/src/colnod/data.h b/src/colnod/data.h index 868bc03..5ab4d8f 100644 --- a/src/colnod/data.h +++ b/src/colnod/data.h @@ -44,7 +44,7 @@ struct PreparedData public: PreparedData() = default; PreparedData(const std::shared_ptr &database, const std::shared_ptr &colnod) - :databaseData(std::move(database)), colnodData(std::move(colnod)) + :databaseData(database), colnodData(colnod) { } diff --git a/src/colnod/databaseapi.cpp b/src/colnod/databaseapi.cpp index 039b135..3ba87b6 100644 --- a/src/colnod/databaseapi.cpp +++ b/src/colnod/databaseapi.cpp @@ -46,17 +46,23 @@ std::shared_ptr DatabaseAPI::downloadData() } return composeData(updatedQuery, deletedQuery); - // TODO: why emiting signal?? - // this can return Strucutre - //emit downloadDataFinished(composeData(updatedQuery, deletedQuery)); } bool DatabaseAPI::processData(const std::shared_ptr &data) -{ - uploadTokens(data->updatedTokens); - uploadSubjects(data->updatedSubjects); - deleteItems(data->deletedTokens, "colnod_token"); - deleteItems(data->deletedSubjects, "colnod_subject"); +{ + bool res = true; + if (!uploadTokens(data->updatedTokens)) { + res = false; + } + if (uploadSubjects(data->updatedSubjects)) { + res = false; + } + if (deleteItems(data->deletedTokens, "colnod_token")) { + res = false; + } + if (deleteItems(data->deletedSubjects, "colnod_subject")) { + res = false; + } if ( !data->updatedTokens.isEmpty() || !data->updatedSubjects.isEmpty() || !data->deletedTokens.isEmpty() || @@ -70,8 +76,7 @@ bool DatabaseAPI::processData(const std::shared_ptr &data) qInfo(database) << tab << tab << data->deletedSubjects.size() << "SUBJECTS DELETED"; qInfo(database) << dash; - // TODO: add error handling - return true; + return res; } @@ -222,6 +227,7 @@ bool DatabaseAPI::deleteItems(const QList &ids, const QString &tableNam query.bindValue(":now", nowString); if (!executeQuery(query)) { qWarning(database) << "ERROR during marking token as deleted:" << id; + mValid = false; return false; } } @@ -235,7 +241,6 @@ std::shared_ptr DatabaseAPI::getToken(const QString &id) query.bindValue(":id", id); if (!executeQuery(query)) { qCritical(database) << "ERROR during accessing existing tokens. EXIT"; - emit error(); return nullptr; } auto list = utils->tableFromQuery(query); diff --git a/src/colnod/subject.h b/src/colnod/subject.h index 9f17fd0..6287ae4 100644 --- a/src/colnod/subject.h +++ b/src/colnod/subject.h @@ -13,7 +13,6 @@ class SubjectAttribute : public serversdk::DatabaseTable { TABLE_PROPERTY(QString, subjectId, setSubjectId, "") }; - class Subject : public serversdk::DatabaseTable { Q_OBJECT TABLE_PROPERTY(QString, id, setId, QString()) @@ -24,7 +23,6 @@ class Subject : public serversdk::DatabaseTable { TABLE_PROPERTY(QDateTime, lastModified, setLastModified, QDateTime()) TABLE_PROPERTY(bool, deleted, setDeleted, false) - public: Subject() = default; explicit Subject(const QString& name); @@ -32,7 +30,6 @@ public: bool fromJson(const QByteArray &data) override; QList> getAttributes(); - private: QList> attributes; }; diff --git a/src/colnod/syncmanager.cpp b/src/colnod/syncmanager.cpp index 342d1ab..bc6eba8 100644 --- a/src/colnod/syncmanager.cpp +++ b/src/colnod/syncmanager.cpp @@ -60,7 +60,7 @@ bool SyncManager::startSynchronization() // NOW I HAVE DATA FROM DATABASE colnod->downloadData(mlastSync.timestamp()); - connect(colnod.get(), &ColnodAPI::downloadDataFinished, [=](std::shared_ptr colnodData) { + connect(colnod.get(), &ColnodAPI::downloadDataFinished, [=](const std::shared_ptr &colnodData) { if (!colnodData) { qCritical(syncmanager) << "Not possible to get correct data from colnod"; QCoreApplication::exit(-1); @@ -90,7 +90,7 @@ bool SyncManager::startSynchronization() } // data is processed to other sides - connect(colnod.get(), &ColnodAPI::dataProcessFinished, [&](bool success){ + connect(colnod.get(), &ColnodAPI::dataProcessFinished, [&,syncBegin](bool success){ if (!success) { qCritical(syncmanager) << "Not possible to upload data to colnod"; } diff --git a/src/colnod/syncmanager.h b/src/colnod/syncmanager.h index 2bc2f3e..5053dee 100644 --- a/src/colnod/syncmanager.h +++ b/src/colnod/syncmanager.h @@ -31,13 +31,6 @@ private: private: void initNewToken(const std::shared_ptr& token); - void updateLastUpdate(qint64 syncBegin); - -signals: - void syncFinished(); - - void error(); - private: std::shared_ptr colnod; std::shared_ptr database; diff --git a/src/colnod/token.cpp b/src/colnod/token.cpp index 6e0acd0..4346efa 100644 --- a/src/colnod/token.cpp +++ b/src/colnod/token.cpp @@ -45,6 +45,7 @@ QByteArray Token::jsonData(const QSet &filters) const QJsonDocument doc = QJsonDocument::fromVariant(variantMap); return doc.toJson(QJsonDocument::Compact); } + bool Token::fromJson(const QByteArray &data) { QJsonDocument doc = QJsonDocument::fromJson(data); @@ -81,24 +82,3 @@ QByteArray Token::idsToJSON(const QList &ids) doc.setObject(items); return doc.toJson(); } - - -void Token::fromSQLRecord(const QSqlQuery& query) -{ - setId(query.value(0).toString()); - a_authErrors = query.value(1).toInt(); - setDescription(query.value(2).toString()); - setNoValidity(query.value(6).toBool()); - setEnabled(query.value(3).toBool()); - QDateTime date = query.value(4).toDateTime(); - setLastUpdate(date); - setName(query.value(5).toString()); - a_timeToLive = query.value(7).toInt(); - a_tokenBits = query.value(8).toInt(); - a_tokenData = query.value(9).toString(); - a_tokenType = query.value(10).toString(); - a_subjectId = query.value(11).toString(); - date = query.value(12).toDateTime(); - setLastModified(date); - setDeleted(query.value(13).toBool()); -} diff --git a/src/colnod/token.h b/src/colnod/token.h index db19737..f3e4edd 100644 --- a/src/colnod/token.h +++ b/src/colnod/token.h @@ -65,8 +65,6 @@ public: lToken->subjectId() == rToken->subjectId(); } - void fromSQLRecord(const QSqlQuery& query); - static QByteArray tokensToColnodJson(const QHash > &tokens); static QByteArray idsToJSON(const QList &ids);