mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-09-21 15:56:10 +08:00
Stop syncing in a hard loop
This commit is contained in:
parent
53a2e7e56b
commit
8c122a57a3
|
@ -29,7 +29,7 @@ class SyncWorker {
|
||||||
this._expirationTimer = null;
|
this._expirationTimer = null;
|
||||||
this._destroyed = false;
|
this._destroyed = false;
|
||||||
|
|
||||||
this.syncNow();
|
this.syncNow({reason: 'Initial'});
|
||||||
|
|
||||||
this._onMessage = this._onMessage.bind(this);
|
this._onMessage = this._onMessage.bind(this);
|
||||||
this._listener = PubsubConnector.observeAccount(account.id).subscribe(this._onMessage)
|
this._listener = PubsubConnector.observeAccount(account.id).subscribe(this._onMessage)
|
||||||
|
@ -54,22 +54,23 @@ class SyncWorker {
|
||||||
case MessageTypes.ACCOUNT_UPDATED:
|
case MessageTypes.ACCOUNT_UPDATED:
|
||||||
this._onAccountUpdated(); break;
|
this._onAccountUpdated(); break;
|
||||||
case MessageTypes.SYNCBACK_REQUESTED:
|
case MessageTypes.SYNCBACK_REQUESTED:
|
||||||
this.syncNow(); break;
|
this.syncNow({reason: 'Syncback Action Queued'}); break;
|
||||||
default:
|
default:
|
||||||
throw new Error(`Invalid message: ${msg}`)
|
throw new Error(`Invalid message: ${msg}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_onAccountUpdated() {
|
_onAccountUpdated() {
|
||||||
console.log("SyncWorker: Detected change to account. Reloading and syncing now.");
|
if (this.isNextSyncScheduled()) {
|
||||||
this._getAccount().then((account) => {
|
this._getAccount().then((account) => {
|
||||||
this._account = account;
|
this._account = account;
|
||||||
this.syncNow();
|
this.syncNow({reason: 'Account Modification'});
|
||||||
})
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_onConnectionIdleUpdate() {
|
_onConnectionIdleUpdate() {
|
||||||
this.syncNow();
|
this.syncNow({reason: 'IMAP IDLE Fired'});
|
||||||
}
|
}
|
||||||
|
|
||||||
_getAccount() {
|
_getAccount() {
|
||||||
|
@ -151,13 +152,15 @@ class SyncWorker {
|
||||||
.then(() => this.syncAllCategories())
|
.then(() => this.syncAllCategories())
|
||||||
}
|
}
|
||||||
|
|
||||||
syncNow() {
|
syncNow({reason} = {}) {
|
||||||
clearTimeout(this._syncTimer);
|
clearTimeout(this._syncTimer);
|
||||||
|
this._syncTimer = null;
|
||||||
|
|
||||||
if (!process.env.SYNC_AFTER_ERRORS && this._account.errored()) {
|
if (!process.env.SYNC_AFTER_ERRORS && this._account.errored()) {
|
||||||
console.log(`SyncWorker: Account ${this._account.emailAddress} is in error state - Skipping sync`)
|
console.log(`SyncWorker: Account ${this._account.emailAddress} (${this._account.id}) is in error state - Skipping sync`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
console.log(`SyncWorker: Account ${this._account.emailAddress} (${this._account.id}) sync started (${reason})`)
|
||||||
|
|
||||||
this.ensureConnection()
|
this.ensureConnection()
|
||||||
.then(() => this._account.update({syncError: null}))
|
.then(() => this._account.update({syncError: null}))
|
||||||
|
@ -171,7 +174,7 @@ class SyncWorker {
|
||||||
}
|
}
|
||||||
|
|
||||||
onSyncError(error) {
|
onSyncError(error) {
|
||||||
console.error(`SyncWorker: Error while syncing account ${this._account.emailAddress} `, error)
|
console.error(`SyncWorker: Error while syncing account ${this._account.emailAddress} (${this._account.id})`, error)
|
||||||
this.closeConnection()
|
this.closeConnection()
|
||||||
|
|
||||||
if (error.source === 'socket') {
|
if (error.source === 'socket') {
|
||||||
|
@ -216,6 +219,10 @@ class SyncWorker {
|
||||||
throw new Error(`SyncWorker.onSyncDidComplete: Unknown afterSync behavior: ${afterSync}. Closing connection`)
|
throw new Error(`SyncWorker.onSyncDidComplete: Unknown afterSync behavior: ${afterSync}. Closing connection`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isNextSyncScheduled() {
|
||||||
|
return this._syncTimer != null;
|
||||||
|
}
|
||||||
|
|
||||||
scheduleNextSync() {
|
scheduleNextSync() {
|
||||||
if (Date.now() - this._startTime > CLAIM_DURATION) {
|
if (Date.now() - this._startTime > CLAIM_DURATION) {
|
||||||
console.log("SyncWorker: - Has held account for more than CLAIM_DURATION, returning to pool.");
|
console.log("SyncWorker: - Has held account for more than CLAIM_DURATION, returning to pool.");
|
||||||
|
@ -232,7 +239,7 @@ class SyncWorker {
|
||||||
const target = this._lastSyncTime + interval;
|
const target = this._lastSyncTime + interval;
|
||||||
console.log(`SyncWorker: Account ${active ? 'active' : 'inactive'}. Next sync scheduled for ${new Date(target).toLocaleString()}`);
|
console.log(`SyncWorker: Account ${active ? 'active' : 'inactive'}. Next sync scheduled for ${new Date(target).toLocaleString()}`);
|
||||||
this._syncTimer = setTimeout(() => {
|
this._syncTimer = setTimeout(() => {
|
||||||
this.syncNow();
|
this.syncNow({reason: 'Scheduled'});
|
||||||
}, target - Date.now());
|
}, target - Date.now());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue