commit bb489a45c36148b551763d3b1630ae7e288597f4
parent 9637770c1626cf054764f6aab4dda4cc17f89d1a
Author: Dan Stillman <dstillman@zotero.org>
Date: Sat, 1 Apr 2017 02:54:24 -0400
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
Diffstat:
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
@@ -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
@@ -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
@@ -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;