Skip to content

Commit

Permalink
Upload modified items after tag rename
Browse files Browse the repository at this point in the history
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 zotero#1205
  • Loading branch information
dstillman committed Apr 1, 2017
1 parent 9637770 commit bb489a4
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 1 deletion.
7 changes: 6 additions & 1 deletion chrome/content/zotero/xpcom/data/tags.js
Expand Up @@ -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
Expand All @@ -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);
})
);
Expand Down
3 changes: 3 additions & 0 deletions test/content/support.js
Expand Up @@ -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':
Expand Down
13 changes: 13 additions & 0 deletions test/tests/tagsTest.js
Expand Up @@ -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;
Expand Down

0 comments on commit bb489a4

Please sign in to comment.