mirror of
https://gitlab.com/spaceti-app/integrations/acs/colnod-connector.git
synced 2026-07-12 14:30:50 +02:00
Changing stuff for one table sync
This commit is contained in:
parent
dcd0034110
commit
ab6a200551
@ -8,12 +8,27 @@ int main(int argc, char *argv[])
|
|||||||
QCoreApplication a(argc, argv);
|
QCoreApplication a(argc, argv);
|
||||||
ColnodAPI *api = new ColnodAPI();
|
ColnodAPI *api = new ColnodAPI();
|
||||||
|
|
||||||
api->downloadData(); // this will start downloading data
|
/*api->downloadData(); // this will start downloading data
|
||||||
QObject::connect(api, &ColnodAPI::dataDownloaded, [=](){
|
QObject::connect(api, &ColnodAPI::dataDownloaded, [=](){
|
||||||
qDebug() << "now I have all data";
|
qDebug() << "now I have all data";
|
||||||
api->syncDataToColnod();
|
api->syncDataToColnod();
|
||||||
QCoreApplication::quit();
|
QCoreApplication::quit();
|
||||||
});
|
});*/
|
||||||
|
// bool syncChanged = false;
|
||||||
|
// api->downloadChangedDataFromColnod();
|
||||||
|
// QObject::connect(api, &ColnodAPI::downloadData, [&](){
|
||||||
|
// qDebug() << "Data ready.";
|
||||||
|
// api->syncChangedDataFromColnod();
|
||||||
|
// if (!syncChanged)
|
||||||
|
// {
|
||||||
|
// api->syncChangedDataToColnod();
|
||||||
|
// syncChanged = true;
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
api->loadDataFromColnod();
|
||||||
|
api->loadDataFromDB();
|
||||||
|
|
||||||
|
|
||||||
return a.exec();
|
return a.exec();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,87 +8,103 @@ ColnodAPI::ColnodAPI()
|
|||||||
|
|
||||||
|
|
||||||
// PUBLIC FUNCTIONS
|
// PUBLIC FUNCTIONS
|
||||||
void ColnodAPI::downloadData()
|
//void ColnodAPI::downloadData()
|
||||||
|
//{
|
||||||
|
// Response* resp0 = reqMan->getSubjects();
|
||||||
|
// connect(resp0, &Response::ready, [=](){
|
||||||
|
// dataMan->localSaveSubjects(resp0->getJson());
|
||||||
|
// areDataReady();
|
||||||
|
// resp0->deleteLater();
|
||||||
|
// });
|
||||||
|
|
||||||
|
// Response* resp1 = reqMan->getTokens();
|
||||||
|
// connect(resp1, &Response::ready, [=](){
|
||||||
|
// dataMan->localSaveTokens(resp1->getJson());
|
||||||
|
// areDataReady();
|
||||||
|
// resp1->deleteLater();
|
||||||
|
// });
|
||||||
|
|
||||||
|
// /*
|
||||||
|
// QNetworkReply* reply2 = reqMan->getTokens();
|
||||||
|
// connect(reply2, &QNetworkReply::finished, [=](){
|
||||||
|
// data->saveTokens(reply2->readAll());
|
||||||
|
// });
|
||||||
|
// */
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
void ColnodAPI::loadDataFromColnod()
|
||||||
{
|
{
|
||||||
Response* resp0 = reqMan->getSubjects();
|
loadTokensFromColnod();
|
||||||
connect(resp0, &Response::ready, [=](){
|
loadUpdatedDataFromColnod();
|
||||||
dataMan->localSaveSubjects(resp0->getJson());
|
loadDeletedDataFromColnod();
|
||||||
areDataReady();
|
|
||||||
resp0->deleteLater();
|
|
||||||
});
|
|
||||||
|
|
||||||
Response* resp1 = reqMan->getTokens();
|
|
||||||
connect(resp1, &Response::ready, [=](){
|
|
||||||
dataMan->localSaveTokens(resp1->getJson());
|
|
||||||
areDataReady();
|
|
||||||
resp1->deleteLater();
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
|
||||||
QNetworkReply* reply2 = reqMan->getTokens();
|
|
||||||
connect(reply2, &QNetworkReply::finished, [=](){
|
|
||||||
data->saveTokens(reply2->readAll());
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColnodAPI::downloadChangedDataFromColnod()
|
void ColnodAPI::loadTokensFromColnod()
|
||||||
{
|
{
|
||||||
downloadUpdatedData();
|
Response* resp = reqMan->getTokens();
|
||||||
downloadDeletedData();
|
connect(resp, &Response::ready, [=](){
|
||||||
|
dataMan->fillFullTokensColnod(resp->getJson());
|
||||||
|
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColnodAPI::downloadUpdatedData()
|
void ColnodAPI::loadUpdatedDataFromColnod()
|
||||||
{
|
{
|
||||||
uint64_t lastUpdate = dataMan->getLastUpdate();
|
uint64_t lastUpdate = dataMan->getLastSync();
|
||||||
qDebug() << lastUpdate;
|
|
||||||
Response* resp0 = reqMan->getSubjectsUpdated(lastUpdate);
|
Response* resp0 = reqMan->getSubjectsUpdated(lastUpdate);
|
||||||
connect(resp0, &Response::ready, [=](){
|
connect(resp0, &Response::ready, [=](){
|
||||||
dataMan->localSaveSubjects(resp0->getJson());
|
dataMan->fillSubjectsColnod(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->localSaveTokens(resp1->getJson());
|
dataMan->fillTokensColnod(resp1->getJson());
|
||||||
areChangedDataReady();
|
areChangedDataReady();
|
||||||
resp1->deleteLater();
|
resp1->deleteLater();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColnodAPI::downloadDeletedData()
|
void ColnodAPI::loadDeletedDataFromColnod()
|
||||||
{
|
{
|
||||||
uint64_t lastUpdate = dataMan->getLastUpdate();
|
uint64_t lastUpdate = dataMan->getLastSync();
|
||||||
Response* resp2 = reqMan->getSubjectsDeleted(lastUpdate);
|
Response* resp2 = reqMan->getSubjectsDeleted(lastUpdate);
|
||||||
connect(resp2, &Response::ready, [=](){
|
connect(resp2, &Response::ready, [=](){
|
||||||
dataMan->localSaveSubjectsToDelete(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->localSaveTokensToDelete(resp3->getJson());
|
dataMan->fillTokensToDeleteColnod(resp3->getJson());
|
||||||
areChangedDataReady();
|
areChangedDataReady();
|
||||||
resp3->deleteLater();
|
resp3->deleteLater();
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColnodAPI::syncDataFromColnod()
|
void ColnodAPI::loadDataFromDB()
|
||||||
{
|
{
|
||||||
dataMan->pushTokensToDB();
|
dataMan->fillTokensDB();
|
||||||
dataMan->pushSubjectsToDB();
|
dataMan->fillTokensToDeleteDB();
|
||||||
dataMan->updateLastSync();
|
|
||||||
dataMan->clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColnodAPI::syncChangedDataFromColnod()
|
//void ColnodAPI::syncDataFromColnod()
|
||||||
|
//{
|
||||||
|
// dataMan->pushTokensToDB();
|
||||||
|
// dataMan->pushSubjectsToDB();
|
||||||
|
// dataMan->updateLastSync();
|
||||||
|
// dataMan->clear();
|
||||||
|
//}
|
||||||
|
|
||||||
|
void ColnodAPI::syncDataFromColnod()
|
||||||
{
|
{
|
||||||
syncUpdatedDataFromColnod();
|
syncUpdatedDataFromColnod();
|
||||||
syncDeletedDataFromColnod();
|
syncDeletedDataFromColnod();
|
||||||
dataMan->updateLastSync();
|
//dataMan->updateLastSync();
|
||||||
dataMan->clear();
|
dataMan->clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,22 +121,12 @@ void ColnodAPI::syncDeletedDataFromColnod()
|
|||||||
dataMan->deleteTokensFromDB();
|
dataMan->deleteTokensFromDB();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ColnodAPI::syncDataFromDB()
|
||||||
|
|
||||||
|
|
||||||
void ColnodAPI::syncDataToColnod()
|
|
||||||
{
|
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ColnodAPI::syncChangedDataToColnod()
|
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
dataMan->loadTokensToAdd();
|
dataMan->loadTokensToAdd();
|
||||||
dataMan->loadTokensToDelete();
|
dataMan->loadTokensToDelete();
|
||||||
processDataToColnod();
|
processDataToColnod();
|
||||||
dataMan->clear();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,22 +135,23 @@ void ColnodAPI::processDataToColnod()
|
|||||||
QList<QString>* tokensToDelete = dataMan->getTokensToDelete();
|
QList<QString>* tokensToDelete = dataMan->getTokensToDelete();
|
||||||
if ((*tokensToDelete)[0] != "empty")
|
if ((*tokensToDelete)[0] != "empty")
|
||||||
{
|
{
|
||||||
Response* resp0 = reqMan->deleteTokens(dataMan->getTokensToDelete());
|
Response* resp0 = reqMan->deleteTokens(tokensToDelete);
|
||||||
connect(resp0, &Response::ready, [=](){
|
connect(resp0, &Response::ready, [=](){
|
||||||
areProcessDataReady();
|
isProcessDone();
|
||||||
resp0->deleteLater();
|
resp0->deleteLater();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
QList<QPointer<Token>>* tokens = dataMan->getTokens();
|
QHash<QString, QPointer<Token>>* tokens = dataMan->getTokens();
|
||||||
if ((*tokens)[0]->getName() != "empty")
|
if (!tokens[0].contains("empty"))
|
||||||
{
|
{
|
||||||
Response* resp1 = reqMan->setTokens(dataMan->getTokens());
|
Response* resp1 = reqMan->setTokens(tokens);
|
||||||
connect(resp1, &Response::ready, [=](){
|
connect(resp1, &Response::ready, [=](){
|
||||||
areProcessDataReady();
|
isProcessDone();
|
||||||
resp1->deleteLater();
|
resp1->deleteLater();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
connect(this, &ColnodAPI::dataLoaded, this, &ColnodAPI::syncChangedDataFromColnod);
|
dataMan->clear();
|
||||||
|
connect(this, &ColnodAPI::dataProcessed, this, &ColnodAPI::loadDataFromColnod);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColnodAPI::prepareDatabase()
|
void ColnodAPI::prepareDatabase()
|
||||||
@ -166,10 +173,10 @@ void ColnodAPI::areChangedDataReady()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ColnodAPI::areProcessDataReady()
|
void ColnodAPI::isProcessDone()
|
||||||
{
|
{
|
||||||
if (dataMan->haveProcessData())
|
if (dataMan->haveProcessData())
|
||||||
{
|
{
|
||||||
emit dataLoaded();
|
emit dataProcessed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,14 +14,14 @@ class ColnodAPI : public QObject
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
ColnodAPI();
|
ColnodAPI();
|
||||||
void downloadData();
|
///
|
||||||
|
//void downloadData();
|
||||||
|
//void syncDataFromColnod();
|
||||||
|
//void syncDataToColnod();
|
||||||
|
///
|
||||||
|
|
||||||
void syncDataFromColnod();
|
void syncDataFromColnod();
|
||||||
void syncDataToColnod();
|
void syncDataFromDB();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void syncChangedDataFromColnod();
|
|
||||||
void syncChangedDataToColnod();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -29,24 +29,30 @@ public:
|
|||||||
void prepareDatabase();
|
void prepareDatabase();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void downloadChangedDataFromColnod();
|
void loadDataFromColnod();
|
||||||
|
void loadDataFromDB();
|
||||||
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void dataDownloaded();
|
void dataDownloaded();
|
||||||
void dataLoaded();
|
void dataProcessed();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void downloadUpdatedData();
|
void loadTokensFromColnod();
|
||||||
void downloadDeletedData();
|
void loadUpdatedDataFromColnod();
|
||||||
|
void loadDeletedDataFromColnod();
|
||||||
|
void loadUpdatedDataFromDB();
|
||||||
|
void loadDeletedDataFromDB();
|
||||||
|
|
||||||
|
|
||||||
void syncUpdatedDataFromColnod();
|
void syncUpdatedDataFromColnod();
|
||||||
void syncDeletedDataFromColnod();
|
void syncDeletedDataFromColnod();
|
||||||
void areDataReady();
|
void areDataReady();
|
||||||
void areChangedDataReady();
|
void areChangedDataReady();
|
||||||
void areProcessDataReady();
|
void isProcessDone();
|
||||||
void processDataToColnod();
|
void processDataToColnod();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -164,11 +164,13 @@ void DatabaseManager::createTables()
|
|||||||
"last_update timestamp)");
|
"last_update timestamp)");
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t DatabaseManager::getLastUpdate()
|
uint64_t DatabaseManager::getAndSetLastSync()
|
||||||
{
|
{
|
||||||
query.exec("SELECT EXTRACT(EPOCH FROM (SELECT MIN(last_sync) FROM changes))*1000"); //MAX for using, MIN for testing
|
query.exec("SELECT EXTRACT(EPOCH FROM (SELECT last_sync FROM config))*1000");
|
||||||
query.next();
|
query.next();
|
||||||
return query.value(0).toULongLong();
|
uint64_t temp = query.value(0).toULongLong();
|
||||||
|
query.exec("UPDATE config SET last_sync = NOW()");
|
||||||
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatabaseManager::makeTestingLast_sync()
|
void DatabaseManager::makeTestingLast_sync()
|
||||||
|
|||||||
@ -18,6 +18,8 @@ class DatabaseManager : public QObject
|
|||||||
public:
|
public:
|
||||||
DatabaseManager(QString host, QString dbName, QString user, QString password);
|
DatabaseManager(QString host, QString dbName, QString user, QString password);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void saveSubject(Subject* subject, QString table);
|
void saveSubject(Subject* subject, QString table);
|
||||||
void saveToken(Token* token, QString table);
|
void saveToken(Token* token, QString table);
|
||||||
void saveSubjectAttribute(Subject* subject, QString table);
|
void saveSubjectAttribute(Subject* subject, QString table);
|
||||||
@ -33,7 +35,7 @@ public:
|
|||||||
void createTables();
|
void createTables();
|
||||||
|
|
||||||
bool getOpened() {return opened;}
|
bool getOpened() {return opened;}
|
||||||
uint64_t getLastUpdate();
|
uint64_t getAndSetLastSync();
|
||||||
void updateLastSync();
|
void updateLastSync();
|
||||||
|
|
||||||
QSqlQuery* getTokensToAdd();
|
QSqlQuery* getTokensToAdd();
|
||||||
|
|||||||
@ -3,31 +3,11 @@
|
|||||||
DataManager::DataManager()
|
DataManager::DataManager()
|
||||||
{
|
{
|
||||||
db = new DatabaseManager("192.168.1.94", "deloitte", "postgres", "34rjkciea12");
|
db = new DatabaseManager("192.168.1.94", "deloitte", "postgres", "34rjkciea12");
|
||||||
|
lastSync = db->getAndSetLastSync();
|
||||||
//db = new DatabaseManager("localhost", "deloitte", "postgres", "34rjkciea12");
|
//db = new DatabaseManager("localhost", "deloitte", "postgres", "34rjkciea12");
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataManager::localSaveSubjects(QString response)
|
void DataManager::fillFullTokensColnod(QString response)
|
||||||
{
|
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8());
|
|
||||||
QJsonArray items = doc.object()["items"].toArray();
|
|
||||||
if (items.size() > 0)
|
|
||||||
{
|
|
||||||
for (QJsonValueRef item : items)
|
|
||||||
{
|
|
||||||
auto subject = new Subject();
|
|
||||||
subject->fromJSON(item.toObject());
|
|
||||||
subjects.append(subject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Subject* subject = new Subject;
|
|
||||||
subject->setName("empty");
|
|
||||||
subjects.append(subject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DataManager::localSaveTokens(QString response)
|
|
||||||
{
|
{
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8());
|
||||||
QJsonArray items = doc.object()["items"].toArray();
|
QJsonArray items = doc.object()["items"].toArray();
|
||||||
@ -37,18 +17,68 @@ void DataManager::localSaveTokens(QString response)
|
|||||||
{
|
{
|
||||||
auto token = new Token();
|
auto token = new Token();
|
||||||
token->fromJSON(item.toObject());
|
token->fromJSON(item.toObject());
|
||||||
tokens.append(token);
|
fullTokensColnod.insert(token->idToStringWithoutBraces(), token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Token* token = new Token;
|
auto token = new Token("empty");
|
||||||
token->setName("empty");
|
fullTokensColnod.insert(token->idToStringWithoutBraces(), token);
|
||||||
tokens.append(token);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataManager::localSaveSubjectsToDelete(QString json)
|
void DataManager::fillTokensColnod(QString response)
|
||||||
|
{
|
||||||
|
QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8());
|
||||||
|
QJsonArray items = doc.object()["items"].toArray();
|
||||||
|
if (items.size() > 0)
|
||||||
|
{
|
||||||
|
for (QJsonValueRef item : items)
|
||||||
|
{
|
||||||
|
auto token = new Token();
|
||||||
|
token->fromJSON(item.toObject());
|
||||||
|
tokensColnod.insert(token->idToStringWithoutBraces(), token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto token = new Token("empty");
|
||||||
|
tokensColnod.insert(token->idToStringWithoutBraces(), token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DataManager::fillSubjectsColnod(QString response)
|
||||||
|
{
|
||||||
|
QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8());
|
||||||
|
QJsonArray items = doc.object()["items"].toArray();
|
||||||
|
if (items.size() > 0)
|
||||||
|
{
|
||||||
|
for (QJsonValueRef item : items)
|
||||||
|
{
|
||||||
|
auto subject = new Subject();
|
||||||
|
subject->fromJSON(item.toObject());
|
||||||
|
subjectsColnod.insert(subject->idToStringWithoutBraces(), subject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Subject* subject = new Subject("empty");
|
||||||
|
subjectsColnod.insert(subject->idToStringWithoutBraces(), subject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DataManager::fillTokensDB()
|
||||||
|
{
|
||||||
|
QSqlQuery* query = db->getUpdatedTokens(lastSync);
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void DataManager::fillSubjectsDB()
|
||||||
|
{
|
||||||
|
// Not needed yet
|
||||||
|
}
|
||||||
|
|
||||||
|
void DataManager::fillSubjectsToDeleteColnod(QString json)
|
||||||
{
|
{
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
||||||
QJsonArray items = doc.object()["items"].toArray();
|
QJsonArray items = doc.object()["items"].toArray();
|
||||||
@ -56,16 +86,17 @@ void DataManager::localSaveSubjectsToDelete(QString json)
|
|||||||
{
|
{
|
||||||
for (QJsonValueRef item : items)
|
for (QJsonValueRef item : items)
|
||||||
{
|
{
|
||||||
subjectsToDelete.append(item.toString());
|
subjectsToDeleteColnod.append(item.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
subjectsToDelete.append("empty");
|
subjectsToDeleteColnod.append("empty");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataManager::localSaveTokensToDelete(QString json)
|
void DataManager::fillTokensToDeleteColnod(QString json)
|
||||||
{
|
{
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
||||||
QJsonArray items = doc.object()["items"].toArray();
|
QJsonArray items = doc.object()["items"].toArray();
|
||||||
@ -73,111 +104,117 @@ void DataManager::localSaveTokensToDelete(QString json)
|
|||||||
{
|
{
|
||||||
for (QJsonValueRef item : items)
|
for (QJsonValueRef item : items)
|
||||||
{
|
{
|
||||||
tokensToDelete.append(item.toString());
|
tokensToDeleteColnod.append(item.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tokensToDelete.append("empty");
|
tokensToDeleteColnod.append("empty");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DataManager::fillSubjectsToDeleteDB()
|
||||||
|
{
|
||||||
|
// Not needed yet
|
||||||
|
}
|
||||||
|
|
||||||
|
void DataManager::fillTokensToDeleteDB()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
// get data from db, maybe it's better to get all tokens together then filter deleted
|
||||||
|
}
|
||||||
|
|
||||||
void DataManager::pushSubjectsToDB()
|
void DataManager::pushSubjectsToDB()
|
||||||
{
|
{
|
||||||
if (subjects.size() == 1 && subjects[0]->getName() == "empty")
|
if (subjectsColnod.contains("empty"))
|
||||||
{
|
{
|
||||||
qDebug() << "All subjects are up to date";
|
qDebug() << "All subjects are up to date";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//QSqlDatabase::database().transaction();
|
//QSqlDatabase::database().transaction();
|
||||||
qDebug() << "Subjects in progress...";
|
qDebug() << "Subjects in progress...";
|
||||||
for (auto subject : subjects)
|
for (auto subject : subjectsColnod)
|
||||||
{
|
{
|
||||||
db->saveSubject(subject, "colnod_subject");
|
db->saveSubject(subject, "colnod_subject");
|
||||||
db->saveSubjectAttribute(subject, "colnod_subject_attribute");
|
db->saveSubjectAttribute(subject, "colnod_subject_attribute");
|
||||||
}
|
}
|
||||||
//QSqlDatabase::database().commit();
|
//QSqlDatabase::database().commit();
|
||||||
qDebug() << subjects.size() << " subjects has been updated";
|
qDebug() << subjectsColnod.size() << " subjects has been updated";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataManager::pushTokensToDB()
|
void DataManager::pushTokensToDB()
|
||||||
{
|
{
|
||||||
if (tokens.size() == 1 && tokens[0]->getName() == "empty")
|
if (tokensColnod.contains("empty"))
|
||||||
{
|
{
|
||||||
qDebug() << "All tokens are up to date";
|
qDebug() << "All tokens are up to date";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//QSqlDatabase::database().transaction();
|
//QSqlDatabase::database().transaction();
|
||||||
qDebug() << "Tokens in progress...";
|
qDebug() << "Tokens in progress...";
|
||||||
for (auto token : tokens)
|
for (auto token : tokensColnod)
|
||||||
{
|
{
|
||||||
db->saveToken(token, "colnod_token");
|
db->saveToken(token, "colnod_token");
|
||||||
}
|
}
|
||||||
//QSqlDatabase::database().commit();
|
//QSqlDatabase::database().commit();
|
||||||
qDebug() << tokens.size() << " tokens has been updated";
|
qDebug() << tokensColnod.size() << " tokens has been updated";
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataManager::deleteSubjectsFromDB()
|
void DataManager::deleteSubjectsFromDB()
|
||||||
{
|
{
|
||||||
if (subjectsToDelete.size() == 1 && subjectsToDelete[0] == "empty")
|
if (subjectsToDeleteColnod[0] == "empty")
|
||||||
{
|
{
|
||||||
qDebug() << "No subjects to be deleted";
|
qDebug() << "No subjects to be deleted";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
qDebug() << "Deleted subjects in progress...";
|
qDebug() << "Deleted subjects in progress...";
|
||||||
//QSqlDatabase::database().transaction();
|
//QSqlDatabase::database().transaction();
|
||||||
for (auto subjectId : subjectsToDelete)
|
for (auto subjectId : subjectsToDeleteColnod)
|
||||||
{
|
{
|
||||||
db->deleteItem(subjectId, "colnod_subject");
|
db->deleteItem(subjectId, "colnod_subject");
|
||||||
}
|
}
|
||||||
//QSqlDatabase::database().commit();
|
//QSqlDatabase::database().commit();
|
||||||
qDebug() << subjectsToDelete.size() << "subject has beed deleted";
|
qDebug() << subjectsToDeleteColnod.size() << "subject has beed deleted";
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataManager::deleteTokensFromDB()
|
void DataManager::deleteTokensFromDB()
|
||||||
{
|
{
|
||||||
if (tokensToDelete.size() == 1 && tokensToDelete[0] == "empty")
|
if (tokensToDeleteColnod[0] == "empty")
|
||||||
{
|
{
|
||||||
qDebug() << "No tokens to be deleted";
|
qDebug() << "No tokens to be deleted";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// QSqlDatabase::database().transaction();
|
// QSqlDatabase::database().transaction();
|
||||||
qDebug() << "Deleted tokens in progress...";
|
qDebug() << "Deleted tokens in progress...";
|
||||||
for (auto tokenId : tokensToDelete)
|
for (auto tokenId : tokensToDeleteColnod)
|
||||||
{
|
{
|
||||||
db->deleteItem(tokenId, "colnod_token");
|
db->deleteItem(tokenId, "colnod_token");
|
||||||
}
|
}
|
||||||
//QSqlDatabase::database().commit();
|
//QSqlDatabase::database().commit();
|
||||||
qDebug() << tokensToDelete.size() << "tokens has beed deleted";
|
qDebug() << tokensToDeleteColnod.size() << "tokens has beed deleted";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DataManager::haveData()
|
bool DataManager::haveData()
|
||||||
{
|
{
|
||||||
if ( !subjects.isEmpty() && !tokens.isEmpty() )
|
if ( !subjectsColnod.isEmpty() && !tokensColnod.isEmpty() )
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DataManager::haveChangedData()
|
bool DataManager::haveChangedData()
|
||||||
{
|
{
|
||||||
if ( !subjects.isEmpty() && !tokens.isEmpty() && !subjectsToDelete.isEmpty() && !tokensToDelete.isEmpty() )
|
if ( !subjectsColnod.isEmpty() && !tokensColnod.isEmpty() && !subjectsToDeleteColnod.isEmpty() && !tokensToDeleteColnod.isEmpty() )
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DataManager::haveProcessData()
|
bool DataManager::haveProcessData()
|
||||||
{
|
{
|
||||||
if ( !tokens.isEmpty() && !tokensToDelete.isEmpty())
|
if ( !tokensColnod.isEmpty() && !tokensToDeleteColnod.isEmpty())
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t DataManager::getLastUpdate()
|
|
||||||
{
|
|
||||||
return db->getLastUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
void DataManager::emptyDatabase()
|
void DataManager::emptyDatabase()
|
||||||
{
|
{
|
||||||
db->dropTables();
|
db->dropTables();
|
||||||
@ -186,10 +223,14 @@ void DataManager::emptyDatabase()
|
|||||||
|
|
||||||
void DataManager::clear()
|
void DataManager::clear()
|
||||||
{
|
{
|
||||||
subjects.clear();
|
subjectsColnod.clear();
|
||||||
subjectsToDelete.clear();
|
subjectsToDeleteColnod.clear();
|
||||||
tokens.clear();
|
tokensColnod.clear();
|
||||||
tokensToDelete.clear();
|
tokensToDeleteColnod.clear();
|
||||||
|
subjectsDB.clear();
|
||||||
|
subjectsToDeleteDB.clear();
|
||||||
|
tokensDB.clear();
|
||||||
|
tokensToDeleteDB.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataManager::updateLastSync()
|
void DataManager::updateLastSync()
|
||||||
@ -204,10 +245,10 @@ void DataManager::loadTokensToAdd()
|
|||||||
{
|
{
|
||||||
Token* token = new Token(query->value(0).toString(), query->value(1).toString());
|
Token* token = new Token(query->value(0).toString(), query->value(1).toString());
|
||||||
token->setSubjectId(db->getId(token->getName()));
|
token->setSubjectId(db->getId(token->getName()));
|
||||||
tokens.append(token);
|
tokensDB.insert(token->idToStringWithoutBraces(), token);
|
||||||
}
|
}
|
||||||
if (tokens.isEmpty())
|
if (tokensDB.isEmpty())
|
||||||
tokens.append(new Token("empty"));
|
tokensDB.insert("empty", nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataManager::loadTokensToDelete()
|
void DataManager::loadTokensToDelete()
|
||||||
@ -215,10 +256,10 @@ void DataManager::loadTokensToDelete()
|
|||||||
QSqlQuery* query = db->getTokensToDelete();
|
QSqlQuery* query = db->getTokensToDelete();
|
||||||
while (query->next())
|
while (query->next())
|
||||||
{
|
{
|
||||||
tokensToDelete.append(query->value(0).toString());
|
tokensToDeleteDB.append(query->value(0).toString());
|
||||||
}
|
}
|
||||||
if (tokensToDelete.isEmpty())
|
if (tokensToDeleteDB.isEmpty())
|
||||||
tokensToDelete.append("empty");
|
tokensToDeleteDB.append("empty");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -17,10 +17,18 @@ class DataManager : public QObject
|
|||||||
public:
|
public:
|
||||||
DataManager();
|
DataManager();
|
||||||
|
|
||||||
void localSaveSubjects(QString jsonResponse);
|
void getAndSetLastSync();
|
||||||
void localSaveTokens(QString jsonResponse);
|
void fillFullTokensColnod(QString jsonResponse);
|
||||||
void localSaveSubjectsToDelete(QString jsonResponse);
|
|
||||||
void localSaveTokensToDelete(QString jsonResponse);
|
void fillTokensColnod(QString jsonResponse);
|
||||||
|
void fillSubjectsColnod(QString jsonResponse);
|
||||||
|
void fillSubjectsToDeleteColnod(QString jsonResponse);
|
||||||
|
void fillTokensToDeleteColnod(QString jsonResponse);
|
||||||
|
|
||||||
|
void fillTokensDB();
|
||||||
|
void fillSubjectsDB();
|
||||||
|
void fillSubjectsToDeleteDB();
|
||||||
|
void fillTokensToDeleteDB();
|
||||||
|
|
||||||
void pushSubjectsToDB();
|
void pushSubjectsToDB();
|
||||||
void pushTokensToDB();
|
void pushTokensToDB();
|
||||||
@ -28,7 +36,6 @@ public:
|
|||||||
void deleteTokensFromDB();
|
void deleteTokensFromDB();
|
||||||
|
|
||||||
void updateLastSync();
|
void updateLastSync();
|
||||||
uint64_t getLastUpdate();
|
|
||||||
|
|
||||||
bool haveData();
|
bool haveData();
|
||||||
bool haveChangedData();
|
bool haveChangedData();
|
||||||
@ -40,16 +47,28 @@ public:
|
|||||||
void loadTokensToAdd();
|
void loadTokensToAdd();
|
||||||
void loadTokensToDelete();
|
void loadTokensToDelete();
|
||||||
|
|
||||||
QList<QPointer<Token>>* getTokens() {return &tokens;}
|
QHash<QString, QPointer<Token>>* getTokens() {return &tokensColnod;}
|
||||||
QList<QString>* getTokensToDelete() {return &tokensToDelete;}
|
QList<QString>* getTokensToDelete() {return &tokensToDeleteColnod;}
|
||||||
|
|
||||||
|
const uint64_t &getLastSync() {return lastSync;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DatabaseManager *db = nullptr;
|
DatabaseManager *db = nullptr;
|
||||||
QList<QPointer<Subject>> subjects;
|
|
||||||
QList<QPointer<Token>> tokens;
|
uint64_t lastSync;
|
||||||
QList<QString> subjectsToDelete;
|
|
||||||
QList<QString> tokensToDelete;
|
QHash<QString, QPointer<Subject>> subjectsColnod;
|
||||||
|
QHash<QString, QPointer<Token>> tokensColnod;
|
||||||
|
QHash<QString, QPointer<Token>> fullTokensColnod;
|
||||||
|
QHash<QString, QPointer<Subject>> subjectsDB; // in future
|
||||||
|
QHash<QString, QPointer<Token>> tokensDB;
|
||||||
|
|
||||||
|
|
||||||
|
QList<QString> subjectsToDeleteColnod;
|
||||||
|
QList<QString> tokensToDeleteColnod;
|
||||||
|
QList<QString> subjectsToDeleteDB;
|
||||||
|
QList<QString> tokensToDeleteDB;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DATAMANAGER_H
|
#endif // DATAMANAGER_H
|
||||||
|
|||||||
@ -157,7 +157,7 @@ QByteArray RequestManager::makeTimeStampJson(uint64_t time)
|
|||||||
return doc.toJson();
|
return doc.toJson();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray RequestManager::makeTokensJson(QList<QPointer<Token>>* tokens)
|
QByteArray RequestManager::makeTokensJson(QHash<QString, QPointer<Token> > *tokens)
|
||||||
{
|
{
|
||||||
QJsonObject items;
|
QJsonObject items;
|
||||||
QJsonArray jsonTokens;
|
QJsonArray jsonTokens;
|
||||||
@ -265,7 +265,7 @@ Response* RequestManager::getAccessGroupMembershipDeleted(uint64_t time)
|
|||||||
return postRequestReturnLogic("/AccessManager/getAccessGroupMembershipDeleted", makeTimeStampJson(time));
|
return postRequestReturnLogic("/AccessManager/getAccessGroupMembershipDeleted", makeTimeStampJson(time));
|
||||||
}
|
}
|
||||||
|
|
||||||
Response* RequestManager::setTokens(QList<QPointer<Token>>* tokens)
|
Response* RequestManager::setTokens(QHash<QString, QPointer<Token> > *tokens)
|
||||||
{
|
{
|
||||||
return postRequestReturnLogic("/TokenManager/setTokens", makeTokensJson(tokens));
|
return postRequestReturnLogic("/TokenManager/setTokens", makeTokensJson(tokens));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -49,7 +49,7 @@ public:
|
|||||||
Response* getAccessGroupMembershipUpdated(uint64_t time);
|
Response* getAccessGroupMembershipUpdated(uint64_t time);
|
||||||
Response* getAccessGroupMembershipDeleted(uint64_t time);
|
Response* getAccessGroupMembershipDeleted(uint64_t time);
|
||||||
|
|
||||||
Response* setTokens(QList<QPointer<Token>>* tokens);
|
Response* setTokens(QHash<QString, QPointer<Token>>* tokens);
|
||||||
Response* deleteTokens(QList<QString>* ids);
|
Response* deleteTokens(QList<QString>* ids);
|
||||||
|
|
||||||
Response* login(); //I want it private, but unittest???
|
Response* login(); //I want it private, but unittest???
|
||||||
@ -65,7 +65,7 @@ private:
|
|||||||
QString getLoginHeader(QString username, QString hash);
|
QString getLoginHeader(QString username, QString hash);
|
||||||
|
|
||||||
QByteArray makeTimeStampJson(uint64_t time);
|
QByteArray makeTimeStampJson(uint64_t time);
|
||||||
QByteArray makeTokensJson(QList<QPointer<Token>>* tokens);
|
QByteArray makeTokensJson(QHash<QString, QPointer<Token>>* tokens);
|
||||||
QByteArray makeIdsJson(QList<QString>* ids);
|
QByteArray makeIdsJson(QList<QString>* ids);
|
||||||
Response* getLoginResponse();
|
Response* getLoginResponse();
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,11 @@
|
|||||||
|
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
|
|
||||||
|
Subject::Subject(QString namee)
|
||||||
|
{
|
||||||
|
this->name = namee;
|
||||||
|
}
|
||||||
|
|
||||||
QString Subject::getEmail() const {
|
QString Subject::getEmail() const {
|
||||||
return attributes["email"].toString();
|
return attributes["email"].toString();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,6 +13,8 @@ class Subject : public Entity {
|
|||||||
public:
|
public:
|
||||||
using Entity::Entity;
|
using Entity::Entity;
|
||||||
|
|
||||||
|
Subject(QString name);
|
||||||
|
|
||||||
QString getEmail() const;
|
QString getEmail() const;
|
||||||
|
|
||||||
const QJsonObject &getAttributes() const;
|
const QJsonObject &getAttributes() const;
|
||||||
|
|||||||
@ -212,13 +212,13 @@ void UnitTest::setTokens()
|
|||||||
QJsonObject obj = doc.object();
|
QJsonObject obj = doc.object();
|
||||||
QJsonArray arr = obj["items"].toArray();
|
QJsonArray arr = obj["items"].toArray();
|
||||||
qDebug() << arr;
|
qDebug() << arr;
|
||||||
QList<QPointer<Token>> tokens;
|
QHash<QString, QPointer<Token>> tokens;
|
||||||
for (auto object : arr)
|
for (auto object : arr)
|
||||||
{
|
{
|
||||||
auto token = new Token;
|
auto token = new Token;
|
||||||
token->fromJSON(object.toObject());
|
token->fromJSON(object.toObject());
|
||||||
qDebug() << token;
|
qDebug() << token;
|
||||||
tokens.append(token);
|
tokens.insert(token->idToStringWithoutBraces(), token);
|
||||||
}
|
}
|
||||||
RequestManager* testAccess = new RequestManager();
|
RequestManager* testAccess = new RequestManager();
|
||||||
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
||||||
|
|||||||
@ -43,8 +43,9 @@ void ComplexTest::complexTest()
|
|||||||
|
|
||||||
|
|
||||||
// ADD_TOKENS_CHECK_BEGIN
|
// ADD_TOKENS_CHECK_BEGIN
|
||||||
QList<QPointer<Token>> tokens;
|
QHash<QString, QPointer<Token>> tokens;
|
||||||
tokens.append(getTestToken());
|
auto token = getTestToken();
|
||||||
|
tokens.insert(token->idToStringWithoutBraces(), token);
|
||||||
Response* setTokensResp = reqMan->setTokens(&tokens);
|
Response* setTokensResp = reqMan->setTokens(&tokens);
|
||||||
QSignalSpy setTokensRespSpy(setTokensResp, &Response::ready);
|
QSignalSpy setTokensRespSpy(setTokensResp, &Response::ready);
|
||||||
QCOMPARE(setTokensRespSpy.count(), 0);
|
QCOMPARE(setTokensRespSpy.count(), 0);
|
||||||
@ -112,11 +113,14 @@ void ComplexTest::fullSync()
|
|||||||
|
|
||||||
void ComplexTest::syncLastUpdated()
|
void ComplexTest::syncLastUpdated()
|
||||||
{
|
{
|
||||||
api->downloadChangedDataFromColnod();
|
api->loadDataFromColnod();
|
||||||
QSignalSpy spy(api, &ColnodAPI::dataDownloaded);
|
QSignalSpy spy(api, &ColnodAPI::dataDownloaded);
|
||||||
spy.wait(10000);
|
spy.wait(10000);
|
||||||
api->syncChangedDataFromColnod();
|
api->syncDataFromColnod();
|
||||||
// api->syncChangedDataToColnod();
|
// api->syncChangedDataToColnod();
|
||||||
|
spy.wait(10000);
|
||||||
|
api->syncDataFromColnod();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user