1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-07-16 00:14:34 +02:00

Handle sync and api state before and after login/logout

This commit is contained in:
Laurent Cozic
2017-01-11 11:14:57 +01:00
parent 5c7581ae1d
commit a1bffbb5e5
17 changed files with 185 additions and 11 deletions

View File

@ -12,6 +12,11 @@ Synchronizer::Synchronizer(Database &database) : db_(database) {
}
void Synchronizer::start() {
if (state_ == Frozen) {
qWarning() << "Cannot start synchronizer while frozen";
return;
}
if (state_ != Idle) {
qWarning() << "Cannot start synchronizer because synchronization already in progress. State: " << state_;
return;
@ -26,6 +31,22 @@ void Synchronizer::setSessionId(const QString &v) {
api_.setSessionId(v);
}
void Synchronizer::abort() {
switchState(Aborting);
}
void Synchronizer::freeze() {
switchState(Frozen);
}
void Synchronizer::unfreeze() {
switchState(Idle);
}
WebApi &Synchronizer::api() {
return api_;
}
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) {
@ -57,6 +78,15 @@ void Synchronizer::checkNextState() {
break;
case Aborting:
switchState(Idle);
break;
case Frozen:
break;
default:
qCritical() << "Synchronizer has invalid state" << state_;
@ -142,11 +172,32 @@ void Synchronizer::switchState(Synchronizer::SynchronizationState state) {
query.addQueryItem("last_id", lastRevId);
api_.get("synchronizer", query, QUrlQuery(), "download:getSynchronizer");
} else if (state == Aborting) {
// =============================================================================================
// ABORTING STATE
// =============================================================================================
uploadsRemaining_ = 0;
api_.abortAll();
checkNextState();
} else if (state == Frozen) {
// =============================================================================================
// FROZEN STATE
// =============================================================================================
}
}
void Synchronizer::api_requestDone(const QJsonObject& response, const QString& tag) {
if (state_ == Frozen) {
qWarning() << "Receiving response while synchronizer is frozen";
return;
}
QStringList parts = tag.split(':');
QString category = parts[0];
QString action = parts[1];
@ -164,7 +215,7 @@ void Synchronizer::api_requestDone(const QJsonObject& response, const QString& t
// HANDLE UPLOAD RESPONSE
// =============================================================================================
if (category == "upload") {
if (state_ == UploadingChanges) {
uploadsRemaining_--;
qDebug() << "Synced folder" << arg1;
@ -191,7 +242,7 @@ void Synchronizer::api_requestDone(const QJsonObject& response, const QString& t
// HANDLE DOWNLOAD RESPONSE
// =============================================================================================
} else if (category == "download") {
} else if (state_ == DownloadingChanges) {
if (action == "getSynchronizer") {
QJsonArray items = response["items"].toArray();
QString maxRevId = "";