From bb56f9ee47351559518bbd4869314dcc0e5babad Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Sat, 14 Jan 2017 12:47:11 -0500 Subject: [PATCH] poll new revision date instead of full sync each time --- src/background.js | 3 +- .../app/settings/settingsSyncController.js | 2 +- src/services/apiService.js | 17 ++++++ src/services/syncService.js | 54 +++++++++++++++---- 4 files changed, 63 insertions(+), 13 deletions(-) diff --git a/src/background.js b/src/background.js index 3cb3a985aa..3e46de5531 100644 --- a/src/background.js +++ b/src/background.js @@ -618,10 +618,11 @@ setInterval(fullSync, 5 * 60 * 1000); // check every 5 minutes var syncInternal = 6 * 60 * 60 * 1000; // 6 hours function fullSync(override) { + override = override || false; syncService.getLastSync(function (lastSync) { var now = new Date(); if (override || !lastSync || (now - lastSync) >= syncInternal) { - syncService.fullSync(function () { }); + syncService.fullSync(override, function () { }); } }); } diff --git a/src/popup/app/settings/settingsSyncController.js b/src/popup/app/settings/settingsSyncController.js index 6bae1a7c44..eb7dc122aa 100644 --- a/src/popup/app/settings/settingsSyncController.js +++ b/src/popup/app/settings/settingsSyncController.js @@ -9,7 +9,7 @@ $scope.sync = function () { $scope.loading = true; - syncService.fullSync(function () { + syncService.fullSync(true, function () { $analytics.eventTrack('Synced Full'); $scope.loading = false; toastr.success(i18nService.syncingComplete); diff --git a/src/services/apiService.js b/src/services/apiService.js index 02799db0a8..efe7011a2f 100644 --- a/src/services/apiService.js +++ b/src/services/apiService.js @@ -46,6 +46,23 @@ function initApiService() { // Account APIs + ApiService.prototype.getAccountRevisionDate = function (success, error) { + var self = this; + this.tokenService.getToken(function (token) { + $.ajax({ + type: 'GET', + url: self.baseUrl + '/accounts/revision-date?access_token=' + token, + dataType: 'json', + success: function (response) { + success(response); + }, + error: function (jqXHR, textStatus, errorThrown) { + handleError(error, jqXHR, textStatus, errorThrown); + } + }); + }); + }; + ApiService.prototype.getProfile = function (success, error) { var self = this; this.tokenService.getToken(function (token) { diff --git a/src/services/syncService.js b/src/services/syncService.js index 9756b5c6ec..f249e49c74 100644 --- a/src/services/syncService.js +++ b/src/services/syncService.js @@ -10,7 +10,7 @@ }; function initSyncService() { - SyncService.prototype.fullSync = function (callback) { + SyncService.prototype.fullSync = function (forceSync, callback) { if (!callback || typeof callback !== 'function') { throw 'callback function required'; } @@ -27,24 +27,56 @@ function initSyncService() { self.userService.getUserId(function (userId) { var now = new Date(); + needsSyncing(self, forceSync, function (needsSync) { + if (!needsSync) { + self.syncCompleted(false); + callback(false); + return; + } - var promises = []; - promises.push(syncVault(userId)); - promises.push(syncSettings(userId)); + var promises = []; + promises.push(syncVault(userId)); + promises.push(syncSettings(userId)); - Q.all(promises).then(function () { - self.setLastSync(now, function () { - self.syncCompleted(true); - callback(true); + Q.all(promises).then(function () { + self.setLastSync(now, function () { + self.syncCompleted(true); + callback(true); + }); + }, function () { + self.syncCompleted(false); + callback(false); }); - }, function () { - self.syncCompleted(false); - callback(false); }); }); }); }; + function needsSyncing(self, forceSync, callback) { + if (!callback || typeof callback !== 'function') { + throw 'callback function required'; + } + + if (forceSync) { + callback(true); + return; + } + + self.getLastSync(function (lastSync) { + var now = new Date(); + + self.apiService.getAccountRevisionDate(function (response) { + var accountRevisionDate = new Date(response); + if (accountRevisionDate <= lastSync) { + callback(false); + return; + } + + callback(true); + }); + }); + } + function syncVault(userId) { var deferred = Q.defer(); var self = this;