forked from ondra/colnod-connector
bugs fix
This commit is contained in:
parent
e5fa284f03
commit
4fe612d11d
@ -31,7 +31,7 @@ int main(int argc, char *argv[])
|
||||
// Log messge Filtering
|
||||
QStringList filters;
|
||||
filters << "qt.*=false";
|
||||
filters << "sdk.core.*=true";
|
||||
filters << "sdk*=false";
|
||||
//filters << "*=false";
|
||||
QLoggingCategory::setFilterRules(filters.join(QStringLiteral("\n")));
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@ ColnodAPI::ColnodAPI(serversdk::RequestManager* reqMan, const qint64 &lastSync,
|
||||
:mReqMan(reqMan), mUserName(userName), mPassword(password), mDryMode(dryMode)
|
||||
{
|
||||
mLastSync.set_timestamp(lastSync);
|
||||
data = std::make_shared<Data>();
|
||||
mData = std::make_shared<Data>();
|
||||
|
||||
// -----------------------------------
|
||||
mReqMan->setIgnoreSsl(true);
|
||||
@ -35,6 +35,13 @@ void ColnodAPI::downloadData()
|
||||
|
||||
void ColnodAPI::processData(const std::shared_ptr<Data> &data)
|
||||
{
|
||||
|
||||
qInfo(colnod) << tab << "-> DATA PROCESSED TO COLNOD:";
|
||||
qInfo(colnod) << tab << tab << data->updatedTokens.size() << "TOKENS UPDATED";
|
||||
qInfo(colnod) << tab << tab << data->deletedTokens.size() << "TOKENS DELETED";
|
||||
qInfo(colnod) << dash;
|
||||
|
||||
|
||||
connect(this, &ColnodAPI::partOfDataProcessFinished, this, &ColnodAPI::isDataProcessFinished);
|
||||
if ( !data->updatedTokens.isEmpty() && !mDryMode) {
|
||||
setTokens(data->updatedTokens);
|
||||
@ -76,7 +83,7 @@ void ColnodAPI::getTokensUpdated(const Timestamp &time)
|
||||
mReqMan->processRequest(request);
|
||||
connect(request.get(), &serversdk::Request::finished, [=](){
|
||||
saveUpdatedTokens(request->responseData());
|
||||
emit partOfDataReady(data);
|
||||
emit partOfDataReady(mData);
|
||||
});
|
||||
}
|
||||
|
||||
@ -188,13 +195,13 @@ void ColnodAPI::areDataReady()
|
||||
if (++amountData == 4) {
|
||||
|
||||
qInfo(colnod) << tab << "-> COLNOD DATA:";
|
||||
qInfo(colnod) << tab << tab << data->updatedTokens.size() << "TOKENS WERE MODIFIED";
|
||||
qInfo(colnod) << tab << tab << data->deletedTokens.size() << "TOKENS MARKED FOR DELETION";
|
||||
qInfo(colnod) << tab << tab << data->updatedSubjects.size() << "SUBJECTS WERE MODIFIED";
|
||||
qInfo(colnod) << tab << tab << data->deletedSubjects.size() << "SUBJECTS MARKED FOR DELETION";
|
||||
qInfo(colnod) << tab << tab << mData->updatedTokens.size() << "TOKENS WERE MODIFIED";
|
||||
qInfo(colnod) << tab << tab << mData->deletedTokens.size() << "TOKENS MARKED FOR DELETION";
|
||||
qInfo(colnod) << tab << tab << mData->updatedSubjects.size() << "SUBJECTS WERE MODIFIED";
|
||||
qInfo(colnod) << tab << tab << mData->deletedSubjects.size() << "SUBJECTS MARKED FOR DELETION";
|
||||
qInfo(colnod) << dash;
|
||||
|
||||
emit downloadDataFinished(data);
|
||||
emit downloadDataFinished(mData);
|
||||
newData();
|
||||
}
|
||||
}
|
||||
@ -202,18 +209,13 @@ void ColnodAPI::areDataReady()
|
||||
void ColnodAPI::isDataProcessFinished()
|
||||
{
|
||||
if (++amountProccessesFinished == 2) {
|
||||
qInfo(colnod) << tab << "-> DATA PROCESSED TO COLNOD:";
|
||||
qInfo(colnod) << tab << tab << data->updatedTokens.size() << "TOKENS UPDATED";
|
||||
qInfo(colnod) << tab << tab << data->deletedTokens.size() << "TOKENS DELETED";
|
||||
qInfo(colnod) << dash;
|
||||
|
||||
emit dataProcessFinished();
|
||||
}
|
||||
}
|
||||
|
||||
void ColnodAPI::saveUpdatedTokens(const QByteArray &responseData)
|
||||
{
|
||||
data->loadTokensFromJson(responseData);
|
||||
mData->loadTokensFromJson(responseData);
|
||||
}
|
||||
|
||||
void ColnodAPI::saveDeletedTokens(const QByteArray &responseData)
|
||||
@ -221,13 +223,13 @@ void ColnodAPI::saveDeletedTokens(const QByteArray &responseData)
|
||||
QJsonDocument doc = QJsonDocument::fromJson(responseData);
|
||||
QJsonArray items = doc.object()["items"].toArray();
|
||||
for (QJsonValueRef item : items) {
|
||||
data->deletedTokens.append(item.toString());
|
||||
mData->deletedTokens.append(item.toString());
|
||||
}
|
||||
}
|
||||
|
||||
void ColnodAPI::saveUpdatedSubjects(const QByteArray &responseData)
|
||||
{
|
||||
data->loadSubjectsFormJson(responseData);
|
||||
mData->loadSubjectsFormJson(responseData);
|
||||
}
|
||||
|
||||
void ColnodAPI::saveDeletedSubjects(const QByteArray &responseData)
|
||||
@ -235,13 +237,13 @@ void ColnodAPI::saveDeletedSubjects(const QByteArray &responseData)
|
||||
QJsonDocument doc = QJsonDocument::fromJson(responseData);
|
||||
QJsonArray items = doc.object()["items"].toArray();
|
||||
for (QJsonValueRef item : items) {
|
||||
data->deletedSubjects.append(item.toString());
|
||||
mData->deletedSubjects.append(item.toString());
|
||||
}
|
||||
}
|
||||
|
||||
void ColnodAPI::newData()
|
||||
{
|
||||
data = std::make_shared<Data>();
|
||||
mData = std::make_shared<Data>();
|
||||
}
|
||||
|
||||
bool ColnodAPI::checkResponse(const QByteArray &responseData)
|
||||
|
||||
@ -91,7 +91,7 @@ private:
|
||||
Timestamp mLastSync;
|
||||
bool mDryMode = false;
|
||||
|
||||
std::shared_ptr<Data> data;
|
||||
std::shared_ptr<Data> mData;
|
||||
|
||||
QString authToken;
|
||||
qint16 amountData = 0;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#include "databaseapi.h"
|
||||
|
||||
Q_LOGGING_CATEGORY(database, "db.api");
|
||||
Q_LOGGING_CATEGORY(database, "database.api");
|
||||
|
||||
DatabaseAPI::DatabaseAPI(serversdk::DatabaseManager *dbMan, bool dryMode)
|
||||
: mDryMode(dryMode),
|
||||
@ -129,7 +129,6 @@ void DatabaseAPI::uploadTokens(const QHash<QString, std::shared_ptr<Token>> &tok
|
||||
else {
|
||||
query = utils->insertIntoTable(token.get(), "colnod_token");
|
||||
}
|
||||
query = mDbMan->executeQuery(query);
|
||||
}
|
||||
}
|
||||
|
||||
@ -144,7 +143,6 @@ void DatabaseAPI::uploadSubjects(const QHash<QString, std::shared_ptr<Subject>>
|
||||
else {
|
||||
query = utils->insertIntoTable(attribute.get(), "colnod_subject_attribute");
|
||||
}
|
||||
query = mDbMan->executeQuery(query);
|
||||
}
|
||||
// NOTE: about actions
|
||||
if (exists(subject->id(), "colnod_subject")) {
|
||||
@ -153,7 +151,6 @@ void DatabaseAPI::uploadSubjects(const QHash<QString, std::shared_ptr<Subject>>
|
||||
else {
|
||||
query = utils->insertIntoTable(subject.get(), "colnod_subject");
|
||||
}
|
||||
query = mDbMan->executeQuery(query);
|
||||
}
|
||||
}
|
||||
|
||||
@ -172,13 +169,13 @@ void DatabaseAPI::deleteItems(const QList<QString> &ids, const QString &tableNam
|
||||
std::shared_ptr<Token> DatabaseAPI::getLastUpdate(const QString &id)
|
||||
{
|
||||
auto query = mDbMan->createQuery();
|
||||
query.prepare("SELECT last_update FROM colnod_token WHERE id = :id");
|
||||
query.prepare("SELECT * FROM colnod_token WHERE id = :id");
|
||||
query.bindValue(":id", id);
|
||||
mDbMan->executeQuery(query);
|
||||
if (query.next()) {
|
||||
return utils->tableFromQuery<Token>(query).at(0);
|
||||
}
|
||||
return nullptr;
|
||||
auto list = utils->tableFromQuery<Token>(query);
|
||||
if (list.isEmpty())
|
||||
return nullptr;
|
||||
return list.at(0);
|
||||
}
|
||||
|
||||
bool DatabaseAPI::exists(const QString &id, const QString &tableName)
|
||||
|
||||
@ -21,6 +21,9 @@ bool Subject::fromJson(const QByteArray &data)
|
||||
attributes.append(newAtr);
|
||||
}
|
||||
QVariantMap variant = qvariant_cast<QVariantMap>(doc.toVariant());
|
||||
auto lastUpdate = variant["lastUpdate"].toLongLong();
|
||||
variant["lastUpdate"] = QDateTime::fromMSecsSinceEpoch(lastUpdate);
|
||||
variant.insert("lastModified", QDateTime::fromMSecsSinceEpoch(lastUpdate));
|
||||
|
||||
// Populate this object data
|
||||
bool res = fromVariantMap(variant);
|
||||
|
||||
@ -42,6 +42,10 @@ void SyncManager::run()
|
||||
prepareData();
|
||||
|
||||
connect(this, &SyncManager::dataProcessFinished, [=](){
|
||||
|
||||
qInfo(syncmanager) << "PROCESSING DATA -> FINISHED";
|
||||
qInfo(syncmanager) << equals;
|
||||
|
||||
updateLastUpdate(syncBegin);
|
||||
connect(this, &SyncManager::syncFinished, [=](){
|
||||
database->setLastSync(syncBegin);
|
||||
@ -99,7 +103,7 @@ void SyncManager::prepareData()
|
||||
continue;
|
||||
}
|
||||
auto token = database->getLastUpdate(colnodToken->id());
|
||||
if ( !token )
|
||||
if ( token )
|
||||
if (token == colnodToken)
|
||||
alreadySynced.append(colnodToken->id());
|
||||
}
|
||||
@ -120,6 +124,12 @@ void SyncManager::prepareData()
|
||||
if (databaseToken > colnodDataToProcess->updatedTokens.value(databaseToken->id()))
|
||||
conflicts.append(databaseToken->id());
|
||||
}
|
||||
else {
|
||||
if (databaseToken->description() != "mobile") {
|
||||
qWarning(syncmanager) << "Token:" << databaseToken->id() << "doesn't have 'mobile' in description and won't be pushed to Colnod";
|
||||
conflicts.append(databaseToken->id());
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const auto &id : conflicts)
|
||||
colnodDataToProcess->updatedTokens.remove(id);
|
||||
@ -137,15 +147,12 @@ void SyncManager::processData()
|
||||
qInfo(syncmanager) << equals;
|
||||
qInfo(syncmanager) << "PROCESSING DATA -> BEGIN";
|
||||
qInfo(syncmanager) << dash;
|
||||
qInfo(syncmanager) << "Push changes to both Colnod ad Database:";
|
||||
qInfo(syncmanager) << "Push changes to both Colnod and Database:";
|
||||
qInfo(syncmanager) << dash;
|
||||
|
||||
database->processData(colnodDataToProcess);
|
||||
connect(colnod.get(), &ColnodAPI::dataProcessFinished, this, &SyncManager::dataProcessFinished);
|
||||
colnod->processData(databaseDataToProcess);
|
||||
|
||||
qInfo(syncmanager) << "PROCESSING DATA -> FINISHED";
|
||||
qInfo(syncmanager) << equals;
|
||||
}
|
||||
|
||||
void SyncManager::updateLastUpdate(qint64 syncBegin)
|
||||
|
||||
@ -43,26 +43,26 @@ public:
|
||||
QByteArray jsonData(const QSet<QString> &filters = {}) const override;
|
||||
bool fromJson(const QByteArray &data) override;
|
||||
|
||||
friend bool operator<(const Token &lToken, const Token &rToken){
|
||||
return lToken.lastModified() < rToken.lastUpdate();
|
||||
friend bool operator<(const std::shared_ptr<Token> &lToken, const std::shared_ptr<Token> &rToken){
|
||||
return lToken->lastModified() < rToken->lastUpdate();
|
||||
}
|
||||
friend bool operator>(const Token &lToken, const Token &rToken){
|
||||
return lToken.lastModified() > rToken.lastUpdate();
|
||||
friend bool operator>(const std::shared_ptr<Token> &lToken, const std::shared_ptr<Token> &rToken){
|
||||
return lToken->lastModified() > rToken->lastUpdate();
|
||||
}
|
||||
|
||||
friend bool operator==(const Token &lToken, const Token &rToken){
|
||||
return lToken.id() == rToken.id() &&
|
||||
lToken.name() == rToken.name() &&
|
||||
lToken.description() == rToken.description() &&
|
||||
lToken.lastUpdate() == rToken.lastUpdate() &&
|
||||
lToken.tokenType() == rToken.tokenType() &&
|
||||
lToken.tokenBits() == rToken.tokenBits() &&
|
||||
lToken.tokenData() == rToken.tokenData() &&
|
||||
lToken.timeToLive() == rToken.timeToLive() &&
|
||||
lToken.authErrors() == rToken.authErrors() &&
|
||||
lToken.noValidity() == rToken.noValidity() &&
|
||||
lToken.enabled() == rToken.enabled() &&
|
||||
lToken.subjectId() == rToken.subjectId();
|
||||
friend bool operator==(const std::shared_ptr<Token> &lToken, const std::shared_ptr<Token> &rToken)
|
||||
{
|
||||
return lToken->id() == rToken->id() &&
|
||||
lToken->name() == rToken->name() &&
|
||||
lToken->description() == rToken->description() &&
|
||||
lToken->lastUpdate() == rToken->lastUpdate() &&
|
||||
lToken->tokenType() == rToken->tokenType() &&
|
||||
lToken->tokenBits() == rToken->tokenBits() &&
|
||||
lToken->tokenData() == rToken->tokenData() &&
|
||||
lToken->timeToLive() == rToken->timeToLive() &&
|
||||
lToken->authErrors() == rToken->authErrors() &&
|
||||
lToken->noValidity() == rToken->noValidity() &&
|
||||
lToken->enabled() == rToken->enabled() &&
|
||||
lToken->subjectId() == rToken->subjectId();
|
||||
}
|
||||
|
||||
void fromSQLRecord(const QSqlQuery& query);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user