www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit b22850efed43e8a9ffa697f0fea8494e8bc38bb0
parent a5b222edacdc5074a2f6e2d1ca1823131587f94a
Author: Dan Stillman <dstillman@zotero.org>
Date:   Tue,  1 Nov 2016 02:14:25 -0400

Update data dir prefs for new default location

- Show "Default (<path>)" for default option unless set to profile directory
- Don't try to restart on selection if location hasn't changed

Diffstat:
Mchrome/content/zotero/preferences/preferences_advanced.js | 61+++++++++++++++++++++++++++++++++++++++++++++++++------------
Mchrome/content/zotero/preferences/preferences_advanced.xul | 4++--
Mchrome/content/zotero/xpcom/zotero.js | 41++++++++++++++++++++++++++++++-----------
Mchrome/locale/en-US/zotero/zotero.properties | 3++-
4 files changed, 83 insertions(+), 26 deletions(-)

diff --git a/chrome/content/zotero/preferences/preferences_advanced.js b/chrome/content/zotero/preferences/preferences_advanced.js @@ -32,6 +32,8 @@ Zotero_Preferences.Advanced = { init: function () { Zotero_Preferences.Debug_Output.init(); Zotero_Preferences.Keys.init(); + + this.onDataDirLoad(); }, revealDataDirectory: function () { @@ -190,9 +192,25 @@ Zotero_Preferences.Advanced = { onDataDirLoad: function () { - var path = document.getElementById('dataDirPath'); var useDataDir = Zotero.Prefs.get('useDataDir'); - path.setAttribute('disabled', !useDataDir); + var dataDir = Zotero.Prefs.get('lastDataDir') || Zotero.Prefs.get('dataDir'); + var defaultDataDir = Zotero.getDefaultDataDir(); + + // Change "Use profile directory" label to home directory location unless using profile dir + if (useDataDir || Zotero.getZoteroDirectory().path == defaultDataDir) { + document.getElementById('defaultDataDir').setAttribute( + 'label', Zotero.getString('dataDir.default', Zotero.getDefaultDataDir()) + ); + } + + // Don't show custom data dir as in-use if set to the default + if (dataDir == defaultDataDir) { + useDataDir = false; + } + + document.getElementById('dataDirPath').setAttribute('disabled', !useDataDir); + + return useDataDir; }, @@ -201,20 +219,16 @@ Zotero_Preferences.Advanced = { var useDataDir = Zotero.Prefs.get('useDataDir'); var newUseDataDir = radiogroup.selectedIndex == 1; - if (newUseDataDir == useDataDir && !useDataDir) { + if (newUseDataDir && !this._usingDefaultDataDir()) { return; } - - // This call shows a filepicker if needed, - // forces a restart if required - // and does nothing if cancel was pressed + + // This call shows a filepicker if needed, forces a restart if required, and does nothing if + // cancel was pressed or value hasn't changed Zotero.chooseZoteroDirectory(true, !newUseDataDir, function () { Zotero_Preferences.openURL('http://zotero.org/support/zotero_data'); }); - useDataDir = Zotero.Prefs.get('useDataDir'); - radiogroup.selectedIndex = useDataDir ? 1 : 0; - - return useDataDir; + radiogroup.selectedIndex = this._usingDefaultDataDir() ? 0 : 1; }, @@ -227,7 +241,30 @@ Zotero_Preferences.Advanced = { getDataDirPath: function () { // TEMP: lastDataDir can be removed once old persistent descriptors have been // converted, which they are in getZoteroDirectory() in 5.0 - return Zotero.Prefs.get('lastDataDir') || Zotero.Prefs.get('dataDir') || ''; + var prefValue = Zotero.Prefs.get('lastDataDir') || Zotero.Prefs.get('dataDir'); + + // Don't show path if the default + if (prefValue == Zotero.getDefaultDataDir()) { + return ''; + } + + return prefValue || ''; + }, + + + _usingDefaultDataDir: function () { + // Legacy profile directory location + if (!Zotero.Prefs.get('useDataDir')) { + return true; + } + + var dataDir = Zotero.Prefs.get('lastDataDir') || Zotero.Prefs.get('dataDir'); + // Default home directory location + if (dataDir == Zotero.getDefaultDataDir()) { + return true; + } + + return false; }, diff --git a/chrome/content/zotero/preferences/preferences_advanced.xul b/chrome/content/zotero/preferences/preferences_advanced.xul @@ -184,9 +184,9 @@ <radiogroup id="dataDir" preference="pref-useDataDir" - onsyncfrompreference="Zotero_Preferences.Advanced.onDataDirLoad();" + onsyncfrompreference="return Zotero_Preferences.Advanced.onDataDirLoad()" onsynctopreference="return Zotero_Preferences.Advanced.onDataDirUpdate(event);"> - <radio label="&zotero.preferences.dataDir.useProfile;" value="false"/> + <radio id="defaultDataDir" label="&zotero.preferences.dataDir.useProfile;" value="false"/> <hbox> <radio label="&zotero.preferences.dataDir.custom;" value="true"/> <textbox id="dataDirPath" preference="pref-dataDir" diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js @@ -290,11 +290,11 @@ Components.utils.import("resource://gre/modules/osfile.jsm"); Zotero.startupError + '\n\n' + Zotero.getString('dataDir.previousDir') + ' ' + previousDir, buttonFlags, null, - Zotero.getString('dataDir.useProfileDir', Zotero.appName), + Zotero.getString('dataDir.useDefaultLocation'), Zotero.getString('general.locate'), null, {}); - // Revert to profile directory + // Revert to home directory if (index == 1) { Zotero.chooseZoteroDirectory(false, true); } @@ -921,9 +921,9 @@ Components.utils.import("resource://gre/modules/osfile.jsm"); return _zoteroDirectory.clone(); } + var file = Components.classes["@mozilla.org/file/local;1"] + .createInstance(Components.interfaces.nsILocalFile); if (Zotero.Prefs.get('useDataDir')) { - var file = Components.classes["@mozilla.org/file/local;1"]. - createInstance(Components.interfaces.nsILocalFile); let prefVal = Zotero.Prefs.get('dataDir'); // Convert old persistent descriptor pref to string path and clear obsolete lastDataDir pref // @@ -960,8 +960,7 @@ Components.utils.import("resource://gre/modules/osfile.jsm"); } } else { - let homeDir = OS.Constants.Path.homeDir; - let dataDir = OS.Path.join(homeDir, ZOTERO_CONFIG.CLIENT_NAME); + let dataDir = this.getDefaultDataDir(); // // TODO: asyncify @@ -1088,6 +1087,11 @@ Components.utils.import("resource://gre/modules/osfile.jsm"); } + this.getDefaultDataDir = function () { + return OS.Path.join(OS.Constants.Path.homeDir, ZOTERO_CONFIG.CLIENT_NAME); + }; + + function getStorageDirectory(){ var file = Zotero.getZoteroDirectory(); @@ -1145,12 +1149,15 @@ Components.utils.import("resource://gre/modules/osfile.jsm"); } - function chooseZoteroDirectory(forceQuitNow, useProfileDir, moreInfoCallback) { + function chooseZoteroDirectory(forceQuitNow, useHomeDir, moreInfoCallback) { var win = Services.wm.getMostRecentWindow('navigator:browser'); var ps = Services.prompt; - if (useProfileDir) { - Zotero.Prefs.set('useDataDir', false); + if (useHomeDir) { + let changed = this.setDataDirectory(this.getDefaultDataDir()); + if (!changed) { + return false; + } } else { var nsIFilePicker = Components.interfaces.nsIFilePicker; @@ -1164,7 +1171,12 @@ Components.utils.import("resource://gre/modules/osfile.jsm"); var file = fp.file; let dialogText = ''; let dialogTitle = ''; - + + if (file.path == (Zotero.Prefs.get('lastDataDir') || Zotero.Prefs.get('dataDir'))) { + Zotero.debug("Data directory hasn't changed"); + return false; + } + // In dropbox folder if (Zotero.File.isDropboxDirectory(file.path)) { dialogTitle = Zotero.getString('general.warning'); @@ -1242,7 +1254,7 @@ Components.utils.import("resource://gre/modules/osfile.jsm"); Services.startup.quit(Components.interfaces.nsIAppStartup.eAttemptQuit); } - return useProfileDir ? true : file; + return useHomeDir ? true : file; } @@ -1309,11 +1321,18 @@ Components.utils.import("resource://gre/modules/osfile.jsm"); } + /** + * @return {Boolean} - True if the directory changed; false otherwise + */ this.setDataDirectory = function (path) { + var origPath = Zotero.Prefs.get('dataDir'); + Zotero.Prefs.set('dataDir', path); // Clear legacy pref Zotero.Prefs.clear('lastDataDir'); Zotero.Prefs.set('useDataDir', true); + + return path != origPath; }; diff --git a/chrome/locale/en-US/zotero/zotero.properties b/chrome/locale/en-US/zotero/zotero.properties @@ -111,7 +111,8 @@ attachmentBasePath.clearBasePath.button = Clear Base Dire dataDir.notFound = The Zotero data directory could not be found. dataDir.previousDir = Previous directory: -dataDir.useProfileDir = Use %S profile directory +dataDir.default = Default (%S) +dataDir.useDefaultLocation = Use Default Location dataDir.selectDir = Select a Zotero data directory dataDir.selectNewDir = Select a new %S data directory dataDir.changeDataDirectory = Change Data Directory…