diff --git a/chrome/content/zotero/preferences/preferences_advanced.js b/chrome/content/zotero/preferences/preferences_advanced.js index f99e41d10c..e5eee66599 100644 --- a/chrome/content/zotero/preferences/preferences_advanced.js +++ b/chrome/content/zotero/preferences/preferences_advanced.js @@ -323,69 +323,77 @@ Zotero_Preferences.Advanced = { Zotero_Preferences.Attachment_Base_Directory = { - choosePath: function () { - // Get existing base directory - var oldBasePath = Zotero.Prefs.get('baseAttachmentPath'); - if (oldBasePath) { - var oldBasePathFile = Components.classes["@mozilla.org/file/local;1"] - .createInstance(Components.interfaces.nsILocalFile); + getPath: function () { + var oldPath = Zotero.Prefs.get('baseAttachmentPath'); + if (oldPath) { try { - oldBasePathFile.persistentDescriptor = oldBasePath; + return OS.Path.normalize(oldPath); } catch (e) { - Zotero.debug(e, 1); - Components.utils.reportError(e); - oldBasePathFile = null; + Zotero.logError(e); + return false; } } + }, + + + choosePath: Zotero.Promise.coroutine(function* () { + var oldPath = this.getPath(); //Prompt user to choose new base path + if (oldPath) { + var oldPathFile = Zotero.File.pathToFile(oldPath); + } var nsIFilePicker = Components.interfaces.nsIFilePicker; var fp = Components.classes["@mozilla.org/filepicker;1"] .createInstance(nsIFilePicker); - if (oldBasePathFile) { - fp.displayDirectory = oldBasePathFile; + if (oldPathFile) { + fp.displayDirectory = oldPathFile; } fp.init(window, Zotero.getString('attachmentBasePath.selectDir'), nsIFilePicker.modeGetFolder); fp.appendFilters(nsIFilePicker.filterAll); if (fp.show() != nsIFilePicker.returnOK) { return false; } - var newBasePathFile = fp.file; + var newPath = OS.Path.normalize(fp.file.path); - if (oldBasePathFile && oldBasePathFile.equals(newBasePathFile)) { + if (oldPath && oldPath == newPath) { Zotero.debug("Base directory hasn't changed"); return false; } + return changePath(newPath); + }), + + + changePath: Zotero.Promise.coroutine(function* (basePath) { // Find all current attachments with relative attachment paths var sql = "SELECT itemID FROM itemAttachments WHERE linkMode=? AND path LIKE '" + Zotero.Attachments.BASE_PATH_PLACEHOLDER + "%'"; var params = [Zotero.Attachments.LINK_MODE_LINKED_FILE]; - var oldRelativeAttachmentIDs = Zotero.DB.columnQuery(sql, params) || []; + var oldRelativeAttachmentIDs = yield Zotero.DB.columnQueryAsync(sql, params); //Find all attachments on the new base path var sql = "SELECT itemID FROM itemAttachments WHERE linkMode=?"; var params = [Zotero.Attachments.LINK_MODE_LINKED_FILE]; - var allAttachments = Zotero.DB.columnQuery(sql,params); + var allAttachments = yield Zotero.DB.columnQueryAsync(sql, params); var newAttachmentPaths = {}; var numNewAttachments = 0; var numOldAttachments = 0; - var attachmentFile = Components.classes["@mozilla.org/file/local;1"] - .createInstance(Components.interfaces.nsILocalFile); for (let i=0; i -