From c867b3bb8550f93ffdb97b555898cf4cce899ac1 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sun, 2 Jul 2017 01:44:22 -0400 Subject: [PATCH] Fix WebSocket reconnect delay Only reset delay generator after regular message, not on connect, because a subscription failure happens after a connect. Also cancel reconnect if auto-sync is disabled during the failure delay. --- .../content/zotero/xpcom/sync/syncStreamer.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/chrome/content/zotero/xpcom/sync/syncStreamer.js b/chrome/content/zotero/xpcom/sync/syncStreamer.js index 93852482e7..1f993ce869 100644 --- a/chrome/content/zotero/xpcom/sync/syncStreamer.js +++ b/chrome/content/zotero/xpcom/sync/syncStreamer.js @@ -52,8 +52,7 @@ Zotero.Sync.Streamer_Module.prototype = { _retry: null, init: Zotero.Promise.coroutine(function* () { - // Connect to the streaming server - if (!Zotero.Prefs.get('sync.autoSync') || !Zotero.Prefs.get('sync.streaming.enabled')) { + if (!this._isEnabled()) { return this.disconnect(); } @@ -71,7 +70,15 @@ Zotero.Sync.Streamer_Module.prototype = { } }), + _isEnabled: function () { + return Zotero.Prefs.get('sync.autoSync') && Zotero.Prefs.get('sync.streaming.enabled'); + }, + _connect: function (url, apiKey) { + if (!this._isEnabled()) { + return; + } + Zotero.debug(`Connecting to streaming server at ${url}`); var window = Cc["@mozilla.org/appshell/appShellService;1"] @@ -83,7 +90,6 @@ Zotero.Sync.Streamer_Module.prototype = { this._socket.onopen = () => { Zotero.debug("WebSocket connection opened"); - this._reconnectGenerator = null; }; this._socket.onerror = event => { @@ -105,18 +111,24 @@ Zotero.Sync.Streamer_Module.prototype = { this._socket.send(data); } else if (data.event == "subscriptionsCreated") { + this._reconnectGenerator = null; + for (let error of data.errors) { Zotero.logError(this._hideAPIKey(JSON.stringify(error))); } } // Library added or removed else if (data.event == 'topicAdded' || data.event == 'topicRemoved') { + this._reconnectGenerator = null; + yield Zotero.Sync.Runner.sync({ background: true }); } // Library modified else if (data.event == 'topicUpdated') { + this._reconnectGenerator = null; + let library = Zotero.URI.getPathLibrary(data.topic); if (library) { // Ignore if skipped library