From 03242e89846fe88e1c111a302793335bcf6c682a Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sun, 5 Jul 2020 06:20:01 -0400 Subject: [PATCH] fx-compat: DB.executeTransaction() no longer takes generator functions --- chrome/content/zotero/bindings/relatedbox.xml | 12 +-- .../containers/tagSelectorContainer.jsx | 4 +- .../preferences/preferences_advanced.js | 10 +- .../zotero/preferences/preferences_sync.jsx | 4 +- chrome/content/zotero/xpcom/attachments.js | 36 ++++---- .../content/zotero/xpcom/data/dataObject.js | 12 +-- .../content/zotero/xpcom/data/dataObjects.js | 6 +- chrome/content/zotero/xpcom/data/feed.js | 4 +- chrome/content/zotero/xpcom/data/feeds.js | 4 +- chrome/content/zotero/xpcom/data/items.js | 31 +++---- chrome/content/zotero/xpcom/data/library.js | 12 +-- chrome/content/zotero/xpcom/data/tags.js | 28 +++--- chrome/content/zotero/xpcom/fulltext.js | 8 +- chrome/content/zotero/xpcom/proxy.js | 16 ++-- chrome/content/zotero/xpcom/schema.js | 28 +++--- .../zotero/xpcom/storage/storageLocal.js | 8 +- chrome/content/zotero/xpcom/storage/webdav.js | 2 +- chrome/content/zotero/xpcom/storage/zfs.js | 16 ++-- .../content/zotero/xpcom/sync/syncEngine.js | 48 +++++----- .../zotero/xpcom/sync/syncEventListeners.js | 6 +- .../zotero/xpcom/sync/syncFullTextEngine.js | 8 +- chrome/content/zotero/xpcom/sync/syncLocal.js | 26 +++--- .../content/zotero/xpcom/sync/syncRunner.js | 14 +-- .../xpcom/translation/translate_item.js | 6 +- chrome/content/zotero/xpcom/zotero.js | 8 +- chrome/content/zotero/zoteroPane.js | 16 ++-- test/content/support.js | 4 +- test/tests/collectionTreeTest.js | 6 +- test/tests/creatorsTest.js | 4 +- test/tests/dataObjectUtilitiesTest.js | 6 +- test/tests/dataObjectsTest.js | 10 +- test/tests/dbTest.js | 50 +++++----- test/tests/groupsTest.js | 2 +- test/tests/itemPaneTest.js | 24 ++--- test/tests/itemTest.js | 6 +- test/tests/itemTreeTest.js | 28 +++--- test/tests/notifierTest.js | 6 +- test/tests/relationsTest.js | 8 +- test/tests/tagSelectorTest.js | 16 ++-- test/tests/tagsTest.js | 4 +- test/tests/translateTest.js | 92 +++++++++---------- 41 files changed, 319 insertions(+), 320 deletions(-) diff --git a/chrome/content/zotero/bindings/relatedbox.xml b/chrome/content/zotero/bindings/relatedbox.xml index a58399d35f..aa080d51fc 100644 --- a/chrome/content/zotero/bindings/relatedbox.xml +++ b/chrome/content/zotero/bindings/relatedbox.xml @@ -223,15 +223,15 @@ ps.alert(null, "", "You cannot relate items in different libraries."); return; } - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let relItem of relItems) { if (this.item.addRelatedItem(relItem)) { - yield this.item.save({ + await this.item.save({ skipDateModifiedUpdate: true }); } if (relItem.addRelatedItem(this.item)) { - yield relItem.save({ + await relItem.save({ skipDateModifiedUpdate: true }); } @@ -246,14 +246,14 @@ return Zotero.spawn(function* () { var item = yield Zotero.Items.getAsync(id); if (item) { - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { if (this.item.removeRelatedItem(item)) { - yield this.item.save({ + await this.item.save({ skipDateModifiedUpdate: true }); } if (item.removeRelatedItem(this.item)) { - yield item.save({ + await item.save({ skipDateModifiedUpdate: true }); } diff --git a/chrome/content/zotero/containers/tagSelectorContainer.jsx b/chrome/content/zotero/containers/tagSelectorContainer.jsx index 48c3d76647..3b3c77aec9 100644 --- a/chrome/content/zotero/containers/tagSelectorContainer.jsx +++ b/chrome/content/zotero/containers/tagSelectorContainer.jsx @@ -576,7 +576,7 @@ Zotero.TagSelector = class TagSelectorContainer extends React.PureComponent { // Remove tags on Cmd-drag/Shift-drag var remove = (Zotero.isMac && event.metaKey) || (!Zotero.isMac && event.shiftKey); - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { ids = ids.split(','); var items = Zotero.Items.get(ids); var value = elem.textContent; @@ -589,7 +589,7 @@ Zotero.TagSelector = class TagSelectorContainer extends React.PureComponent { else { item.addTag(value); } - yield item.save(); + await item.save(); } }.bind(this)); } diff --git a/chrome/content/zotero/preferences/preferences_advanced.js b/chrome/content/zotero/preferences/preferences_advanced.js index 4d4e949a16..53767cd9d7 100644 --- a/chrome/content/zotero/preferences/preferences_advanced.js +++ b/chrome/content/zotero/preferences/preferences_advanced.js @@ -850,7 +850,7 @@ Zotero_Preferences.Attachment_Base_Directory = { Object.keys(newAttachmentPaths), 100, function (chunk) { - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { for (let id of chunk) { let attachment = Zotero.Items.get(id); if (newAttachmentPaths[id]) { @@ -859,7 +859,7 @@ Zotero_Preferences.Attachment_Base_Directory = { else { attachment.attachmentPath = attachment.getFilePath(); } - yield attachment.save({ + await attachment.save({ skipDateModifiedUpdate: true }); } @@ -927,11 +927,11 @@ Zotero_Preferences.Attachment_Base_Directory = { relativeAttachmentIDs, 100, function (chunk) { - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { for (let id of chunk) { - let attachment = yield Zotero.Items.getAsync(id); + let attachment = await Zotero.Items.getAsync(id); attachment.attachmentPath = attachment.getFilePath(); - yield attachment.save({ + await attachment.save({ skipDateModifiedUpdate: true }); } diff --git a/chrome/content/zotero/preferences/preferences_sync.jsx b/chrome/content/zotero/preferences/preferences_sync.jsx index d5e6b973f9..74674c9300 100644 --- a/chrome/content/zotero/preferences/preferences_sync.jsx +++ b/chrome/content/zotero/preferences/preferences_sync.jsx @@ -722,10 +722,10 @@ Zotero_Preferences.Sync = { switch (index) { case 0: let libraries = Zotero.Libraries.getAll().filter(library => library.syncable); - await Zotero.DB.executeTransaction(function* () { + await Zotero.DB.executeTransaction(async function () { for (let library of libraries) { library.libraryVersion = -1; - yield library.save(); + await library.save(); } }); break; diff --git a/chrome/content/zotero/xpcom/attachments.js b/chrome/content/zotero/xpcom/attachments.js index 7174ea9186..ca51bf9e53 100644 --- a/chrome/content/zotero/xpcom/attachments.js +++ b/chrome/content/zotero/xpcom/attachments.js @@ -84,7 +84,7 @@ Zotero.Attachments = new function(){ var attachmentItem, itemID, newFile, contentType, destDir; try { - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { // Create a new attachment attachmentItem = new Zotero.Item('attachment'); if (parentItemID) { @@ -101,34 +101,34 @@ Zotero.Attachments = new function(){ if (collections) { attachmentItem.setCollections(collections); } - yield attachmentItem.save(saveOptions); + await attachmentItem.save(saveOptions); // Create directory for attachment files within storage directory - destDir = yield this.createDirectoryForItem(attachmentItem); + destDir = await this.createDirectoryForItem(attachmentItem); // Point to copied file newFile = OS.Path.join(destDir, newName); // Copy or move file to unique filename, which automatically shortens long filenames if (options.moveFile) { - const newFilePath = yield Zotero.File.moveToUnique(file.path, newFile); + const newFilePath = await Zotero.File.moveToUnique(file.path, newFile); newFile = Zotero.File.pathToFile(newFilePath); } else { newFile = Zotero.File.copyToUnique(file, newFile); } - yield Zotero.File.setNormalFilePermissions(newFile.path); + await Zotero.File.setNormalFilePermissions(newFile.path); if (!contentType) { - contentType = yield Zotero.MIME.getMIMETypeFromFile(newFile); + contentType = await Zotero.MIME.getMIMETypeFromFile(newFile); } attachmentItem.attachmentContentType = contentType; if (charset) { attachmentItem.attachmentCharset = charset; } attachmentItem.attachmentPath = newFile.path; - yield attachmentItem.save(saveOptions); + await attachmentItem.save(saveOptions); }.bind(this)); try { yield _postProcessFile(attachmentItem, newFile, contentType); @@ -296,7 +296,7 @@ Zotero.Attachments = new function(){ var attachmentItem, itemID, destDir, newPath; try { - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { // Create a new attachment attachmentItem = new Zotero.Item('attachment'); let {libraryID, key: parentKey} = Zotero.Items.getLibraryAndKeyFromID(parentItemID); @@ -312,20 +312,20 @@ Zotero.Attachments = new function(){ // DEBUG: this should probably insert access date too so as to // create a proper item, but at the moment this is only called by // translate.js, which sets the metadata fields itself - itemID = yield attachmentItem.save(saveOptions); + itemID = await attachmentItem.save(saveOptions); var storageDir = Zotero.getStorageDirectory(); destDir = this.getStorageDirectory(attachmentItem); - yield OS.File.removeDir(destDir.path); + await OS.File.removeDir(destDir.path); newPath = OS.Path.join(destDir.path, fileName); // Copy single file to new directory if (options.singleFile) { - yield this.createDirectoryForItem(attachmentItem); + await this.createDirectoryForItem(attachmentItem); if (options.moveFile) { - yield OS.File.move(file.path, newPath); + await OS.File.move(file.path, newPath); } else { - yield OS.File.copy(file.path, newPath); + await OS.File.copy(file.path, newPath); } } // Copy entire parent directory (for HTML snapshots) @@ -928,7 +928,7 @@ Zotero.Attachments = new function(){ var attachmentItem; var destDir; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { // Create a new attachment attachmentItem = new Zotero.Item('attachment'); if (libraryID) { @@ -950,12 +950,12 @@ Zotero.Attachments = new function(){ attachmentItem.setCollections(collections); } attachmentItem.attachmentPath = 'storage:' + fileName; - var itemID = yield attachmentItem.save(saveOptions); + var itemID = await attachmentItem.save(saveOptions); Zotero.Fulltext.queueItem(attachmentItem); destDir = this.getStorageDirectory(attachmentItem).path; - yield OS.File.move(tmpDir, destDir); + await OS.File.move(tmpDir, destDir); }.bind(this)); } catch (e) { @@ -2876,7 +2876,7 @@ Zotero.Attachments = new function(){ var collections = options.collections; var saveOptions = options.saveOptions; - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { var attachmentItem = new Zotero.Item('attachment'); if (parentItemID) { let {libraryID: parentLibraryID, key: parentKey} = @@ -2904,7 +2904,7 @@ Zotero.Attachments = new function(){ if (collections) { attachmentItem.setCollections(collections); } - yield attachmentItem.save(saveOptions); + await attachmentItem.save(saveOptions); return attachmentItem; }.bind(this)); diff --git a/chrome/content/zotero/xpcom/data/dataObject.js b/chrome/content/zotero/xpcom/data/dataObject.js index 54ec57a440..ae94a397c7 100644 --- a/chrome/content/zotero/xpcom/data/dataObject.js +++ b/chrome/content/zotero/xpcom/data/dataObject.js @@ -936,10 +936,10 @@ Zotero.DataObject.prototype.save = Zotero.Promise.coroutine(function* (options = // Create transaction let result if (env.options.tx) { - result = yield Zotero.DB.executeTransaction(function* () { + result = yield Zotero.DB.executeTransaction(async function () { Zotero.DataObject.prototype._saveData.call(this, env); - yield this._saveData(env); - yield Zotero.DataObject.prototype._finalizeSave.call(this, env); + await this._saveData(env); + await Zotero.DataObject.prototype._finalizeSave.call(this, env); return this._finalizeSave(env); }.bind(this), env.transactionOptions); } @@ -1261,9 +1261,9 @@ Zotero.DataObject.prototype.erase = Zotero.Promise.coroutine(function* (options Zotero.debug('Deleting ' + this.objectType + ' ' + this.id); if (env.options.tx) { - return Zotero.DB.executeTransaction(function* () { - yield this._eraseData(env); - yield this._finalizeErase(env); + return Zotero.DB.executeTransaction(async function () { + await this._eraseData(env); + await this._finalizeErase(env); }.bind(this)) } else { diff --git a/chrome/content/zotero/xpcom/data/dataObjects.js b/chrome/content/zotero/xpcom/data/dataObjects.js index c6ca7bc4d4..9d12fc2368 100644 --- a/chrome/content/zotero/xpcom/data/dataObjects.js +++ b/chrome/content/zotero/xpcom/data/dataObjects.js @@ -1110,13 +1110,13 @@ Zotero.DataObjects.prototype.getPrimaryDataSQLPart = function (part) { */ Zotero.DataObjects.prototype.erase = Zotero.Promise.coroutine(function* (ids, options = {}) { ids = Zotero.flattenArguments(ids); - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let i = 0; i < ids.length; i++) { - let obj = yield this.getAsync(ids[i]); + let obj = await this.getAsync(ids[i]); if (!obj) { continue; } - yield obj.erase(options); + await obj.erase(options); if (options.onProgress) { options.onProgress(i + 1, ids.length); } diff --git a/chrome/content/zotero/xpcom/data/feed.js b/chrome/content/zotero/xpcom/data/feed.js index 5d71ced3cd..07b63ae928 100644 --- a/chrome/content/zotero/xpcom/data/feed.js +++ b/chrome/content/zotero/xpcom/data/feed.js @@ -487,10 +487,10 @@ Zotero.Feed.prototype._updateFeed = Zotero.Promise.coroutine(function* () { this._set('_feedLastCheckError', e.message || 'Error processing feed'); } if (toSave.length) { - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { // Save in reverse order for (let i=toSave.length-1; i>=0; i--) { - yield toSave[i].save(); + await toSave[i].save(); } }); diff --git a/chrome/content/zotero/xpcom/data/feeds.js b/chrome/content/zotero/xpcom/data/feeds.js index f82658a28c..c115d47b4b 100644 --- a/chrome/content/zotero/xpcom/data/feeds.js +++ b/chrome/content/zotero/xpcom/data/feeds.js @@ -145,9 +145,9 @@ Zotero.Feeds = new function() { newFeeds.push(feed); } // This could potentially be a massive list, so we save in a transaction. - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let feed of newFeeds) { - yield feed.save({ + await feed.save({ skipSelect: true }); } diff --git a/chrome/content/zotero/xpcom/data/items.js b/chrome/content/zotero/xpcom/data/items.js index 4a95c433cd..c07298798d 100644 --- a/chrome/content/zotero/xpcom/data/items.js +++ b/chrome/content/zotero/xpcom/data/items.js @@ -460,11 +460,11 @@ Zotero.Items = function() { ); if (notesToUpdate.length) { - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let i = 0; i < notesToUpdate.length; i++) { let row = notesToUpdate[i]; let sql = "UPDATE itemNotes SET note=? WHERE itemID=?"; - yield Zotero.DB.queryAsync(sql, [row[1], row[0]]); + await Zotero.DB.queryAsync(sql, [row[1], row[0]]); } }.bind(this)); } @@ -947,16 +947,16 @@ Zotero.Items = function() { this.merge = function (item, otherItems) { Zotero.debug("Merging items"); - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { var replPred = Zotero.Relations.replacedItemPredicate; var toSave = {}; toSave[item.id] = item; var earliestDateAdded = item.dateAdded; - let remapAttachmentKeys = yield this._mergePDFAttachments(item, otherItems); - yield this._mergeWebAttachments(item, otherItems); - yield this._mergeOtherAttachments(item, otherItems); + let remapAttachmentKeys = await this._mergePDFAttachments(item, otherItems); + await this._mergeWebAttachments(item, otherItems); + await this._mergeOtherAttachments(item, otherItems); for (let otherItem of otherItems) { if (otherItem.libraryID !== item.libraryID) { @@ -971,7 +971,7 @@ Zotero.Items = function() { // Move notes to master var noteIDs = otherItem.getNotes(true); for (let id of noteIDs) { - var note = yield this.getAsync(id); + var note = await this.getAsync(id); note.parentItemID = item.id; Zotero.Notes.replaceItemKey(note, otherItem.key, item.key); Zotero.Notes.replaceAllItemKeys(note, remapAttachmentKeys); @@ -979,9 +979,8 @@ Zotero.Items = function() { } // Move relations to master - yield this._moveRelations(otherItem, item); + await this._moveRelations(otherItem, item); - // All other operations are additive only and do not affect the // old item, which will be put in the trash // Add collections to master @@ -1016,10 +1015,10 @@ Zotero.Items = function() { // Hack to remove master item from duplicates view without recalculating duplicates // Pass force = true so observers will be notified before this transaction is committed - yield Zotero.Notifier.trigger('removeDuplicatesMaster', 'item', item.id, null, true); + await Zotero.Notifier.trigger('removeDuplicatesMaster', 'item', item.id, null, true); for (let i in toSave) { - yield toSave[i].save(); + await toSave[i].save(); } }.bind(this)); }; @@ -1416,7 +1415,7 @@ Zotero.Items = function() { this.trashTx = function (ids) { - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { return this.trash(ids); }.bind(this)); } @@ -1542,7 +1541,7 @@ Zotero.Items = function() { this.addToPublications = function (items, options = {}) { if (!items.length) return; - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { var timestamp = Zotero.DB.transactionTimestamp; var allItems = [...items]; @@ -1586,7 +1585,7 @@ Zotero.Items = function() { } } - yield Zotero.Utilities.Internal.forEachChunkAsync(allItems, 250, Zotero.Promise.coroutine(function* (chunk) { + await Zotero.Utilities.Internal.forEachChunkAsync(allItems, 250, Zotero.Promise.coroutine(function* (chunk) { for (let item of chunk) { item.setPublications(true); item.synced = false; @@ -1606,7 +1605,7 @@ Zotero.Items = function() { this.removeFromPublications = function (items) { - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { let allItems = []; for (let item of items) { if (!item.inPublications) { @@ -1627,7 +1626,7 @@ Zotero.Items = function() { }); var timestamp = Zotero.DB.transactionTimestamp; - yield Zotero.Utilities.Internal.forEachChunkAsync(allItems, 250, Zotero.Promise.coroutine(function* (chunk) { + await Zotero.Utilities.Internal.forEachChunkAsync(allItems, 250, Zotero.Promise.coroutine(function* (chunk) { let idStr = chunk.map(item => item.id).join(", "); yield Zotero.DB.queryAsync( `UPDATE items SET synced=0, clientDateModified=? WHERE itemID IN (${idStr})`, diff --git a/chrome/content/zotero/xpcom/data/library.js b/chrome/content/zotero/xpcom/data/library.js index 7a8ffc1597..9a10eb9f44 100644 --- a/chrome/content/zotero/xpcom/data/library.js +++ b/chrome/content/zotero/xpcom/data/library.js @@ -462,9 +462,9 @@ Zotero.Library.prototype.save = Zotero.Promise.coroutine(function* (options) { // Create transaction if (env.options.tx) { - return Zotero.DB.executeTransaction(function* () { - yield this._saveData(env); - yield this._finalizeSave(env); + return Zotero.DB.executeTransaction(async function () { + await this._saveData(env); + await this._finalizeSave(env); }.bind(this), env.transactionOptions); } // Use existing transaction @@ -598,9 +598,9 @@ Zotero.Library.prototype.erase = Zotero.Promise.coroutine(function* (options) { env.notifierData = {}; if (env.options.tx) { - yield Zotero.DB.executeTransaction(function* () { - yield this._eraseData(env); - yield this._finalizeErase(env); + yield Zotero.DB.executeTransaction(async function () { + await this._eraseData(env); + await this._finalizeErase(env); }.bind(this), env.transactionOptions); } else { Zotero.DB.requireTransaction(); diff --git a/chrome/content/zotero/xpcom/data/tags.js b/chrome/content/zotero/xpcom/data/tags.js index 36a90bf1bd..a09e58a7f6 100644 --- a/chrome/content/zotero/xpcom/data/tags.js +++ b/chrome/content/zotero/xpcom/data/tags.js @@ -247,11 +247,11 @@ Zotero.Tags = new function() { // we can assign it to the new name var oldColorData = this.getColor(libraryID, oldName); - yield Zotero.DB.executeTransaction(function* () { - var oldItemIDs = yield this.getTagItems(libraryID, oldTagID); - var newTagID = yield this.create(newName); + yield Zotero.DB.executeTransaction(async function () { + var oldItemIDs = await this.getTagItems(libraryID, oldTagID); + var newTagID = await this.create(newName); - yield Zotero.Utilities.Internal.forEachChunkAsync( + await Zotero.Utilities.Internal.forEachChunkAsync( oldItemIDs, Zotero.DB.MAX_BOUND_PARAMETERS - 2, Zotero.Promise.coroutine(function* (chunk) { @@ -291,16 +291,16 @@ Zotero.Tags = new function() { notifierData ); - yield this.purge(oldTagID); + await this.purge(oldTagID); }.bind(this)); if (oldColorData) { - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { // Remove color from old tag - yield this.setColor(libraryID, oldName); + await this.setColor(libraryID, oldName); // Add color to new tag - yield this.setColor( + await this.setColor( libraryID, newName, oldColorData.color, @@ -335,7 +335,7 @@ Zotero.Tags = new function() { tagIDs, 100, async function (chunk) { - await Zotero.DB.executeTransaction(function* () { + await Zotero.DB.executeTransaction(async function () { var rowIDs = []; var itemIDs = []; var uniqueTags = new Set(); @@ -351,7 +351,7 @@ Zotero.Tags = new function() { sql += 'AND type IN (' + types.join(', ') + ') '; } sql += 'ORDER BY tagID, type'; - var rows = yield Zotero.DB.queryAsync(sql, [libraryID, ...chunk]); + var rows = await Zotero.DB.queryAsync(sql, [libraryID, ...chunk]); for (let { rowID, tagID, itemID, type } of rows) { uniqueTags.add(tagID); @@ -374,7 +374,7 @@ Zotero.Tags = new function() { // If we're deleting the tag and not just a specific type, also clear any // tag color if (colors.has(name) && !types) { - yield this.setColor(libraryID, name, false); + await this.setColor(libraryID, name, false); } } if (itemIDs.length) { @@ -382,12 +382,12 @@ Zotero.Tags = new function() { } sql = "DELETE FROM itemTags WHERE ROWID IN (" + rowIDs.join(", ") + ")"; - yield Zotero.DB.queryAsync(sql, false, { noCache: true }); + await Zotero.DB.queryAsync(sql, false, { noCache: true }); - yield this.purge(chunk); + await this.purge(chunk); // Update internal timestamps on all items that had these tags - yield Zotero.Utilities.Internal.forEachChunkAsync( + await Zotero.Utilities.Internal.forEachChunkAsync( Zotero.Utilities.arrayUnique(itemIDs), Zotero.DB.MAX_BOUND_PARAMETERS - 1, async function (chunk) { diff --git a/chrome/content/zotero/xpcom/fulltext.js b/chrome/content/zotero/xpcom/fulltext.js index d7da2b2743..5b8b37b228 100644 --- a/chrome/content/zotero/xpcom/fulltext.js +++ b/chrome/content/zotero/xpcom/fulltext.js @@ -281,9 +281,9 @@ Zotero.Fulltext = Zotero.FullText = new function(){ yield Zotero.DB.waitForTransaction('indexString()'); } - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { this.clearItemWords(itemID, true); - yield indexWords(itemID, words, stats, version, synced); + await indexWords(itemID, words, stats, version, synced); /* var sql = "REPLACE INTO fulltextContent (itemID, textContent) VALUES (?,?)"; @@ -698,8 +698,8 @@ Zotero.Fulltext = Zotero.FullText = new function(){ + `${libraryKey} (contentType: ${contentType})`, 2); // Delete rows for items that weren't supposed to be indexed - yield Zotero.DB.executeTransaction(function* () { - yield this.clearItemWords(itemID); + yield Zotero.DB.executeTransaction(async function () { + await this.clearItemWords(itemID); }.bind(this)); continue; } diff --git a/chrome/content/zotero/xpcom/proxy.js b/chrome/content/zotero/xpcom/proxy.js index 85f20ef92f..1571df406f 100644 --- a/chrome/content/zotero/xpcom/proxy.js +++ b/chrome/content/zotero/xpcom/proxy.js @@ -388,16 +388,16 @@ Zotero.Proxy.prototype.save = Zotero.Promise.coroutine(function* (transparent) { this.compileRegexp(); if(transparent) { - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { if(this.proxyID) { - yield Zotero.DB.queryAsync( + await Zotero.DB.queryAsync( "UPDATE proxies SET multiHost = ?, autoAssociate = ?, scheme = ? WHERE proxyID = ?", [this.multiHost ? 1 : 0, this.autoAssociate ? 1 : 0, this.scheme, this.proxyID] ); - yield Zotero.DB.queryAsync("DELETE FROM proxyHosts WHERE proxyID = ?", [this.proxyID]); + await Zotero.DB.queryAsync("DELETE FROM proxyHosts WHERE proxyID = ?", [this.proxyID]); } else { let id = Zotero.ID.get('proxies'); - yield Zotero.DB.queryAsync( + await Zotero.DB.queryAsync( "INSERT INTO proxies (proxyID, multiHost, autoAssociate, scheme) VALUES (?, ?, ?, ?)", [id, this.multiHost ? 1 : 0, this.autoAssociate ? 1 : 0, this.scheme] ); @@ -408,7 +408,7 @@ Zotero.Proxy.prototype.save = Zotero.Promise.coroutine(function* (transparent) { var host; for(var i in this.hosts) { host = this.hosts[i] = this.hosts[i].toLowerCase(); - yield Zotero.DB.queryAsync( + await Zotero.DB.queryAsync( "INSERT INTO proxyHosts (proxyID, hostname) VALUES (?, ?)", [this.proxyID, host] ); @@ -441,9 +441,9 @@ Zotero.Proxy.prototype.erase = Zotero.Promise.coroutine(function* () { Zotero.Proxies.remove(this); if(this.proxyID) { - yield Zotero.DB.executeTransaction(function* () { - yield Zotero.DB.queryAsync("DELETE FROM proxyHosts WHERE proxyID = ?", [this.proxyID]); - yield Zotero.DB.queryAsync("DELETE FROM proxies WHERE proxyID = ?", [this.proxyID]); + yield Zotero.DB.executeTransaction(async function () { + await Zotero.DB.queryAsync("DELETE FROM proxyHosts WHERE proxyID = ?", [this.proxyID]); + await Zotero.DB.queryAsync("DELETE FROM proxies WHERE proxyID = ?", [this.proxyID]); }.bind(this)); } }); diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js index 8649adec91..a06d884071 100644 --- a/chrome/content/zotero/xpcom/schema.js +++ b/chrome/content/zotero/xpcom/schema.js @@ -733,8 +733,8 @@ Zotero.Schema = new function(){ var itemTypeID = Zotero.ID.get('customItemTypes'); - yield Zotero.DB.executeTransaction(function* () { - yield Zotero.DB.queryAsync("INSERT INTO customItemTypes VALUES (?, 'nsfReviewer', 'NSF Reviewer', 1, 'chrome://zotero/skin/report_user.png')", itemTypeID); + yield Zotero.DB.executeTransaction(async function () { + await Zotero.DB.queryAsync("INSERT INTO customItemTypes VALUES (?, 'nsfReviewer', 'NSF Reviewer', 1, 'chrome://zotero/skin/report_user.png')", itemTypeID); var fields = [ ['name', 'Name'], @@ -754,11 +754,11 @@ Zotero.Schema = new function(){ var fieldID = Zotero.ItemFields.getID(fields[i][0]); if (!fieldID) { var fieldID = Zotero.ID.get('customFields'); - yield Zotero.DB.queryAsync("INSERT INTO customFields VALUES (?, ?, ?)", [fieldID, fields[i][0], fields[i][1]]); - yield Zotero.DB.queryAsync("INSERT INTO customItemTypeFields VALUES (?, NULL, ?, 1, ?)", [itemTypeID, fieldID, i+1]); + await Zotero.DB.queryAsync("INSERT INTO customFields VALUES (?, ?, ?)", [fieldID, fields[i][0], fields[i][1]]); + await Zotero.DB.queryAsync("INSERT INTO customItemTypeFields VALUES (?, NULL, ?, 1, ?)", [itemTypeID, fieldID, i+1]); } else { - yield Zotero.DB.queryAsync("INSERT INTO customItemTypeFields VALUES (?, ?, NULL, 1, ?)", [itemTypeID, fieldID, i+1]); + await Zotero.DB.queryAsync("INSERT INTO customItemTypeFields VALUES (?, ?, NULL, 1, ?)", [itemTypeID, fieldID, i+1]); } switch (fields[i][0]) { @@ -779,11 +779,11 @@ Zotero.Schema = new function(){ } if (baseFieldID) { - yield Zotero.DB.queryAsync("INSERT INTO customBaseFieldMappings VALUES (?, ?, ?)", [itemTypeID, baseFieldID, fieldID]); + await Zotero.DB.queryAsync("INSERT INTO customBaseFieldMappings VALUES (?, ?, ?)", [itemTypeID, baseFieldID, fieldID]); } } - yield _reloadSchema(); + await _reloadSchema(); }, { disableForeignKeys: true }); var s = new Zotero.Search; @@ -814,25 +814,25 @@ Zotero.Schema = new function(){ } Zotero.debug("Uninstalling nsfReviewer item type"); - yield Zotero.DB.executeTransaction(function* () { - yield Zotero.DB.queryAsync("DELETE FROM customItemTypeFields WHERE customItemTypeID=?", itemTypeID - Zotero.ItemTypes.customIDOffset); - yield Zotero.DB.queryAsync("DELETE FROM customBaseFieldMappings WHERE customItemTypeID=?", itemTypeID - Zotero.ItemTypes.customIDOffset); + yield Zotero.DB.executeTransaction(async function () { + await Zotero.DB.queryAsync("DELETE FROM customItemTypeFields WHERE customItemTypeID=?", itemTypeID - Zotero.ItemTypes.customIDOffset); + await Zotero.DB.queryAsync("DELETE FROM customBaseFieldMappings WHERE customItemTypeID=?", itemTypeID - Zotero.ItemTypes.customIDOffset); var fields = Zotero.ItemFields.getItemTypeFields(itemTypeID); for (let fieldID of fields) { if (Zotero.ItemFields.isCustom(fieldID)) { - yield Zotero.DB.queryAsync("DELETE FROM customFields WHERE customFieldID=?", fieldID - Zotero.ItemTypes.customIDOffset); + await Zotero.DB.queryAsync("DELETE FROM customFields WHERE customFieldID=?", fieldID - Zotero.ItemTypes.customIDOffset); } } - yield Zotero.DB.queryAsync("DELETE FROM customItemTypes WHERE customItemTypeID=?", itemTypeID - Zotero.ItemTypes.customIDOffset); + await Zotero.DB.queryAsync("DELETE FROM customItemTypes WHERE customItemTypeID=?", itemTypeID - Zotero.ItemTypes.customIDOffset); var searches = Zotero.Searches.getByLibrary(Zotero.Libraries.userLibraryID); for (let search of searches) { if (search.name == 'Overdue NSF Reviewers') { - yield search.erase(); + await search.erase(); } } - yield _reloadSchema(); + await _reloadSchema(); }.bind(this), { disableForeignKeys: true }); ps.alert(null, "Zotero Item Type Removed", "The 'NSF Reviewer' item type has been uninstalled."); diff --git a/chrome/content/zotero/xpcom/storage/storageLocal.js b/chrome/content/zotero/xpcom/storage/storageLocal.js index e8c3a9d044..60e436f03f 100644 --- a/chrome/content/zotero/xpcom/storage/storageLocal.js +++ b/chrome/content/zotero/xpcom/storage/storageLocal.js @@ -301,9 +301,9 @@ Zotero.Sync.Storage.Local = { } // Update sync states in bulk if (changed) { - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let state in statesToSet) { - yield this.updateSyncStates(statesToSet[state], parseInt(state)); + await this.updateSyncStates(statesToSet[state], parseInt(state)); } }.bind(this)); } @@ -1052,7 +1052,7 @@ Zotero.Sync.Storage.Local = { return false; } - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let i = 0; i < conflicts.length; i++) { let conflict = conflicts[i]; // TEMP @@ -1080,7 +1080,7 @@ Zotero.Sync.Storage.Local = { syncState = this.SYNC_STATE_FORCE_DOWNLOAD; } item.attachmentSyncState = syncState; - yield item.save({ skipAll: true }); + await item.save({ skipAll: true }); } }.bind(this)); return true; diff --git a/chrome/content/zotero/xpcom/storage/webdav.js b/chrome/content/zotero/xpcom/storage/webdav.js index ed56f1cc09..c62e2487a7 100644 --- a/chrome/content/zotero/xpcom/storage/webdav.js +++ b/chrome/content/zotero/xpcom/storage/webdav.js @@ -952,7 +952,7 @@ Zotero.Sync.Storage.Mode.WebDAV.prototype = { toPurge, Zotero.DB.MAX_BOUND_PARAMETERS - 1, function (chunk) { - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { var sql = "DELETE FROM storageDeleteLog WHERE libraryID=? AND key IN (" + chunk.map(() => '?').join() + ")"; return Zotero.DB.queryAsync(sql, [libraryID].concat(chunk)); diff --git a/chrome/content/zotero/xpcom/storage/zfs.js b/chrome/content/zotero/xpcom/storage/zfs.js index a55713c73f..c94efcdf97 100644 --- a/chrome/content/zotero/xpcom/storage/zfs.js +++ b/chrome/content/zotero/xpcom/storage/zfs.js @@ -815,15 +815,15 @@ Zotero.Sync.Storage.Mode.ZFS.prototype = { */ _updateItemFileInfo: Zotero.Promise.coroutine(function* (item, params) { // Mark as in-sync - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { // Store file mod time and hash item.attachmentSyncedModificationTime = params.mtime; item.attachmentSyncedHash = params.md5; item.attachmentSyncState = "in_sync"; - yield item.save({ skipAll: true }); + await item.save({ skipAll: true }); // Update sync cache with new file metadata and version from server - var json = yield Zotero.Sync.Data.Local.getCacheObject( + var json = await Zotero.Sync.Data.Local.getCacheObject( 'item', item.libraryID, item.key, item.version ); if (json) { @@ -831,10 +831,10 @@ Zotero.Sync.Storage.Mode.ZFS.prototype = { json.data.version = params.version; json.data.mtime = params.mtime; json.data.md5 = params.md5; - yield Zotero.Sync.Data.Local.saveCacheObject('item', item.libraryID, json); + await Zotero.Sync.Data.Local.saveCacheObject('item', item.libraryID, json); } // Update item with new version from server - yield Zotero.Items.updateVersion([item.id], params.version); + await Zotero.Items.updateVersion([item.id], params.version); // TODO: Can filename, contentType, and charset change the attachment item? }); @@ -1001,9 +1001,9 @@ Zotero.Sync.Storage.Mode.ZFS.prototype = { } if (same) { - yield Zotero.DB.executeTransaction(function* () { - yield Zotero.Sync.Storage.setSyncedModificationTime(item.id, fmtime); - yield Zotero.Sync.Storage.setSyncState( + yield Zotero.DB.executeTransaction(async function () { + await Zotero.Sync.Storage.setSyncedModificationTime(item.id, fmtime); + await Zotero.Sync.Storage.setSyncState( item.id, Zotero.Sync.Storage.Local.SYNC_STATE_IN_SYNC ); }); diff --git a/chrome/content/zotero/xpcom/sync/syncEngine.js b/chrome/content/zotero/xpcom/sync/syncEngine.js index e0806a5e28..8762e2bade 100644 --- a/chrome/content/zotero/xpcom/sync/syncEngine.js +++ b/chrome/content/zotero/xpcom/sync/syncEngine.js @@ -794,8 +794,8 @@ Zotero.Sync.Data.Engine.prototype._restoreRestoredCollectionItems = async functi Zotero.debug(`Restoring ${addToCollection.length} ` + `${Zotero.Utilities.pluralize(addToCollection.length, ['item', 'items'])} ` + `to restored collection ${collection.libraryKey}`); - await Zotero.DB.executeTransaction(function* () { - yield collection.addItems(addToCollection); + await Zotero.DB.executeTransaction(async function () { + await collection.addItems(addToCollection); }.bind(this)); } if (addToQueue.length) { @@ -927,7 +927,7 @@ Zotero.Sync.Data.Engine.prototype._downloadDeletions = Zotero.Promise.coroutine( mergeData, batchSize, function (chunk) { - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { for (let json of chunk) { let data = json.data; if (!data.deleted) continue; @@ -937,7 +937,7 @@ Zotero.Sync.Data.Engine.prototype._downloadDeletions = Zotero.Promise.coroutine( + " didn't exist after conflict resolution"); continue; } - yield obj.erase({ + await obj.erase({ skipEditCheck: true }); } @@ -951,9 +951,9 @@ Zotero.Sync.Data.Engine.prototype._downloadDeletions = Zotero.Promise.coroutine( toDelete, batchSize, function (chunk) { - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { for (let obj of chunk) { - yield obj.erase({ + await obj.erase({ skipEditCheck: true, skipDeleteLog: true }); @@ -1324,9 +1324,9 @@ Zotero.Sync.Data.Engine.prototype._uploadObjects = Zotero.Promise.coroutine(func yield Zotero.Sync.Data.Local.saveCacheObjects( objectType, this.libraryID, toCache ); - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let i = 0; i < toSave.length; i++) { - yield toSave[i].save({ + await toSave[i].save({ skipSelect: true, skipSyncedUpdate: true, // We want to minimize the times when server writes actually result in local @@ -1338,7 +1338,7 @@ Zotero.Sync.Data.Engine.prototype._uploadObjects = Zotero.Promise.coroutine(func this.library.storageVersion = libraryVersion; } this.library.libraryVersion = libraryVersion; - yield this.library.save(); + await this.library.save(); objectsClass.updateVersion(updateVersionIDs, libraryVersion); objectsClass.updateSynced(updateSyncedIDs, true); }.bind(this)); @@ -1514,14 +1514,14 @@ Zotero.Sync.Data.Engine.prototype._updateGroupItemUsers = async function () { Zotero.Sync.Data.Engine.prototype._getJSONForObject = function (objectType, id, options = {}) { - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { var objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(objectType); var obj = objectsClass.get(id); var cacheObj = false; // If the object has been synced before, get the pristine version from the cache so we can // use PATCH mode and include only fields that have changed if (obj.version) { - cacheObj = yield Zotero.Sync.Data.Local.getCacheObject( + cacheObj = await Zotero.Sync.Data.Local.getCacheObject( objectType, obj.libraryID, obj.key, obj.version ); } @@ -1671,7 +1671,7 @@ Zotero.Sync.Data.Engine.prototype._upgradeCheck = Zotero.Promise.coroutine(funct // Update versions on local objects modified remotely before last classic sync time, // to indicate that they don't need to receive remote updates - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let objectType in currentVersions) { let objectTypePlural = Zotero.DataObjectUtilities.getObjectTypePlural(objectType); let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(objectType); @@ -1692,17 +1692,17 @@ Zotero.Sync.Data.Engine.prototype._upgradeCheck = Zotero.Promise.coroutine(funct versionObjects[version].push(id); } for (let version in versionObjects) { - yield objectsClass.updateVersion(versionObjects[version], version); + await objectsClass.updateVersion(versionObjects[version], version); } } // Mark library as requiring full sync this.library.libraryVersion = -1; - yield this.library.save(); + await this.library.save(); // If this is the last classic sync library, delete old timestamps - if (!(yield Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM libraries WHERE version=0"))) { - yield Zotero.DB.queryAsync( + if (!(await Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM libraries WHERE version=0"))) { + await Zotero.DB.queryAsync( "DELETE FROM version WHERE schema IN ('lastlocalsync', 'lastremotesync')" ); } @@ -1856,21 +1856,21 @@ Zotero.Sync.Data.Engine.prototype._restoreToServer = async function () { // Flag engine as restore-to-server mode so it uses library version only this._restoringToServer = true; - await Zotero.DB.executeTransaction(function* () { - yield Zotero.Sync.Data.Local.clearCacheForLibrary(this.libraryID); - yield Zotero.Sync.Data.Local.clearQueueForLibrary(this.libraryID); - yield Zotero.Sync.Data.Local.clearDeleteLogForLibrary(this.libraryID); + await Zotero.DB.executeTransaction(async function () { + await Zotero.Sync.Data.Local.clearCacheForLibrary(this.libraryID); + await Zotero.Sync.Data.Local.clearQueueForLibrary(this.libraryID); + await Zotero.Sync.Data.Local.clearDeleteLogForLibrary(this.libraryID); // Mark all local settings as unsynced - yield Zotero.SyncedSettings.markAllAsUnsynced(this.libraryID); + await Zotero.SyncedSettings.markAllAsUnsynced(this.libraryID); // Mark all objects as unsynced for (let objectType of Zotero.DataObjectUtilities.getTypesForLibrary(this.libraryID)) { let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(objectType); // Reset version on all objects and mark as unsynced - let ids = yield objectsClass.getAllIDs(this.libraryID) - yield objectsClass.updateVersion(ids, 0); - yield objectsClass.updateSynced(ids, false); + let ids = await objectsClass.getAllIDs(this.libraryID) + await objectsClass.updateVersion(ids, 0); + await objectsClass.updateSynced(ids, false); } }.bind(this)); diff --git a/chrome/content/zotero/xpcom/sync/syncEventListeners.js b/chrome/content/zotero/xpcom/sync/syncEventListeners.js index 3d4f2a803f..6e046141e2 100644 --- a/chrome/content/zotero/xpcom/sync/syncEventListeners.js +++ b/chrome/content/zotero/xpcom/sync/syncEventListeners.js @@ -76,12 +76,12 @@ Zotero.Sync.EventListeners.ChangeListener = new function () { }); if (storageSets.length) { - return Zotero.DB.executeTransaction(function* () { - yield Zotero.DB.queryAsync( + return Zotero.DB.executeTransaction(async function () { + await Zotero.DB.queryAsync( syncSQL + Array(syncSets.length / 3).fill('(?, ?, ?)').join(', '), syncSets ); - yield Zotero.DB.queryAsync( + await Zotero.DB.queryAsync( storageSQL + Array(storageSets.length / 2).fill('(?, ?)').join(', '), storageSets ); diff --git a/chrome/content/zotero/xpcom/sync/syncFullTextEngine.js b/chrome/content/zotero/xpcom/sync/syncFullTextEngine.js index cacd380d9c..112512004e 100644 --- a/chrome/content/zotero/xpcom/sync/syncFullTextEngine.js +++ b/chrome/content/zotero/xpcom/sync/syncFullTextEngine.js @@ -159,20 +159,20 @@ Zotero.Sync.Data.FullTextEngine.prototype._upload = Zotero.Promise.coroutine(fun libraryVersion, jsonArray )); - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let state of ['successful', 'unchanged']) { for (let index in results[state]) { let key = results[state][index].key; let itemID = Zotero.Items.getIDFromLibraryAndKey(this.libraryID, key); - yield Zotero.FullText.setItemSynced(itemID, libraryVersion); + await Zotero.FullText.setItemSynced(itemID, libraryVersion); } } // Set both the library version and the full-text library version. The latter is necessary // because full-text sync can be turned off at any time, so we have to keep track of the // last version we've seen for full-text in case the main library version has advanced since. - yield Zotero.FullText.setLibraryVersion(this.libraryID, libraryVersion); + await Zotero.FullText.setLibraryVersion(this.libraryID, libraryVersion); this.library.libraryVersion = libraryVersion; - yield this.library.save(); + await this.library.save(); }.bind(this)); for (let index in results.failed) { diff --git a/chrome/content/zotero/xpcom/sync/syncLocal.js b/chrome/content/zotero/xpcom/sync/syncLocal.js index 43bfe27ba6..538f3d57c5 100644 --- a/chrome/content/zotero/xpcom/sync/syncLocal.js +++ b/chrome/content/zotero/xpcom/sync/syncLocal.js @@ -898,8 +898,8 @@ Zotero.Sync.Data.Local = { // Errors have to be thrown in order to roll back the transaction, so catch those here // and continue try { - yield Zotero.DB.executeTransaction(function* () { - let obj = yield objectsClass.getByLibraryAndKeyAsync( + yield Zotero.DB.executeTransaction(async function () { + let obj = await objectsClass.getByLibraryAndKeyAsync( libraryID, objectKey, { noCache: true } ); let restored = false; @@ -923,7 +923,7 @@ Zotero.Sync.Data.Local = { Zotero.debug("Local " + objectType + " " + obj.libraryKey + " has been modified since last sync", 4); - let cachedJSON = yield this.getCacheObject( + let cachedJSON = await this.getCacheObject( objectType, obj.libraryID, obj.key, obj.version ); let result = this._reconcileChanges( @@ -947,7 +947,7 @@ Zotero.Sync.Data.Local = { if (result.localChanged) { saveOptions.saveAsUnsynced = true; } - let saveResults = yield this._saveObjectFromJSON( + let saveResults = await this._saveObjectFromJSON( obj, jsonObject, saveOptions @@ -1028,7 +1028,7 @@ Zotero.Sync.Data.Local = { saveOptions.isNewObject = true; // Check if object has been deleted locally - let dateDeleted = yield this.getDateDeleted( + let dateDeleted = await this.getDateDeleted( objectType, libraryID, objectKey ); if (dateDeleted) { @@ -1064,7 +1064,7 @@ Zotero.Sync.Data.Local = { case 'search': Zotero.debug(`${ObjectType} ${objectKey} was modified remotely ` + '-- restoring'); - yield this.removeObjectsFromDeleteLog( + await this.removeObjectsFromDeleteLog( objectType, libraryID, [objectKey] @@ -1081,13 +1081,13 @@ Zotero.Sync.Data.Local = { obj = new Zotero[ObjectType]; obj.libraryID = libraryID; obj.key = objectKey; - yield obj.loadPrimaryData(); + await obj.loadPrimaryData(); // Don't cache new items immediately, which skips reloading after save saveOptions.skipCache = true; } - let saveResults = yield this._saveObjectFromJSON(obj, jsonObject, saveOptions); + let saveResults = await this._saveObjectFromJSON(obj, jsonObject, saveOptions); if (restored) { saveResults.restored = true; } @@ -1341,8 +1341,8 @@ Zotero.Sync.Data.Local = { // Errors have to be thrown in order to roll back the transaction, so catch // those here and continue try { - yield Zotero.DB.executeTransaction(function* () { - let obj = yield objectsClass.getByLibraryAndKeyAsync( + yield Zotero.DB.executeTransaction(async function () { + let obj = await objectsClass.getByLibraryAndKeyAsync( libraryID, json.key, { noCache: true } ); // Update object with merge data @@ -1350,7 +1350,7 @@ Zotero.Sync.Data.Local = { // Delete local object if (json.deleted) { try { - yield obj.erase({ + await obj.erase({ notifierQueue }); } @@ -1385,14 +1385,14 @@ Zotero.Sync.Data.Local = { obj = new Zotero[ObjectType]; obj.libraryID = libraryID; obj.key = json.key; - yield obj.loadPrimaryData(); + await obj.loadPrimaryData(); // Don't cache new items immediately, // which skips reloading after save saveOptions.skipCache = true; } - let saveResults = yield this._saveObjectFromJSON(obj, json, saveOptions); + let saveResults = await this._saveObjectFromJSON(obj, json, saveOptions); results.push(saveResults); if (!saveResults.processed) { throw saveResults.error; diff --git a/chrome/content/zotero/xpcom/sync/syncRunner.js b/chrome/content/zotero/xpcom/sync/syncRunner.js index 6e8b78ca31..59a1bff08b 100644 --- a/chrome/content/zotero/xpcom/sync/syncRunner.js +++ b/chrome/content/zotero/xpcom/sync/syncRunner.js @@ -1238,16 +1238,16 @@ Zotero.Sync.Runner_Module = function (options = {}) { case 'split': for (let libraryID of editableLibraries) { let itemIDs = yield Zotero.Tags.getTagItems(libraryID, oldTagID); - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let itemID of itemIDs) { - let item = yield Zotero.Items.getAsync(itemID); + let item = await Zotero.Items.getAsync(itemID); for (let tag of dataOut.result.tags) { item.addTag(tag); } item.removeTag(oldTag); - yield item.save(); + await item.save(); } - yield Zotero.Tags.purge(oldTagID); + await Zotero.Tags.purge(oldTagID); }); } break; @@ -1255,11 +1255,11 @@ Zotero.Sync.Runner_Module = function (options = {}) { case 'edit': for (let libraryID of editableLibraries) { let itemIDs = yield Zotero.Tags.getTagItems(libraryID, oldTagID); - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let itemID of itemIDs) { - let item = yield Zotero.Items.getAsync(itemID); + let item = await Zotero.Items.getAsync(itemID); item.replaceTag(oldTag, dataOut.result.tag); - yield item.save(); + await item.save(); } }); } diff --git a/chrome/content/zotero/xpcom/translation/translate_item.js b/chrome/content/zotero/xpcom/translation/translate_item.js index 14462e4e23..0a9b4a0585 100644 --- a/chrome/content/zotero/xpcom/translation/translate_item.js +++ b/chrome/content/zotero/xpcom/translation/translate_item.js @@ -407,7 +407,7 @@ Zotero.Translate.ItemSaver.prototype = { var parentIDs = collections.map(c => null); var topLevelCollections = []; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { while(collectionsToProcess.length) { var collection = collectionsToProcess.shift(); var parentID = parentIDs.shift(); @@ -422,7 +422,7 @@ Zotero.Translate.ItemSaver.prototype = { newCollection.parentID = rootCollectionID; topLevelCollections.push(newCollection) } - yield newCollection.save(this._saveOptions); + await newCollection.save(this._saveOptions); var toAdd = []; @@ -444,7 +444,7 @@ Zotero.Translate.ItemSaver.prototype = { if(toAdd.length) { Zotero.debug("Translate: Adding " + toAdd, 5); - yield newCollection.addItems(toAdd); + await newCollection.addItems(toAdd); } } }.bind(this)); diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js index 312d754505..da97496dc6 100644 --- a/chrome/content/zotero/xpcom/zotero.js +++ b/chrome/content/zotero/xpcom/zotero.js @@ -1675,18 +1675,18 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js"); this.purgeDataObjects = Zotero.Promise.coroutine(function* () { var d = new Date(); - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { return Zotero.Creators.purge(); }); - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { return Zotero.Tags.purge(); }); yield Zotero.Fulltext.purgeUnusedWords(); - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { return Zotero.Items.purge(); }); // DEBUG: this might not need to be permanent - //yield Zotero.DB.executeTransaction(function* () { + //yield Zotero.DB.executeTransaction(async function () { // return Zotero.Relations.purge(); //}); diff --git a/chrome/content/zotero/zoteroPane.js b/chrome/content/zotero/zoteroPane.js index 7a6357ebc5..45896aa87f 100644 --- a/chrome/content/zotero/zoteroPane.js +++ b/chrome/content/zotero/zoteroPane.js @@ -973,16 +973,16 @@ var ZoteroPane = new function() } let itemID; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { var item = new Zotero.Item(typeID); item.libraryID = libraryID; for (var i in data) { item.setField(i, data[i]); } - itemID = yield item.save(); + itemID = await item.save(); if (collectionTreeRow && collectionTreeRow.isCollection()) { - yield collectionTreeRow.ref.addItem(itemID); + await collectionTreeRow.ref.addItem(itemID); } }); @@ -1757,21 +1757,21 @@ var ZoteroPane = new function() var newItem; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { newItem = item.clone(); // If in a collection, add new item to it if (self.getCollectionTreeRow().isCollection() && newItem.isTopLevelItem()) { newItem.setCollections([self.getCollectionTreeRow().ref.id]); } - yield newItem.save(); + await newItem.save(); if (item.isNote() && Zotero.Libraries.get(newItem.libraryID).filesEditable) { - yield Zotero.Notes.copyEmbeddedImages(item, newItem); + await Zotero.Notes.copyEmbeddedImages(item, newItem); } for (let relItemKey of item.relatedItems) { try { - let relItem = yield Zotero.Items.getByLibraryAndKeyAsync(item.libraryID, relItemKey); + let relItem = await Zotero.Items.getByLibraryAndKeyAsync(item.libraryID, relItemKey); if (relItem.addRelatedItem(newItem)) { - yield relItem.save({ + await relItem.save({ skipDateModifiedUpdate: true }); } diff --git a/test/content/support.js b/test/content/support.js index af297eec10..99e2dbb656 100644 --- a/test/content/support.js +++ b/test/content/support.js @@ -756,12 +756,12 @@ function generateAllTypesAndFieldsData() { * The field values should be in the form exactly as they would appear in Zotero */ function populateDBWithSampleData(data) { - return Zotero.DB.executeTransaction(function* () { + return Zotero.DB.executeTransaction(async function () { for (let itemName in data) { let item = data[itemName]; let zItem = new Zotero.Item; zItem.fromJSON(item); - item.id = yield zItem.save(); + item.id = await zItem.save(); } return data; diff --git a/test/tests/collectionTreeTest.js b/test/tests/collectionTreeTest.js index 686b2d3e98..ab3be2bfa3 100644 --- a/test/tests/collectionTreeTest.js +++ b/test/tests/collectionTreeTest.js @@ -363,11 +363,11 @@ describe("Zotero.CollectionTree", function() { it("should add multiple collections", function* () { var col1, col2; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { col1 = createUnsavedDataObject('collection'); col2 = createUnsavedDataObject('collection'); - yield col1.save(); - yield col2.save(); + await col1.save(); + await col2.save(); }); var aRow = cv.getRowIndexByID("C" + col1.id); diff --git a/test/tests/creatorsTest.js b/test/tests/creatorsTest.js index 4fc3d5f6fb..54c0ed500e 100644 --- a/test/tests/creatorsTest.js +++ b/test/tests/creatorsTest.js @@ -8,8 +8,8 @@ describe("Zotero.Creators", function() { lastName: "Last" }; var creatorID; - yield Zotero.DB.executeTransaction(function* () { - creatorID = yield Zotero.Creators.getIDFromData(data1, true); + yield Zotero.DB.executeTransaction(async function () { + creatorID = await Zotero.Creators.getIDFromData(data1, true); }); assert.typeOf(creatorID, 'number'); var data2 = Zotero.Creators.get(creatorID); diff --git a/test/tests/dataObjectUtilitiesTest.js b/test/tests/dataObjectUtilitiesTest.js index 661b9a06d6..16a5fa89fd 100644 --- a/test/tests/dataObjectUtilitiesTest.js +++ b/test/tests/dataObjectUtilitiesTest.js @@ -71,13 +71,13 @@ describe("Zotero.DataObjectUtilities", function() { describe("fields", function () { it("should not show empty items as different", function* () { var id1, id2, json1, json2; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { var item = new Zotero.Item('book'); - id1 = yield item.save(); + id1 = await item.save(); json1 = item.toJSON(); var item = new Zotero.Item('book'); - id2 = yield item.save(); + id2 = await item.save(); json2 = item.toJSON(); }); diff --git a/test/tests/dataObjectsTest.js b/test/tests/dataObjectsTest.js index e5e0f06688..71ec666fdc 100644 --- a/test/tests/dataObjectsTest.js +++ b/test/tests/dataObjectsTest.js @@ -22,9 +22,9 @@ describe("Zotero.DataObjects", function () { it("should return a libraryID and key within a transaction", function* () { for (let type of types) { let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type); - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { let obj = createUnsavedDataObject(type); - yield obj.save(); + await obj.save(); var {libraryID, key} = objectsClass.getLibraryAndKeyFromID(obj.id); assert.equal(libraryID, Zotero.Libraries.userLibraryID); @@ -32,7 +32,7 @@ describe("Zotero.DataObjects", function () { assert.typeOf(key, 'string'); assert.equal(key, obj.key); - yield obj.erase(); + await obj.erase(); }); } }); @@ -42,9 +42,9 @@ describe("Zotero.DataObjects", function () { let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type); var obj; try { - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { obj = createUnsavedDataObject(type); - yield obj.save(); + await obj.save(); throw 'Aborting transaction -- ignore'; }); } diff --git a/test/tests/dbTest.js b/test/tests/dbTest.js index 8339e3972e..b200a96b06 100644 --- a/test/tests/dbTest.js +++ b/test/tests/dbTest.js @@ -192,21 +192,21 @@ describe("Zotero.DB", function() { reject2 = reject; }); - Zotero.DB.executeTransaction(function* () { - yield Zotero.Promise.delay(250); - var num = yield Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM " + tmpTable); + Zotero.DB.executeTransaction(async function () { + await Zotero.Promise.delay(250); + var num = await Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM " + tmpTable); assert.equal(num, 0); - yield Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (1)"); + await Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (1)"); assert.ok(Zotero.DB.inTransaction()); }) .then(resolve1) .catch(reject1); - Zotero.DB.executeTransaction(function* () { - var num = yield Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM " + tmpTable); + Zotero.DB.executeTransaction(async function () { + var num = await Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM " + tmpTable); assert.equal(num, 1); - yield Zotero.Promise.delay(500); - yield Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (2)"); + await Zotero.Promise.delay(500); + await Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (2)"); assert.ok(Zotero.DB.inTransaction()); }) .then(resolve2) @@ -231,30 +231,30 @@ describe("Zotero.DB", function() { }); // Start a transaction and have it delay - Zotero.DB.executeTransaction(function* () { - yield Zotero.Promise.delay(100); - var num = yield Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM " + tmpTable); + Zotero.DB.executeTransaction(async function () { + await Zotero.Promise.delay(100); + var num = await Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM " + tmpTable); assert.equal(num, 0); - yield Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (1)"); + await Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (1)"); assert.ok(Zotero.DB.inTransaction()); }) .then(resolve1) .catch(reject1); // Start two more transactions, which should wait on the first - Zotero.DB.executeTransaction(function* () { - var num = yield Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM " + tmpTable); + Zotero.DB.executeTransaction(async function () { + var num = await Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM " + tmpTable); assert.equal(num, 1); - yield Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (2)"); + await Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (2)"); assert.ok(Zotero.DB.inTransaction()); }) .then(resolve2) .catch(reject2); - Zotero.DB.executeTransaction(function* () { - var num = yield Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM " + tmpTable); + Zotero.DB.executeTransaction(async function () { + var num = await Zotero.DB.valueQueryAsync("SELECT COUNT(*) FROM " + tmpTable); assert.equal(num, 2); - yield Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (3)"); + await Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (3)"); // But make sure the second queued transaction doesn't start at the same time, // such that the first queued transaction gets closed while the second is still // running @@ -269,8 +269,8 @@ describe("Zotero.DB", function() { it("should roll back on error", function* () { yield Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (1)"); try { - yield Zotero.DB.executeTransaction(function* () { - yield Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (2)"); + yield Zotero.DB.executeTransaction(async function () { + await Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (2)"); throw 'Aborting transaction -- ignore'; }); } @@ -290,8 +290,8 @@ describe("Zotero.DB", function() { var callbackRan = false; try { yield Zotero.DB.executeTransaction( - function* () { - yield Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (1)"); + async function () { + await Zotero.DB.queryAsync("INSERT INTO " + tmpTable + " VALUES (1)"); throw 'Aborting transaction -- ignore'; }, { @@ -331,9 +331,9 @@ describe("Zotero.DB", function() { var callback1Ran = false; var callback2Ran = false; try { - yield Zotero.DB.executeTransaction(function* () { - yield Zotero.DB.executeTransaction( - function* () {}, + yield Zotero.DB.executeTransaction(async function () { + await Zotero.DB.executeTransaction( + async function () {}, { waitTimeout: 100, onRollback: function () { diff --git a/test/tests/groupsTest.js b/test/tests/groupsTest.js index fa29fdaa25..b806cd4967 100644 --- a/test/tests/groupsTest.js +++ b/test/tests/groupsTest.js @@ -7,7 +7,7 @@ describe("Zotero.Groups", function () { } finally { if (group) { - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { return group.erase(); }) } diff --git a/test/tests/itemPaneTest.js b/test/tests/itemPaneTest.js index 78cf8df97e..859036fb8b 100644 --- a/test/tests/itemPaneTest.js +++ b/test/tests/itemPaneTest.js @@ -139,19 +139,19 @@ describe("Item pane", function () { var item; var note1; var note2; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { item = createUnsavedDataObject('item'); - yield item.save(); + await item.save(); note1 = new Zotero.Item('note'); note1.parentID = item.id; note1.setNote('A'); - yield note1.save(); + await note1.save(); note2 = new Zotero.Item('note'); note2.parentID = item.id; note2.setNote('B'); - yield note2.save(); + await note2.save(); }); var tabs = doc.getElementById('zotero-editpane-tabs'); @@ -179,19 +179,19 @@ describe("Item pane", function () { var item; var note1; var note2; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { item = createUnsavedDataObject('item'); - yield item.save(); + await item.save(); note1 = new Zotero.Item('note'); note1.parentID = item.id; note1.setNote('A'); - yield note1.save(); + await note1.save(); note2 = new Zotero.Item('note'); note2.parentID = item.id; note2.setNote('B'); - yield note2.save(); + await note2.save(); }); var tabs = doc.getElementById('zotero-editpane-tabs'); @@ -220,19 +220,19 @@ describe("Item pane", function () { var item; var note1; var note2; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { item = createUnsavedDataObject('item'); - yield item.save(); + await item.save(); note1 = new Zotero.Item('note'); note1.parentID = item.id; note1.setNote('A'); - yield note1.save(); + await note1.save(); note2 = new Zotero.Item('note'); note2.parentID = item.id; note2.setNote('B'); - yield note2.save(); + await note2.save(); }); var tabs = doc.getElementById('zotero-editpane-tabs'); diff --git a/test/tests/itemTest.js b/test/tests/itemTest.js index 9af714e4a3..88402089d9 100644 --- a/test/tests/itemTest.js +++ b/test/tests/itemTest.js @@ -2237,13 +2237,13 @@ describe("Zotero.Item", function () { var item4 = yield createDataObject('item'); var relateItems = Zotero.Promise.coroutine(function* (i1, i2) { - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { i1.addRelatedItem(i2); - yield i1.save({ + await i1.save({ skipDateModifiedUpdate: true }); i2.addRelatedItem(i1); - yield i2.save({ + await i2.save({ skipDateModifiedUpdate: true }); }); diff --git a/test/tests/itemTreeTest.js b/test/tests/itemTreeTest.js index 9e14aae882..fe93e7596a 100644 --- a/test/tests/itemTreeTest.js +++ b/test/tests/itemTreeTest.js @@ -373,8 +373,8 @@ describe("Zotero.ItemTree", function() { // Remove item var treeRow = itemsView.getRow(2); - yield Zotero.DB.executeTransaction(function* () { - yield collection.removeItems([treeRow.ref.id]); + yield Zotero.DB.executeTransaction(async function () { + await collection.removeItems([treeRow.ref.id]); }.bind(this)); // Selection should stay on third row @@ -414,12 +414,12 @@ describe("Zotero.ItemTree", function() { } var num = numVisibleRows + 10; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let i = 0; i < num; i++) { let title = getTitle(i, num); let item = createUnsavedDataObject('item', { title }); item.addToCollection(collection.id); - yield item.save(); + await item.save(); } }.bind(this)); @@ -436,12 +436,12 @@ describe("Zotero.ItemTree", function() { skipSelect: true }); // Then add a few more in a transaction - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let i = 0; i < 3; i++) { var item = createUnsavedDataObject( 'item', { title: getTitle(0, num), collections: [collection.id] } ); - yield item.save({ + await item.save({ skipSelect: true }); } @@ -465,12 +465,12 @@ describe("Zotero.ItemTree", function() { } var num = numVisibleRows + 10; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let i = 0; i < num; i++) { let title = getTitle(i, num); let item = createUnsavedDataObject('item', { title }); item.addToCollection(collection.id); - yield item.save(); + await item.save(); } }.bind(this)); @@ -490,12 +490,12 @@ describe("Zotero.ItemTree", function() { skipSelect: true }); // Then add a few more in a transaction - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let i = 0; i < 3; i++) { var item = createUnsavedDataObject( 'item', { title: getTitle(0, num), collections: [collection.id] } ); - yield item.save({ + await item.save({ skipSelect: true }); } @@ -521,13 +521,13 @@ describe("Zotero.ItemTree", function() { } var num = numVisibleRows + 10; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { // Start at "*1" so we can add items before for (let i = 1; i < num; i++) { let title = getTitle(i, num); let item = createUnsavedDataObject('item', { title }); item.addToCollection(collection.id); - yield item.save(); + await item.save(); } }.bind(this)); @@ -542,12 +542,12 @@ describe("Zotero.ItemTree", function() { skipSelect: true }); // Then add a few more in a transaction - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { for (let i = 0; i < 3; i++) { var item = createUnsavedDataObject( 'item', { title: getTitle(0, num), collections: [collection.id] } ); - yield item.save({ + await item.save({ skipSelect: true }); } diff --git a/test/tests/notifierTest.js b/test/tests/notifierTest.js index 41eca26e83..2cb5c3e075 100644 --- a/test/tests/notifierTest.js +++ b/test/tests/notifierTest.js @@ -15,12 +15,12 @@ describe("Zotero.Notifier", function () { }; var id = Zotero.Notifier.registerObserver(observer, null, 'test_trigger'); - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { var item = new Zotero.Item('book'); item.setField('title', 'A'); - yield item.save(); + await item.save(); item.setField('title', 'B'); - yield item.save(); + await item.save(); Zotero.Notifier.queue('unknown', 'item', item.id); }); diff --git a/test/tests/relationsTest.js b/test/tests/relationsTest.js index 63a8ddd7dc..1c6556e500 100644 --- a/test/tests/relationsTest.js +++ b/test/tests/relationsTest.js @@ -37,8 +37,8 @@ describe("Zotero.Relations", function () { var rels = item2.getRelationsByPredicate(Zotero.Relations.relatedItemPredicate); assert.include(rels[0], "/users/local"); - yield Zotero.DB.executeTransaction(function* () { - yield Zotero.Relations.updateUser(null, 1); + yield Zotero.DB.executeTransaction(async function () { + await Zotero.Relations.updateUser(null, 1); }) var rels = item2.getRelationsByPredicate(Zotero.Relations.relatedItemPredicate); @@ -56,8 +56,8 @@ describe("Zotero.Relations", function () { var rels = item2.getRelationsByPredicate(Zotero.Relations.relatedItemPredicate); assert.include(rels[0], "/users/1"); - yield Zotero.DB.executeTransaction(function* () { - yield Zotero.Relations.updateUser(1, 2); + yield Zotero.DB.executeTransaction(async function () { + await Zotero.Relations.updateUser(1, 2); }); var rels = item2.getRelationsByPredicate(Zotero.Relations.relatedItemPredicate); diff --git a/test/tests/tagSelectorTest.js b/test/tests/tagSelectorTest.js index 2b3c38bc94..e57b939b7f 100644 --- a/test/tests/tagSelectorTest.js +++ b/test/tests/tagSelectorTest.js @@ -145,10 +145,10 @@ describe("Tag Selector", function () { } ]); var promise = waitForTagSelector(win); - yield Zotero.DB.executeTransaction(function* () { - yield item1.save(); - yield item2.save(); - yield item3.save(); + yield Zotero.DB.executeTransaction(async function () { + await item1.save(); + await item2.save(); + await item3.save(); }); yield promise; @@ -177,10 +177,10 @@ describe("Tag Selector", function () { var item3 = createUnsavedDataObject('item', { collections: [collection.id] }); item3.setTags([tag3]); var promise = waitForTagSelector(win); - yield Zotero.DB.executeTransaction(function* () { - yield item1.save(); - yield item2.save(); - yield item3.save(); + yield Zotero.DB.executeTransaction(async function () { + await item1.save(); + await item2.save(); + await item3.save(); }); yield promise; diff --git a/test/tests/tagsTest.js b/test/tests/tagsTest.js index 30da777391..849a3167eb 100644 --- a/test/tests/tagsTest.js +++ b/test/tests/tagsTest.js @@ -142,8 +142,8 @@ describe("Zotero.Tags", function () { assert.equal(Zotero.Tags.getName(tagID), tagName); - yield Zotero.DB.executeTransaction(function* () { - yield Zotero.Tags.purge(); + yield Zotero.DB.executeTransaction(async function () { + await Zotero.Tags.purge(); }); assert.isFalse(Zotero.Tags.getName(tagID)); diff --git a/test/tests/translateTest.js b/test/tests/translateTest.js index 3078cd66b9..1cf83b3ca2 100644 --- a/test/tests/translateTest.js +++ b/test/tests/translateTest.js @@ -1709,13 +1709,13 @@ describe("Zotero.Translate.ItemGetter", function() { let getter = new Zotero.Translate.ItemGetter(); let items, itemIDs, itemURIs; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { items = [ - yield new Zotero.Item('journalArticle'), - yield new Zotero.Item('book') + await new Zotero.Item('journalArticle'), + await new Zotero.Item('book') ]; - itemIDs = [ yield items[0].save(), yield items[1].save() ]; + itemIDs = [ await items[0].save(), await items[1].save() ]; itemURIs = items.map(i => Zotero.URI.getItemURI(i)); }); @@ -1729,19 +1729,19 @@ describe("Zotero.Translate.ItemGetter", function() { let getter = new Zotero.Translate.ItemGetter(); let itemWithAutomaticTag, itemWithManualTag, itemWithMultipleTags - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { itemWithAutomaticTag = new Zotero.Item('journalArticle'); itemWithAutomaticTag.addTag('automatic tag', 0); - yield itemWithAutomaticTag.save(); + await itemWithAutomaticTag.save(); itemWithManualTag = new Zotero.Item('journalArticle'); itemWithManualTag.addTag('manual tag', 1); - yield itemWithManualTag.save(); + await itemWithManualTag.save(); itemWithMultipleTags = new Zotero.Item('journalArticle'); itemWithMultipleTags.addTag('tag1', 0); itemWithMultipleTags.addTag('tag2', 1); - yield itemWithMultipleTags.save(); + await itemWithMultipleTags.save(); }); let legacyMode = [false, true]; @@ -1778,14 +1778,14 @@ describe("Zotero.Translate.ItemGetter", function() { let getter = new Zotero.Translate.ItemGetter(); let items, collections; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { items = getter._itemsLeft = [ new Zotero.Item('journalArticle'), // Not in collection new Zotero.Item('journalArticle'), // In a single collection new Zotero.Item('journalArticle'), //In two collections new Zotero.Item('journalArticle') // In a nested collection ]; - yield Zotero.Promise.all(items.map(item => item.save())); + await Zotero.Promise.all(items.map(item => item.save())); collections = [ new Zotero.Collection, @@ -1797,16 +1797,16 @@ describe("Zotero.Translate.ItemGetter", function() { collections[1].name = "test2"; collections[2].name = "subTest1"; collections[3].name = "subTest2"; - yield collections[0].save(); - yield collections[1].save(); + await collections[0].save(); + await collections[1].save(); collections[2].parentID = collections[0].id; collections[3].parentID = collections[1].id; - yield collections[2].save(); - yield collections[3].save(); + await collections[2].save(); + await collections[3].save(); - yield collections[0].addItems([items[1].id, items[2].id]); - yield collections[1].addItem(items[2].id); - yield collections[2].addItem(items[3].id); + await collections[0].addItems([items[1].id, items[2].id]); + await collections[1].addItem(items[2].id); + await collections[2].addItem(items[3].id); }); let translatorItem = getter.nextItem(); @@ -1837,7 +1837,7 @@ describe("Zotero.Translate.ItemGetter", function() { let getter = new Zotero.Translate.ItemGetter(); let items; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { items = [ new Zotero.Item('journalArticle'), // Item with no relations @@ -1848,15 +1848,15 @@ describe("Zotero.Translate.ItemGetter", function() { new Zotero.Item('journalArticle'), // But this item is not related to the item below new Zotero.Item('journalArticle') ]; - yield Zotero.Promise.all(items.map(item => item.save())); + await Zotero.Promise.all(items.map(item => item.save())); - yield items[1].addRelatedItem(items[2]); - yield items[2].addRelatedItem(items[1]); + await items[1].addRelatedItem(items[2]); + await items[2].addRelatedItem(items[1]); - yield items[3].addRelatedItem(items[4]); - yield items[4].addRelatedItem(items[3]); - yield items[3].addRelatedItem(items[5]); - yield items[5].addRelatedItem(items[3]); + await items[3].addRelatedItem(items[4]); + await items[4].addRelatedItem(items[3]); + await items[3].addRelatedItem(items[5]); + await items[5].addRelatedItem(items[3]); }); getter._itemsLeft = items.slice(); @@ -1902,24 +1902,24 @@ describe("Zotero.Translate.ItemGetter", function() { it('should return standalone note in expected format', Zotero.Promise.coroutine(function* () { let relatedItem, note, collection; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { relatedItem = new Zotero.Item('journalArticle'); - yield relatedItem.save(); + await relatedItem.save(); note = new Zotero.Item('note'); note.setNote('Note'); note.addTag('automaticTag', 0); note.addTag('manualTag', 1); note.addRelatedItem(relatedItem); - yield note.save(); + await note.save(); relatedItem.addRelatedItem(note); - yield relatedItem.save(); + await relatedItem.save(); collection = new Zotero.Collection; collection.name = 'test'; - yield collection.save(); - yield collection.addItem(note.id); + await collection.save(); + await collection.addItem(note.id); }); let legacyMode = [false, true]; @@ -1985,32 +1985,32 @@ describe("Zotero.Translate.ItemGetter", function() { })); it('should return attached note in expected format', Zotero.Promise.coroutine(function* () { let relatedItem, items, collection, note; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { relatedItem = new Zotero.Item('journalArticle'); - yield relatedItem.save(); + await relatedItem.save(); items = [ new Zotero.Item('journalArticle'), new Zotero.Item('journalArticle') ]; - yield Zotero.Promise.all(items.map(item => item.save())); + await Zotero.Promise.all(items.map(item => item.save())); collection = new Zotero.Collection; collection.name = 'test'; - yield collection.save(); - yield collection.addItem(items[0].id); - yield collection.addItem(items[1].id); + await collection.save(); + await collection.addItem(items[0].id); + await collection.addItem(items[1].id); note = new Zotero.Item('note'); note.setNote('Note'); note.addTag('automaticTag', 0); note.addTag('manualTag', 1); - yield note.save(); + await note.save(); note.addRelatedItem(relatedItem); relatedItem.addRelatedItem(note); - yield note.save(); - yield relatedItem.save(); + await note.save(); + await relatedItem.save(); }); let legacyMode = [false, true]; @@ -2094,11 +2094,11 @@ describe("Zotero.Translate.ItemGetter", function() { let file = getTestPDF(); let item, relatedItem; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { item = new Zotero.Item('journalArticle'); - yield item.save(); + await item.save(); relatedItem = new Zotero.Item('journalArticle'); - yield relatedItem.save(); + await relatedItem.save(); }); // Attachment items @@ -2110,7 +2110,7 @@ describe("Zotero.Translate.ItemGetter", function() { yield Zotero.Attachments.linkFromURL({"url":'http://example.com', "parentItemID":item.id, "contentType":'application/pdf', "title":'empty.pdf'}) // Attached link to URL ]; - yield Zotero.DB.executeTransaction(function* () { + yield Zotero.DB.executeTransaction(async function () { // Make sure all fields are populated for (let i=0; i