From bb489a45c36148b551763d3b1630ae7e288597f4 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sat, 1 Apr 2017 02:54:24 -0400 Subject: [PATCH] Upload modified items after tag rename The web library will probably still display the old tag in addition to the new one, at least until browser restart. We'll have to deal with that separately. Closes #1205 --- chrome/content/zotero/xpcom/data/tags.js | 7 ++++++- test/content/support.js | 3 +++ test/tests/tagsTest.js | 13 +++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/chrome/content/zotero/xpcom/data/tags.js b/chrome/content/zotero/xpcom/data/tags.js index 59db23a3d3..55250db054 100644 --- a/chrome/content/zotero/xpcom/data/tags.js +++ b/chrome/content/zotero/xpcom/data/tags.js @@ -235,6 +235,9 @@ Zotero.Tags = new function() { } var oldTagID = this.getID(oldName); + if (!oldTagID) { + throw new Error(`Tag '${oldName}' not found`); + } // We need to know if the old tag has a color assigned so that // we can assign it to the new name @@ -255,10 +258,12 @@ Zotero.Tags = new function() { + 'WHERE tagID=? AND itemID IN (' + placeholders + ')'; yield Zotero.DB.queryAsync(sql, [newTagID, oldTagID].concat(chunk)); - sql = 'UPDATE items SET clientDateModified=? ' + sql = 'UPDATE items SET clientDateModified=?, synced=0 ' + 'WHERE itemID IN (' + placeholders + ')' yield Zotero.DB.queryAsync(sql, [Zotero.DB.transactionDateTime].concat(chunk)); + chunk.forEach(id => Zotero.Items.get(id).updateSynced(false, true)); + yield Zotero.Items.reload(oldItemIDs, ['tags'], true); }) ); diff --git a/test/content/support.js b/test/content/support.js index 9f6f5dd408..05fddf8c86 100644 --- a/test/content/support.js +++ b/test/content/support.js @@ -414,6 +414,9 @@ function createUnsavedDataObject(objectType, params = {}) { if (params.collections !== undefined) { obj.setCollections(params.collections); } + if (params.tags !== undefined) { + obj.setTags(params.tags); + } break; case 'collection': diff --git a/test/tests/tagsTest.js b/test/tests/tagsTest.js index 46d7c340eb..1bffdf6706 100644 --- a/test/tests/tagsTest.js +++ b/test/tests/tagsTest.js @@ -25,6 +25,19 @@ describe("Zotero.Tags", function () { }) }) + describe("#rename()", function () { + it("should mark items as changed", function* () { + var item1 = yield createDataObject('item', { tags: [{ tag: "A" }], synced: true }); + var item2 = yield createDataObject('item', { tags: [{ tag: "A" }, { tag: "B" }], synced: true }); + var item3 = yield createDataObject('item', { tags: [{ tag: "B" }, { tag: "C" }], synced: true }); + + yield Zotero.Tags.rename(item1.libraryID, "A", "D"); + assert.isFalse(item1.synced); + assert.isFalse(item2.synced); + assert.isTrue(item3.synced); + }); + }); + describe("#removeFromLibrary()", function () { it("should reload tags of associated items", function* () { var libraryID = Zotero.Libraries.userLibraryID;