commit c157e01208eefa4c4539bdd20ea4a2b97b6570e7
parent 1535839eb77d49bc6256e35f70ada3635ecfc677
Author: Adomas Ven <adomas.ven@gmail.com>
Date: Thu, 22 Sep 2016 11:05:30 +0300
Closes #1097. Fixes the feed settings being reuploaded after every refresh (#1098)
Diffstat:
2 files changed, 35 insertions(+), 6 deletions(-)
diff --git a/chrome/content/zotero/xpcom/data/feed.js b/chrome/content/zotero/xpcom/data/feed.js
@@ -290,6 +290,9 @@ Zotero.Feed.prototype._saveData = Zotero.Promise.coroutine(function* (env) {
});
Zotero.Feed.prototype._finalizeSave = Zotero.Promise.coroutine(function* (env) {
+ let syncedDataChanged =
+ ['_feedName', '_feedCleanupAfter', '_feedRefreshInterval'].some((val) => this._changed[val]);
+
yield Zotero.Feed._super.prototype._finalizeSave.apply(this, arguments);
if (!env.isNew && this._previousURL) {
@@ -300,10 +303,12 @@ Zotero.Feed.prototype._finalizeSave = Zotero.Promise.coroutine(function* (env) {
delete syncedFeeds[this._previousURL];
yield Zotero.SyncedSettings.set(Zotero.Libraries.userLibraryID, 'feeds', syncedFeeds);
}
- if (env.isNew || this._previousURL) {
- Zotero.Feeds.register(this);
+ if (syncedDataChanged || env.isNew || this._previousURL) {
+ yield this.storeSyncedSettings();
+ if (env.isNew || this._previousURL) {
+ Zotero.Feeds.register(this);
+ }
}
- yield this.storeSyncedSettings();
this._previousURL = null;
});
diff --git a/test/tests/feedTest.js b/test/tests/feedTest.js
@@ -159,6 +159,24 @@ describe("Zotero.Feed", function() {
assert.notOk(syncedFeeds[oldUrl]);
assert.ok(syncedFeeds[feed.url]);
});
+ it('should update syncedSettings if `name`, `url`, `refreshInterval` or `cleanupAfter` was modified', function* () {
+ let feed = yield createFeed();
+ let syncedSetting = Zotero.SyncedSettings.get(Zotero.Libraries.userLibraryID, 'feeds');
+ yield Zotero.SyncedSettings.set(Zotero.Libraries.userLibraryID, 'feeds', syncedSetting, 0, true);
+
+ feed.name = "New name";
+ yield feed.saveTx();
+ assert.isFalse(Zotero.SyncedSettings.getMetadata(Zotero.Libraries.userLibraryID, 'feeds').synced)
+ });
+ it('should not update syncedSettings if `name`, `url`, `refreshInterval` or `cleanupAfter` were not modified', function* () {
+ let feed = yield createFeed();
+ let syncedSetting = Zotero.SyncedSettings.get(Zotero.Libraries.userLibraryID, 'feeds');
+ yield Zotero.SyncedSettings.set(Zotero.Libraries.userLibraryID, 'feeds', syncedSetting, 0, true);
+
+ feed._set('_feedLastCheck', Zotero.Date.dateToSQL(new Date(), true));
+ yield feed.saveTx();
+ assert.isTrue(Zotero.SyncedSettings.getMetadata(Zotero.Libraries.userLibraryID, 'feeds').synced)
+ });
});
describe("#erase()", function() {
it("should erase a saved feed", function* () {
@@ -271,11 +289,19 @@ describe("Zotero.Feed", function() {
});
describe('#updateFeed()', function() {
- var feed;
+ var feed, scheduleNextFeedCheck;
var feedUrl = getTestDataUrl("feed.rss");
var modifiedFeedUrl = getTestDataUrl("feedModified.rss");
+ before(function() {
+ scheduleNextFeedCheck = sinon.stub(Zotero.Feeds, 'scheduleNextFeedCheck');
+ });
+ after(function() {
+ scheduleNextFeedCheck.restore();
+ });
+
beforeEach(function* (){
+ scheduleNextFeedCheck.reset();
feed = yield createFeed();
feed._feedUrl = feedUrl;
yield feed.updateFeed();
@@ -286,14 +312,12 @@ describe("Zotero.Feed", function() {
});
it('should schedule next feed check', function* () {
- let scheduleNextFeedCheck = sinon.stub(Zotero.Feeds, 'scheduleNextFeedCheck');
let feed = yield createFeed();
feed._feedUrl = feedUrl;
yield feed.updateFeed();
assert.equal(scheduleNextFeedCheck.called, true);
- scheduleNextFeedCheck.restore();
});
it('should add new feed items', function* () {