diff --git a/chrome/content/zotero/downloadOverlay.js b/chrome/content/zotero/downloadOverlay.js index ef3d7f22b..e6bfd2301 100644 --- a/chrome/content/zotero/downloadOverlay.js +++ b/chrome/content/zotero/downloadOverlay.js @@ -49,7 +49,7 @@ var Zotero_DownloadOverlay = new function() { * * @return {Boolean} True if an item was saved, false if we were not supposed to save */ - this.handleSave = function() { + this.handleSave = Zotero.Promise.coroutine(function* () { if(!document.getElementById('zotero-radio').selected) return false; var retrieveMetadata = document.getElementById('zotero-recognizePDF').selected; @@ -72,6 +72,7 @@ var Zotero_DownloadOverlay = new function() { else { Zotero.debug("Cannot save files to library " + itemGroup.ref.libraryID + " -- saving to personal library instead", 2); + libraryID = Zotero.Libraries.userLibraryID; } } catch(e) { Zotero.debug(e, 1); @@ -80,34 +81,10 @@ var Zotero_DownloadOverlay = new function() { var recognizePDF = document.getElementById('zotero-recognizePDF').checked && !document.getElementById('zotero-recognizePDF').hidden && !document.getElementById('zotero-recognizePDF').disabled; + var contentType = dialog.mLauncher.MIMEInfo.MIMEType; - // set up callback - var callback = function(item) { - if(!win) return; - - if(item) { - progressWin.addLines([item.getDisplayTitle()], [item.getImageSrc()]); - progressWin.startCloseTimer(); - if(collection) collection.addItem(item.id); - } else { - progressWin.addDescription(Zotero.getString("save.link.error")); - progressWin.startCloseTimer(8000); - } - - if(recognizePDF) { - var timer = Components.classes["@mozilla.org/timer;1"] - .createInstance(Components.interfaces.nsITimer); - timer.init(function() { - try { - if(item.getFile()) { - timer.cancel(); - var recognizer = new win.Zotero_RecognizePDF.ItemRecognizer(); - recognizer.recognizeItems([item]); - } - } catch(e) { dump(e.toSource()) }; - }, 1000, Components.interfaces.nsITimer.TYPE_REPEATING_SLACK); - } - }; + // mimic dialog cancellation + dialog.onCancel(); // show progress dialog var progressWin = new Zotero.ProgressWindow(); @@ -115,15 +92,44 @@ var Zotero_DownloadOverlay = new function() { progressWin.show(); // perform import - Zotero.Attachments.importFromURL(url, false, false, false, - collection ? [collection.id] : [], dialog.mLauncher.MIMEInfo.MIMEType, - libraryID, callback); + try { + var item = yield Zotero.Attachments.importFromURL({ + libraryID, + url, + collections: collection ? [collection.id] : [], + contentType + }) + } + catch (e) { + if (!win) return; + progressWin.addDescription(Zotero.getString("save.link.error")); + progressWin.startCloseTimer(8000); + Zotero.logError(e); + return false; + } - // mimic dialog cancellation - dialog.onCancel(); + if(!win) return; + + progressWin.addLines([item.getDisplayTitle()], [item.getImageSrc()]); + progressWin.startCloseTimer(); + if(collection) collection.addItem(item.id); + + if(recognizePDF) { + var timer = Components.classes["@mozilla.org/timer;1"] + .createInstance(Components.interfaces.nsITimer); + timer.init(function() { + try { + if (item && item.getFile()) { + timer.cancel(); + var recognizer = new win.Zotero_RecognizePDF.ItemRecognizer(); + recognizer.recognizeItems([item]); + } + } catch(e) { dump(e.toSource()) }; + }, 1000, Components.interfaces.nsITimer.TYPE_REPEATING_SLACK); + } return true; - }; + }); /** * Called when mode in dialog has been changed @@ -188,9 +194,9 @@ var Zotero_DownloadOverlay = new function() { // Hook in event listener to ondialogaccept document.documentElement.setAttribute('ondialogaccept', - 'if(!Zotero_DownloadOverlay.handleSave()) { ' + 'Zotero_DownloadOverlay.handleSave().then(function (saved) { if (!saved) {' + document.documentElement.getAttribute('ondialogaccept') - +'}'); + +'}})'); // Hook in event listener for mode change var radios = document.getElementById('mode'). diff --git a/chrome/content/zotero/xpcom/attachments.js b/chrome/content/zotero/xpcom/attachments.js index d031bf313..ed1a1e3ad 100644 --- a/chrome/content/zotero/xpcom/attachments.js +++ b/chrome/content/zotero/xpcom/attachments.js @@ -221,7 +221,7 @@ Zotero.Attachments = new function(){ /** - * @param {Object} options - 'url', 'parentItemID', 'collections', 'title', + * @param {Object} options - 'libraryID', 'url', 'parentItemID', 'collections', 'title', * 'fileBaseName', 'contentType', 'cookieSandbox' * @return {Promise} - A promise for the created attachment item */ @@ -247,8 +247,7 @@ Zotero.Attachments = new function(){ var urlRe = /^https?:\/\/[^\s]*$/; var matches = urlRe.exec(url); if (!matches) { - Components.utils.reportError("Invalid URL '" + url + "' in Zotero.Attachments.importFromURL()"); - return false; + throw new Error("Invalid URL '" + url + "'"); } // Save using a hidden browser