diff --git a/src/colnod/syncmanager.cpp b/src/colnod/syncmanager.cpp index cccecec..7278037 100644 --- a/src/colnod/syncmanager.cpp +++ b/src/colnod/syncmanager.cpp @@ -131,8 +131,46 @@ bool SyncManager::startSynchronization() std::unique_ptr SyncManager::prepareDataNew(const std::shared_ptr &databaseData, const std::shared_ptr &colnodData) { - Q_UNUSED(databaseData); - Q_UNUSED(colnodData); + auto preperedColnodData = std::make_shared(); + auto preperedDatabaseData = std::make_shared(); + + QList conflicts; + QList alreadySynced; + + for (const auto &colnodToken : colnodData->updatedTokens) { + + // not conflict so add to prepered tokens + if (!databaseData->updatedTokens.contains(colnodToken->id())) { + preperedColnodData->updatedTokens.insert(colnodToken->id(), colnodToken); + continue; + } + + // change in colnod is newer + if (databaseData->updatedTokens.value(colnodToken->id()) < colnodToken) { + preperedColnodData->updatedTokens.insert(colnodToken->id(), colnodToken); + } + + // updated in db later + if (databaseData->updatedTokens.value(colnodToken->id()) > colnodToken) { + conflicts.append(colnodToken->id()); + } + } + auto token = database->getToken(colnodToken->id()); + if ( token ) + // alredy synced ( tokens are same ) + if (token == colnodToken) + alreadySynced.append(colnodToken->id()); + } + // remove tokens which should be not updated + for (const auto &id : conflicts) + colnodData->updatedTokens.remove(id); + for (const auto &id : alreadySynced) + colnodData->updatedTokens.remove(id); + + qInfo(syncmanager) << tab << "-> COLNOD DATA - CHANGES:"; + qInfo(syncmanager) << tab << tab << conflicts.size() << "TOKENS WERE ADDED/UPDATED IN DATABASE TOO"; + qInfo(syncmanager) << tab << tab << alreadySynced.size() << "TOKENS WERE ALREADY SYNCED"; + return nullptr; }