edit proceessData inn colnod to not using signals inside class

This commit is contained in:
Ondřej Fischer 2019-12-12 15:08:51 +01:00
parent d7b9c15dd6
commit 82d93fd115
7 changed files with 109 additions and 77 deletions

@ -1 +1 @@
Subproject commit 3640c0db5d1e24b314b00cc2b0dd61915080381b Subproject commit 28a61d7c120ad466cc4f661b688b61266b6ab73f

View File

@ -31,7 +31,7 @@ bool ColnodAPI::downloadData(const qint64 &time)
} }
connect(login.get(), &serversdk::Request::finished, this, [=](){ connect(login.get(), &serversdk::Request::finished, this, [=](){
// Get login token // Get login token
if (login->status() != 200) { if (!checkRequest(login)) {
emit downloadDataFinished(nullptr); emit downloadDataFinished(nullptr);
return false; return false;
} }
@ -69,16 +69,16 @@ bool ColnodAPI::downloadData(const qint64 &time)
!data->updatedSubjects.isEmpty() || !data->deletedSubjects.isEmpty()) { !data->updatedSubjects.isEmpty() || !data->deletedSubjects.isEmpty()) {
qInfo(colnod) << dash; qInfo(colnod) << dash;
} }
for (auto token : data->updatedTokens) { for (const auto &token : data->updatedTokens) {
qInfo(colnod) << Message::massageTemplate("Download updated", "token", "colnod", token->name()); qInfo(colnod) << Message::massageTemplate("Download updated", "token", "colnod", token->name());
} }
for (auto id : data->deletedTokens) { for (const auto &id : data->deletedTokens) {
qInfo(colnod) << Message::massageTemplate("Download deleted", "token", "colnod", id); qInfo(colnod) << Message::massageTemplate("Download deleted", "token", "colnod", id);
} }
for (auto subject : data->updatedSubjects) { for (const auto &subject : data->updatedSubjects) {
qInfo(colnod) << Message::massageTemplate("Download updated", "subject", "colnod", subject->name()); qInfo(colnod) << Message::massageTemplate("Download updated", "subject", "colnod", subject->name());
} }
for (auto id : data->deletedSubjects) { for (const auto &id : data->deletedSubjects) {
qInfo(colnod) << Message::massageTemplate("Download deleted", "token", "colnod", id); qInfo(colnod) << Message::massageTemplate("Download deleted", "token", "colnod", id);
} }
if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() || if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() ||
@ -91,7 +91,13 @@ bool ColnodAPI::downloadData(const qint64 &time)
auto tokensRequest = getTokensUpdated(timestamp); auto tokensRequest = getTokensUpdated(timestamp);
connect(tokensRequest.get(), &serversdk::Request::finished, [=](){ connect(tokensRequest.get(), &serversdk::Request::finished, [=](){
if (!checkErrors(tokensRequest)) {
qCritical(colnod) << "Error during call getTokensUpdated endpoint";
emit downloadDataFinished(nullptr);
return;
}
if (!saveUpdatedTokens(data, tokensRequest->responseData())) { if (!saveUpdatedTokens(data, tokensRequest->responseData())) {
qCritical(colnod) << "Error during saving getTokensUpdated";
emit downloadDataFinished(nullptr); emit downloadDataFinished(nullptr);
return; return;
} }
@ -100,7 +106,13 @@ bool ColnodAPI::downloadData(const qint64 &time)
auto deletedTokensRequest = getTokensDeleted(timestamp); auto deletedTokensRequest = getTokensDeleted(timestamp);
connect(deletedTokensRequest.get(), &serversdk::Request::finished, [=](){ connect(deletedTokensRequest.get(), &serversdk::Request::finished, [=](){
if (!checkErrors(deletedTokensRequest)) {
qCritical(colnod) << "Error during call getTokensDeleted endpoint";
emit downloadDataFinished(nullptr);
return;
}
if (!saveDeletedTokens(data, deletedTokensRequest->responseData())) { if (!saveDeletedTokens(data, deletedTokensRequest->responseData())) {
qCritical(colnod) << "Error during saving getTokensDeleted";
emit downloadDataFinished(nullptr); emit downloadDataFinished(nullptr);
return; return;
} }
@ -109,7 +121,13 @@ bool ColnodAPI::downloadData(const qint64 &time)
auto subjectsRequest = getSubjectsUpdated(timestamp); auto subjectsRequest = getSubjectsUpdated(timestamp);
connect(subjectsRequest.get(), &serversdk::Request::finished, [=](){ connect(subjectsRequest.get(), &serversdk::Request::finished, [=](){
if (!checkErrors(subjectsRequest)) {
qCritical(colnod) << "Error during call getSubjectsUpdated endpoint";
emit downloadDataFinished(nullptr);
return;
}
if (!saveUpdatedSubjects(data, subjectsRequest->responseData())) { if (!saveUpdatedSubjects(data, subjectsRequest->responseData())) {
qCritical(colnod) << "Error during saving getSubjectsUpdated";
emit downloadDataFinished(nullptr); emit downloadDataFinished(nullptr);
return; return;
} }
@ -118,7 +136,13 @@ bool ColnodAPI::downloadData(const qint64 &time)
auto deletedSubjectsRequest = getSubjectsDeleted(timestamp); auto deletedSubjectsRequest = getSubjectsDeleted(timestamp);
connect(deletedSubjectsRequest.get(), &serversdk::Request::finished, [=](){ connect(deletedSubjectsRequest.get(), &serversdk::Request::finished, [=](){
if (!checkErrors(deletedSubjectsRequest)) {
qCritical(colnod) << "Error during call getSubjectsDeleted endpoint";
emit downloadDataFinished(nullptr);
return;
}
if (!saveDeletedSubjects(data, deletedSubjectsRequest->responseData())) { if (!saveDeletedSubjects(data, deletedSubjectsRequest->responseData())) {
qCritical(colnod) << "Error during saving getSubjectsDeleted";
emit downloadDataFinished(nullptr); emit downloadDataFinished(nullptr);
return; return;
} }
@ -132,26 +156,66 @@ bool ColnodAPI::downloadData(const qint64 &time)
void ColnodAPI::processData(const std::shared_ptr<Data> &data) void ColnodAPI::processData(const std::shared_ptr<Data> &data)
{ {
auto checkData = [=]() {
int dataCount = data->incrementCounter();
if ( dataCount > 3) {
qCCritical(colnod) << "check data cannnot be higher then 2";
}
Q_ASSERT(dataCount < 3);
if (dataCount == 2) {
qInfo(colnod) << tab << "- push col:" << tab << "tokens [" << data->updatedTokens.size() << ":" << data->deletedTokens.size() << qInfo(colnod) << tab << "- push col:" << tab << "tokens [" << data->updatedTokens.size() << ":" << data->deletedTokens.size() <<
"] [ added/updated : deleted ]"; "] [ added/updated : deleted ]";
connect(this, &ColnodAPI::partOfDataProcessFinished, this, &ColnodAPI::isDataProcessFinished); if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() ||
!data->updatedSubjects.isEmpty() || !data->deletedSubjects.isEmpty()) {
qInfo(colnod) << dash;
}
for (const auto &token : data->updatedTokens) {
qInfo(colnod).noquote() << Message::massageTemplate("Updated", "token", "colnod", token->name());
}
for (const auto &id : data->deletedTokens) {
qInfo(colnod).noquote() << Message::massageTemplate("Deleted", "token", "colnod", id);
}
if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() ||
!data->updatedSubjects.isEmpty() || !data->deletedSubjects.isEmpty()) {
qInfo(colnod) << dash;
}
emit dataProcessFinished(mValid);
}
};
if ( !data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() ) { if ( !data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() ) {
qInfo(colnod) << dash; qInfo(colnod) << dash;
} }
if ( !data->updatedTokens.isEmpty() && !mDryMode ) { if ( !data->updatedTokens.isEmpty() && !mDryMode ) {
setTokens(data->updatedTokens); auto setTokensRequest = setTokens(data->updatedTokens);
} else { connect(setTokensRequest.get(), &serversdk::Request::finished, [=](){
emit partOfDataProcessFinished(); if (!checkErrors(setTokensRequest)) {
data->updatedTokens.clear();
mValid = false;
return;
} }
checkData();
});
} else {
checkData();
}
if ( !data->deletedTokens.isEmpty() && !mDryMode ) { if ( !data->deletedTokens.isEmpty() && !mDryMode ) {
deleteTokens(data->deletedTokens); auto deletedTokensRequest = deleteTokens(data->deletedTokens);
} else { connect(deletedTokensRequest.get(), &serversdk::Request::finished, [=](){
emit partOfDataProcessFinished(); if (!checkErrors(deletedTokensRequest)) {
data->deletedTokens.clear();
mValid = false;
return;
} }
if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty()) { checkData();
qInfo(colnod) << dash; });
} else {
checkData();
} }
} }
@ -213,22 +277,6 @@ std::shared_ptr<serversdk::Request> ColnodAPI::setTokens(const QHash<QString, st
auto request = composeRequest("/TokenManager/setTokens", Token::tokensToColnodJson(tokens)); auto request = composeRequest("/TokenManager/setTokens", Token::tokensToColnodJson(tokens));
request->setUserName(authToken); request->setUserName(authToken);
mReqMan->processRequest(request); mReqMan->processRequest(request);
connect(request.get(), &serversdk::Request::finished, [=](){
if (!checkRequest(request)) {
qCritical(colnod) << "ERROR during calling /TokenManager/setTokens, request unsuccessful. EXIT";
}
if (checkResponse(request->responseData())) {
for (const auto &token : tokens) {
qInfo(colnod).noquote() << Message::massageTemplate("Updated", "token", "colnod", token->name());
}
emit partOfDataProcessFinished();
}
else {
qWarning(colnod) << "Tokens wasn't updated";
mValid = false;
emit partOfDataProcessFinished(false);
}
});
return request; return request;
} }
@ -237,22 +285,6 @@ std::shared_ptr<serversdk::Request> ColnodAPI::deleteTokens(const QList<QString>
auto request = composeRequest("/TokenManager/deleteTokens", Token::idsToJSON(ids)); auto request = composeRequest("/TokenManager/deleteTokens", Token::idsToJSON(ids));
request->setUserName(authToken); request->setUserName(authToken);
mReqMan->processRequest(request); mReqMan->processRequest(request);
connect(request.get(), &serversdk::Request::finished, [=](){
if (!checkRequest(request)) {
qCritical(colnod) << "ERROR during calling /TokenManager/deleteTokens, request unsuccessful. EXIT";
}
if (checkResponse(request->responseData())) {
for (const auto &id : ids) {
qInfo(colnod).noquote() << Message::massageTemplate("Deleted", "token", "colnod", id);
}
emit partOfDataProcessFinished();
}
else {
qWarning(colnod) << "Tokens wasn't deleted";
mValid = false;
emit partOfDataProcessFinished(false);
}
});
return request; return request;
} }
@ -267,6 +299,19 @@ bool ColnodAPI::checkRequest(const std::shared_ptr<serversdk::Request> &request)
return request->status() == 200; return request->status() == 200;
} }
bool ColnodAPI::checkErrors(const std::shared_ptr<serversdk::Request> &request)
{
if (!checkRequest(request)) {
qCWarning(colnod) << "Status is not 200";
return false;
}
if (!checkResponse(request->responseData())) {
qCWarning(colnod) << "Empty response data";
return false;
}
return true;
}
bool ColnodAPI::isValid() bool ColnodAPI::isValid()
{ {
return mValid; return mValid;
@ -292,16 +337,6 @@ void ColnodAPI::setUserName(const QString &userName)
mUserName = userName; mUserName = userName;
} }
void ColnodAPI::isDataProcessFinished(bool success)
{
if (!success) {
mSuccess = false;
}
if (++amountProccessesFinished == 2) {
emit dataProcessFinished(mSuccess);
}
}
bool ColnodAPI::saveUpdatedTokens(const std::shared_ptr<Data>& data, const QByteArray &responseData) bool ColnodAPI::saveUpdatedTokens(const std::shared_ptr<Data>& data, const QByteArray &responseData)
{ {
Q_ASSERT(data); Q_ASSERT(data);

View File

@ -71,16 +71,16 @@ bool DatabaseAPI::processData(const std::shared_ptr<Data> &data)
!data->updatedSubjects.isEmpty() || !data->deletedSubjects.isEmpty()) { !data->updatedSubjects.isEmpty() || !data->deletedSubjects.isEmpty()) {
qInfo(database) << dash; qInfo(database) << dash;
} }
for (auto token : data->updatedTokens) { for (const auto &token : data->updatedTokens) {
qInfo(database) << Message::massageTemplate("Updated", "token", "database", token->name()); qInfo(database) << Message::massageTemplate("Updated", "token", "database", token->name());
} }
for (auto id : data->deletedTokens) { for (const auto &id : data->deletedTokens) {
qInfo(database) << Message::massageTemplate("Deleted", "token", "database", id); qInfo(database) << Message::massageTemplate("Deleted", "token", "database", id);
} }
for (auto subject : data->updatedSubjects) { for (const auto &subject : data->updatedSubjects) {
qInfo(database) << Message::massageTemplate("Updated", "subject", "database", subject->name()); qInfo(database) << Message::massageTemplate("Updated", "subject", "database", subject->name());
} }
for (auto id : data->deletedSubjects) { for (const auto &id : data->deletedSubjects) {
qInfo(database) << Message::massageTemplate("Deleted", "token", "database", id); qInfo(database) << Message::massageTemplate("Deleted", "token", "database", id);
} }
if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() || if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() ||
@ -109,10 +109,10 @@ std::shared_ptr<Data> DatabaseAPI::composeData(const QSqlQuery &updatedQuery, QS
if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty()) { if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty()) {
qInfo(database) << dash; qInfo(database) << dash;
} }
for (auto token : data->updatedTokens) { for (const auto &token : data->updatedTokens) {
qInfo(database) << Message::massageTemplate("Download updated", "token", "database", token->name()); qInfo(database) << Message::massageTemplate("Download updated", "token", "database", token->name());
} }
for (auto id : data->deletedTokens) { for (const auto &id : data->deletedTokens) {
qInfo(database) << Message::massageTemplate("Download deleted", "token", "database", id); qInfo(database) << Message::massageTemplate("Download deleted", "token", "database", id);
} }
if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty()) { if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty()) {

View File

@ -61,7 +61,7 @@ bool SyncManager::startSynchronization()
return; return;
} }
std::unique_ptr<PreparedData> preparedData = prepareDataNew(databaseData, colnodData); std::unique_ptr<PreparedData> preparedData = prepareData(databaseData, colnodData);
if (!preparedData) { if (!preparedData) {
qCritical(syncmanager) << "Not possible to compose data"; qCritical(syncmanager) << "Not possible to compose data";
QCoreApplication::exit(-1); QCoreApplication::exit(-1);
@ -122,7 +122,7 @@ bool SyncManager::startSynchronization()
} }
std::unique_ptr<PreparedData> SyncManager::prepareDataNew(const std::shared_ptr<Data> &databaseData, const std::shared_ptr<Data> &colnodData) std::unique_ptr<PreparedData> SyncManager::prepareData(const std::shared_ptr<Data> &databaseData, const std::shared_ptr<Data> &colnodData)
{ {
auto preparedColnodData = std::make_shared<Data>(); auto preparedColnodData = std::make_shared<Data>();
auto preparedDatabaseData = std::make_shared<Data>(); auto preparedDatabaseData = std::make_shared<Data>();

View File

@ -15,17 +15,14 @@ public:
bool databaseInitialization(); bool databaseInitialization();
bool startSynchronization(); bool startSynchronization();
// New approach
private: private:
/** /**
* @brief Preapre data to be pushed to database and colnod from actual downloaded data * @brief Preapre data to be pushed to database and colnod from actual downloaded data
* @param data from database * @param data from database
* @param data from colnod * @param data from colnod
* @return prepared data to be pushed into colnod and db * @return prepared data to be pushed into colnod and db
*
* @todo rename when removed old aproach
*/ */
std::unique_ptr<PreparedData> prepareDataNew(const std::shared_ptr<Data> &databaseData, const std::shared_ptr<Data> &colnodData); std::unique_ptr<PreparedData> prepareData(const std::shared_ptr<Data> &databaseData, const std::shared_ptr<Data> &colnodData);
private: private:
void initNewToken(const std::shared_ptr<Token>& token); void initNewToken(const std::shared_ptr<Token>& token);

View File

@ -56,7 +56,7 @@ void SyncManagerTest::prepareData_test()
token->setId("id1"); token->setId("id1");
dbData->updatedTokens.insert("id1", token); dbData->updatedTokens.insert("id1", token);
auto newPreparedData = sync.prepareDataNew(dbData, colnodData); auto newPreparedData = sync.prepareData(dbData, colnodData);
QVERIFY(newPreparedData->databaseData->updatedTokens.contains("id1")); QVERIFY(newPreparedData->databaseData->updatedTokens.contains("id1"));
QVERIFY(newPreparedData->databaseData->updatedSubjects.isEmpty()); QVERIFY(newPreparedData->databaseData->updatedSubjects.isEmpty());
QVERIFY(newPreparedData->databaseData->deletedTokens.isEmpty()); QVERIFY(newPreparedData->databaseData->deletedTokens.isEmpty());
@ -99,7 +99,7 @@ void SyncManagerTest::prepareData_tokens()
if ( colnod_dtoken ) if ( colnod_dtoken )
colnodData->deletedTokens.append(colnod_dtoken->id()); colnodData->deletedTokens.append(colnod_dtoken->id());
auto newPreparedData = sync.prepareDataNew(dbData, colnodData); auto newPreparedData = sync.prepareData(dbData, colnodData);
auto testTokens = [=](const QSet<QString> &set, const QString &expectedId) { auto testTokens = [=](const QSet<QString> &set, const QString &expectedId) {