You've already forked joplin
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:
@ -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 = "";
|
||||
|
Reference in New Issue
Block a user