mirror of
https://gitlab.com/spaceti-app/integrations/acs/colnod-connector.git
synced 2026-07-12 12:00:37 +02:00
fix
This commit is contained in:
parent
14cdb47fd8
commit
bd6b1f4224
@ -1,202 +1,202 @@
|
|||||||
#include "syncmanager.h"
|
#include "syncmanager.h"
|
||||||
|
|
||||||
SyncManager::SyncManager(bool dryMode)
|
SyncManager::SyncManager(bool dryMode)
|
||||||
{
|
{
|
||||||
reqMan = std::make_unique<RequestManager>();
|
reqMan = std::make_unique<RequestManager>();
|
||||||
dataMan = std::make_unique<DataManager>(dryMode);
|
dataMan = std::make_unique<DataManager>(dryMode);
|
||||||
this->dryMode = dryMode;
|
this->dryMode = dryMode;
|
||||||
|
|
||||||
connect(reqMan.get(), &RequestManager::error, this, &SyncManager::error);
|
connect(reqMan.get(), &RequestManager::error, this, &SyncManager::error);
|
||||||
connect(dataMan.get(), &DataManager::error, this, &SyncManager::error);
|
connect(dataMan.get(), &DataManager::error, this, &SyncManager::error);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SyncManager::loadDataFromColnod()
|
void SyncManager::loadDataFromColnod()
|
||||||
{
|
{
|
||||||
loadTokensFromColnod();
|
loadTokensFromColnod();
|
||||||
loadUpdatedDataFromColnod();
|
loadUpdatedDataFromColnod();
|
||||||
loadDeletedDataFromColnod();
|
loadDeletedDataFromColnod();
|
||||||
}
|
}
|
||||||
|
|
||||||
// download all tokens form colnod for comparing with tokens to update from DB
|
// download all tokens form colnod for comparing with tokens to update from DB
|
||||||
void SyncManager::loadTokensFromColnod()
|
void SyncManager::loadTokensFromColnod()
|
||||||
{
|
{
|
||||||
Response* resp = reqMan->getTokens();
|
Response* resp = reqMan->getTokens();
|
||||||
connect(resp, &Response::ready, [=](){
|
connect(resp, &Response::ready, [=](){
|
||||||
dataMan->fillFullTokensColnod(resp->getJson());
|
dataMan->fillFullTokensColnod(resp->getJson());
|
||||||
areChangedDataReady();
|
areChangedDataReady();
|
||||||
resp->deleteLater();
|
resp->deleteLater();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// fill tokens/subjects to update in data manager
|
// fill tokens/subjects to update in data manager
|
||||||
void SyncManager::loadUpdatedDataFromColnod()
|
void SyncManager::loadUpdatedDataFromColnod()
|
||||||
{
|
{
|
||||||
uint64_t lastUpdate = dataMan->getLastSync();
|
uint64_t lastUpdate = dataMan->getLastSync();
|
||||||
Response* resp0 = reqMan->getSubjectsUpdated(lastUpdate);
|
Response* resp0 = reqMan->getSubjectsUpdated(lastUpdate);
|
||||||
connect(resp0, &Response::ready, [=](){
|
connect(resp0, &Response::ready, [=](){
|
||||||
dataMan->fillSubjectsToUpdateColnod(resp0->getJson());
|
dataMan->fillSubjectsToUpdateColnod(resp0->getJson());
|
||||||
areChangedDataReady();
|
areChangedDataReady();
|
||||||
resp0->deleteLater();
|
resp0->deleteLater();
|
||||||
});
|
});
|
||||||
|
|
||||||
Response* resp1 = reqMan->getTokensUpdated(lastUpdate);
|
Response* resp1 = reqMan->getTokensUpdated(lastUpdate);
|
||||||
connect(resp1, &Response::ready, [=](){
|
connect(resp1, &Response::ready, [=](){
|
||||||
dataMan->fillTokensToUpdateColnod(resp1->getJson());
|
dataMan->fillTokensToUpdateColnod(resp1->getJson());
|
||||||
areChangedDataReady();
|
areChangedDataReady();
|
||||||
resp1->deleteLater();
|
resp1->deleteLater();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// fill tokens/subjects to delete in data manager
|
// fill tokens/subjects to delete in data manager
|
||||||
void SyncManager::loadDeletedDataFromColnod()
|
void SyncManager::loadDeletedDataFromColnod()
|
||||||
{
|
{
|
||||||
uint64_t lastUpdate = dataMan->getLastSync();
|
uint64_t lastUpdate = dataMan->getLastSync();
|
||||||
Response* resp2 = reqMan->getSubjectsDeleted(lastUpdate);
|
Response* resp2 = reqMan->getSubjectsDeleted(lastUpdate);
|
||||||
connect(resp2, &Response::ready, [=](){
|
connect(resp2, &Response::ready, [=](){
|
||||||
dataMan->fillSubjectsToDeleteColnod(resp2->getJson());
|
dataMan->fillSubjectsToDeleteColnod(resp2->getJson());
|
||||||
areChangedDataReady();
|
areChangedDataReady();
|
||||||
resp2->deleteLater();
|
resp2->deleteLater();
|
||||||
});
|
});
|
||||||
|
|
||||||
Response* resp3 = reqMan->getTokensDeleted(lastUpdate);
|
Response* resp3 = reqMan->getTokensDeleted(lastUpdate);
|
||||||
connect(resp3, &Response::ready, [=](){
|
connect(resp3, &Response::ready, [=](){
|
||||||
dataMan->fillTokensToDeleteColnod(resp3->getJson());
|
dataMan->fillTokensToDeleteColnod(resp3->getJson());
|
||||||
areChangedDataReady();
|
areChangedDataReady();
|
||||||
resp3->deleteLater();
|
resp3->deleteLater();
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// fill structures in data manager (tokens to updata/to delte)
|
// fill structures in data manager (tokens to updata/to delte)
|
||||||
void SyncManager::loadDataFromDB()
|
void SyncManager::loadDataFromDB()
|
||||||
{
|
{
|
||||||
dataMan->fillTokensToChangeDB();
|
dataMan->fillTokensToChangeDB();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SyncManager::syncDataFromColnodToDB()
|
void SyncManager::syncDataFromColnodToDB()
|
||||||
{
|
{
|
||||||
syncUpdatedDataFromColnodToDB();
|
syncUpdatedDataFromColnodToDB();
|
||||||
if (dataMan->getLastSync() != 0)
|
if (dataMan->getLastSync() != 0)
|
||||||
syncDeletedDataFromColnodToDB();
|
syncDeletedDataFromColnodToDB();
|
||||||
}
|
}
|
||||||
|
|
||||||
// push data from colnod to DB
|
// push data from colnod to DB
|
||||||
void SyncManager::syncUpdatedDataFromColnodToDB()
|
void SyncManager::syncUpdatedDataFromColnodToDB()
|
||||||
{
|
{
|
||||||
dataMan->pushSubjectsToDB();
|
dataMan->pushSubjectsToDB();
|
||||||
dataMan->pushTokensToDB();
|
dataMan->pushTokensToDB();
|
||||||
}
|
}
|
||||||
|
|
||||||
// set deleted tokens from Colnod, delete subject
|
// set deleted tokens from Colnod, delete subject
|
||||||
void SyncManager::syncDeletedDataFromColnodToDB()
|
void SyncManager::syncDeletedDataFromColnodToDB()
|
||||||
{
|
{
|
||||||
dataMan->deleteSubjectsFromDB();
|
dataMan->deleteSubjectsFromDB();
|
||||||
dataMan->setDeletedToTokensFromDB();
|
dataMan->setDeletedToTokensFromDB();
|
||||||
}
|
}
|
||||||
|
|
||||||
// push changes form DB to Colnod
|
// push changes form DB to Colnod
|
||||||
void SyncManager::syncDataFromDBToColnod()
|
void SyncManager::syncDataFromDBToColnod()
|
||||||
{
|
{
|
||||||
|
|
||||||
connect(this, &SyncManager::dataUpdatedToColnod, dataMan.get(), &DataManager::clear);
|
connect(this, &SyncManager::dataUpdatedToColnod, dataMan.get(), &DataManager::clear);
|
||||||
//connect(this, &SyncManager::dataUpdatedToColnod, dataMan.get(), &DataManager::setLastSync);
|
//connect(this, &SyncManager::dataUpdatedToColnod, dataMan.get(), &DataManager::setLastSync);
|
||||||
if (!dryMode)
|
if (!dryMode)
|
||||||
connect(this, &SyncManager::dataUpdatedToColnod, [=](){
|
connect(this, &SyncManager::dataUpdatedToColnod, [=](){
|
||||||
auto resp = reqMan->getTokensUpdated(dataMan->getCurrentSync());
|
auto resp = reqMan->getTokensUpdated(dataMan->getCurrentSync());
|
||||||
connect(resp, &Response::ready, [=](){
|
connect(resp, &Response::ready, [=](){
|
||||||
dataMan->fillTokensToUpdateColnod(resp->getJson());
|
dataMan->fillTokensToUpdateColnod(resp->getJson());
|
||||||
dataMan->setLastUpdate();
|
dataMan->setLastUpdate();
|
||||||
dataMan->clear();
|
dataMan->clear();
|
||||||
dataMan->updateLastSync();
|
dataMan->updateLastSync();
|
||||||
emit syncFinished();
|
emit syncFinished();
|
||||||
resp->deleteLater();
|
resp->deleteLater();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
else
|
else
|
||||||
connect(this, &SyncManager::dataUpdatedToColnod, [=](){
|
connect(this, &SyncManager::dataUpdatedToColnod, [=](){
|
||||||
dataMan->updateLastSync();
|
dataMan->updateLastSync();
|
||||||
emit syncFinished();
|
emit syncFinished();
|
||||||
});
|
});
|
||||||
if (!dataMan->getTokensToUpdateFromDB().contains("empty")){
|
if (!dataMan->getTokensToUpdateFromDB().isEmpty()){
|
||||||
syncUpdatedDataFromDBToColnod();
|
syncUpdatedDataFromDBToColnod();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
updateFinished = true;
|
updateFinished = true;
|
||||||
if (!dataMan->getTokensToDeleteDB().contains("empty")){
|
if (!dataMan->getTokensToDeleteDB().isEmpty()){
|
||||||
syncDeletedDataFromDBToColnod();
|
syncDeletedDataFromDBToColnod();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
deleteFinished = true;
|
deleteFinished = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// add or update tokens to Colnod
|
// add or update tokens to Colnod
|
||||||
void SyncManager::syncUpdatedDataFromDBToColnod()
|
void SyncManager::syncUpdatedDataFromDBToColnod()
|
||||||
{
|
{
|
||||||
dataMan->filterTokensDB();
|
dataMan->filterTokensDB();
|
||||||
auto tokensToUpdate = dataMan->getTokensToUpdateFromDB();
|
auto tokensToUpdate = dataMan->getTokensToUpdateFromDB();
|
||||||
if (dryMode){
|
if (dryMode){
|
||||||
for (const auto &token : tokensToUpdate)
|
for (const auto &token : tokensToUpdate)
|
||||||
qInfo() << "Updating token:" << token->idToStringWithoutBraces() << "to Colnod";
|
qInfo() << "Updating token:" << token->idToStringWithoutBraces() << "to Colnod";
|
||||||
updateFinished = true;
|
updateFinished = true;
|
||||||
areDataUpdatedToColnod();
|
areDataUpdatedToColnod();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Response* resp0 = reqMan->setTokens(tokensToUpdate);
|
Response* resp0 = reqMan->setTokens(tokensToUpdate);
|
||||||
connect(resp0, &Response::ready, [=](){
|
connect(resp0, &Response::ready, [=](){
|
||||||
qInfo() << "Colnod:" << tokensToUpdate.size() << "tokens updated";
|
qInfo() << "Colnod:" << tokensToUpdate.size() << "tokens updated";
|
||||||
for(const auto &token : tokensToUpdate)
|
for(const auto &token : tokensToUpdate)
|
||||||
Logger::logToDb(Logger::makeTokenMsg(token->idToStringWithoutBraces(), "updated", "Colnod"));
|
Logger::logToDb(Logger::makeTokenMsg(token->idToStringWithoutBraces(), "updated", "Colnod"));
|
||||||
updateFinished = true;
|
updateFinished = true;
|
||||||
areDataUpdatedToColnod();
|
areDataUpdatedToColnod();
|
||||||
resp0->deleteLater();
|
resp0->deleteLater();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete tokens in Colnod
|
// delete tokens in Colnod
|
||||||
void SyncManager::syncDeletedDataFromDBToColnod()
|
void SyncManager::syncDeletedDataFromDBToColnod()
|
||||||
{
|
{
|
||||||
auto tokensToDelete = dataMan->getTokensToDeleteDB();
|
auto tokensToDelete = dataMan->getTokensToDeleteDB();
|
||||||
if (dryMode){
|
if (dryMode){
|
||||||
for (const auto &token : tokensToDelete)
|
for (const auto &token : tokensToDelete)
|
||||||
qInfo() << "Deleting token:" << token << "from Colnod";
|
qInfo() << "Deleting token:" << token << "from Colnod";
|
||||||
deleteFinished = true;
|
deleteFinished = true;
|
||||||
areDataUpdatedToColnod();
|
areDataUpdatedToColnod();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Response* resp1 = reqMan->deleteTokens(tokensToDelete);
|
Response* resp1 = reqMan->deleteTokens(tokensToDelete);
|
||||||
connect(resp1, &Response::ready, [=](){
|
connect(resp1, &Response::ready, [=](){
|
||||||
qInfo() << "Colnod:" << tokensToDelete.size() << "tokens deleted";
|
qInfo() << "Colnod:" << tokensToDelete.size() << "tokens deleted";
|
||||||
for (const auto &id : tokensToDelete){
|
for (const auto &id : tokensToDelete){
|
||||||
dataMan->setLastUpdate(id);
|
dataMan->setLastUpdate(id);
|
||||||
Logger::logToDb(Logger::makeTokenMsg(id, "deleted", "Colnod"));
|
Logger::logToDb(Logger::makeTokenMsg(id, "deleted", "Colnod"));
|
||||||
}
|
}
|
||||||
deleteFinished = true;
|
deleteFinished = true;
|
||||||
areDataUpdatedToColnod();
|
areDataUpdatedToColnod();
|
||||||
resp1->deleteLater();
|
resp1->deleteLater();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// For full sync
|
// For full sync
|
||||||
void SyncManager::prepareDatabase()
|
void SyncManager::prepareDatabase()
|
||||||
{
|
{
|
||||||
dataMan->emptyDatabase();
|
dataMan->emptyDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
// emit signal when all data is downloaded from Colnod
|
// emit signal when all data is downloaded from Colnod
|
||||||
void SyncManager::areChangedDataReady()
|
void SyncManager::areChangedDataReady()
|
||||||
{
|
{
|
||||||
if (++dataCounter == 5)
|
if (++dataCounter == 5)
|
||||||
emit dataDownloaded();
|
emit dataDownloaded();
|
||||||
}
|
}
|
||||||
|
|
||||||
// emit signal when writing to Colnod is finised
|
// emit signal when writing to Colnod is finised
|
||||||
void SyncManager::areDataUpdatedToColnod()
|
void SyncManager::areDataUpdatedToColnod()
|
||||||
{
|
{
|
||||||
if (deleteFinished && updateFinished)
|
if (deleteFinished && updateFinished)
|
||||||
{
|
{
|
||||||
emit dataUpdatedToColnod();
|
emit dataUpdatedToColnod();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user