1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-07-03 23:50:33 +02:00
Files
joplin/QtClient/JoplinQtClient/synchronizer.cpp

89 lines
2.3 KiB
C++
Raw Normal View History

2016-12-27 21:25:07 +01:00
#include "synchronizer.h"
#include "models/folder.h"
#include "models/note.h"
using namespace jop;
Synchronizer::Synchronizer(WebApi& api, Database &database) : api_(api), db_(database) {
qDebug() << api_.baseUrl();
connect(&api_, SIGNAL(requestDone(QJsonObject,QString)), this, SLOT(api_requestDone(QJsonObject,QString)));
}
void Synchronizer::start() {
qDebug() << "Starting synchronizer...";
2017-01-02 16:28:03 +01:00
QVector<Change> changes = Change::all();
2017-01-03 19:42:01 +01:00
changes = Change::mergedChanges(changes);
foreach (Change change, changes) {
jop::Table itemType = (jop::Table)change.value("item_type").toInt();
QString itemId = change.value("item_id").toString();
Change::Type type = (Change::Type)change.value("type").toInt();
2017-01-02 16:28:03 +01:00
2017-01-03 19:42:01 +01:00
qDebug() << itemId << itemType << type;
if (itemType == jop::FoldersTable) {
if (type == Change::Create) {
Folder folder;
folder.load(itemId);
QUrlQuery data = valuesToUrlQuery(folder.values());
api_.put("folders/" + folder.id().toString(), QUrlQuery(), data, "putFolder:" + folder.id().toString());
} else if (type == Change::Update) {
Folder folder;
folder.load(itemId);
QStringList mergedFields = change.mergedFields();
QUrlQuery data;
foreach (QString field, mergedFields) {
data.addQueryItem(field, folder.value(field).toString());
}
api_.patch("folders/" + folder.id().toString(), QUrlQuery(), data, "patchFolder:" + folder.id().toString());
} else if (type == Change::Delete) {
api_.del("folders/" + itemId, QUrlQuery(), QUrlQuery(), "deleteFolder:" + itemId);
}
}
2017-01-02 16:28:03 +01:00
}
2017-01-03 19:42:01 +01:00
}
2017-01-02 16:28:03 +01:00
2017-01-03 19:42:01 +01:00
QUrlQuery Synchronizer::valuesToUrlQuery(const QHash<QString, Change::Value>& values) const {
QUrlQuery query;
for (QHash<QString, Change::Value>::const_iterator it = values.begin(); it != values.end(); ++it) {
query.addQueryItem(it.key(), it.value().toString());
}
return query;
2016-12-27 21:25:07 +01:00
}
void Synchronizer::api_requestDone(const QJsonObject& response, const QString& tag) {
2017-01-03 19:42:01 +01:00
qDebug() << "WebApi: done" << tag;
2016-12-27 21:25:07 +01:00
QStringList parts = tag.split(':');
QString action = tag;
QString id = "";
if (parts.size() == 2) {
action = parts[0];
id = parts[1];
}
2017-01-03 19:42:01 +01:00
// TODO: check for error
qDebug() << "Synced folder" << id;
2016-12-27 21:25:07 +01:00
if (action == "putFolder") {
2017-01-03 19:42:01 +01:00
Change::disposeByItemId(id);
}
if (action == "patchFolder") {
Change::disposeByItemId(id);
2016-12-27 21:25:07 +01:00
}
2017-01-03 19:42:01 +01:00
if (action == "deleteFolder") {
Change::disposeByItemId(id);
2016-12-27 21:25:07 +01:00
}
}