From 174f1aaddebbc3adc237595e3bea7f7c45196129 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Mon, 21 Mar 2022 22:48:39 -0400 Subject: [PATCH] Fix error adding group item before syncing in Zotero 6 Fixes #2440 --- chrome/content/zotero/xpcom/data/item.js | 40 ++++++++++++++++++------ test/tests/itemTest.js | 13 ++++++++ 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/chrome/content/zotero/xpcom/data/item.js b/chrome/content/zotero/xpcom/data/item.js index fa69481255..8442460473 100644 --- a/chrome/content/zotero/xpcom/data/item.js +++ b/chrome/content/zotero/xpcom/data/item.js @@ -1374,15 +1374,37 @@ Zotero.Item.prototype._saveData = Zotero.Promise.coroutine(function* (env) { //} } if (createdByUserID || lastModifiedByUserID) { - let sql = "REPLACE INTO groupItems VALUES (?, ?, ?)"; - yield Zotero.DB.queryAsync( - sql, - [ - itemID, - createdByUserID || null, - lastModifiedByUserID || null - ] - ); + try { + let sql = "REPLACE INTO groupItems VALUES (?, ?, ?)"; + yield Zotero.DB.queryAsync( + sql, + [ + itemID, + createdByUserID || null, + lastModifiedByUserID || null + ] + ); + } + // TODO: Use schema update step to add username to users table if group library + // and no current name + catch (e) { + let username = yield Zotero.DB.valueQueryAsync( + "SELECT value FROM settings WHERE setting='account' AND key='username'" + ); + if (username) { + yield Zotero.Users.setCurrentName(username); + + let sql = "REPLACE INTO groupItems VALUES (?, ?, ?)"; + yield Zotero.DB.queryAsync( + sql, + [ + itemID, + createdByUserID || null, + lastModifiedByUserID || null + ] + ); + } + } } } diff --git a/test/tests/itemTest.js b/test/tests/itemTest.js index 0787383565..e77844266e 100644 --- a/test/tests/itemTest.js +++ b/test/tests/itemTest.js @@ -1750,6 +1750,19 @@ describe("Zotero.Item", function () { ); assert.lengthOf(annotationIDs, 1); }); + + it("should set username as name if not set for library item", async function () { + await Zotero.Users.setCurrentUserID(1); + var username = Zotero.Utilities.randomString(); + await Zotero.Users.setCurrentUsername(username); + await Zotero.DB.queryAsync("DELETE FROM users"); + + var group = await createGroup(); + var libraryID = group.libraryID; + var item = await createDataObject('item', { libraryID }); + + assert.equal(Zotero.Users.getCurrentName(), username); + }); })