Add mechanism for setting preferences remotely
Limited to a hard-coded list Initially limited to `extensions.zotero.import.mendeleyUseOAuth`, to switch the Mendeley importer from direct login to OAuth
This commit is contained in:
parent
da392518ed
commit
4184dc18d2
1 changed files with 54 additions and 0 deletions
|
@ -2337,6 +2337,7 @@ Zotero.Schema = new function(){
|
|||
var styleUpdates = xmlhttp.responseXML.getElementsByTagName('style');
|
||||
|
||||
_showRepositoryMessage(xmlhttp.responseXML);
|
||||
_checkRepositoryPrefs(xmlhttp.responseXML);
|
||||
|
||||
if (!translatorUpdates.length && !styleUpdates.length){
|
||||
await Zotero.DB.executeTransaction(async function (conn) {
|
||||
|
@ -2491,6 +2492,59 @@ Zotero.Schema = new function(){
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check for remotely set preferences
|
||||
*
|
||||
* Format:
|
||||
*
|
||||
* <prefs>
|
||||
* <prefset version="1">
|
||||
* <pref name="extensions.zotero.import.mendeleyUseOAuth" value="true" />
|
||||
* </prefset>
|
||||
* </prefs>
|
||||
*
|
||||
* Prefsets must be in increasing order
|
||||
*
|
||||
* @param {XMLDocument} responseXML - Response document from repository
|
||||
*/
|
||||
function _checkRepositoryPrefs(responseXML) {
|
||||
const allowedPrefs = new Set([
|
||||
'extensions.zotero.import.mendeleyUseOAuth'
|
||||
]);
|
||||
try {
|
||||
var prefsElem = responseXML.querySelector('prefs');
|
||||
if (!prefsElem) {
|
||||
return;
|
||||
}
|
||||
var prefsets = prefsElem.querySelectorAll('prefset');
|
||||
for (let prefset of prefsets) {
|
||||
let version = parseInt(prefset.getAttribute('version'));
|
||||
let pref = prefset.querySelector('pref');
|
||||
if (!pref) {
|
||||
Zotero.logError('<pref> not found within <prefset>');
|
||||
continue;
|
||||
}
|
||||
if (version <= Zotero.Prefs.get('prefVersion.remote')) {
|
||||
break;
|
||||
}
|
||||
let name = pref.getAttribute('name');
|
||||
if (!allowedPrefs.has(name)) {
|
||||
Zotero.logError(`${name} cannot be set remotely`);
|
||||
continue;
|
||||
}
|
||||
let value = pref.getAttribute('value');
|
||||
if (value == "true") value = true;
|
||||
if (value == "false") value = false;
|
||||
Zotero.Prefs.set(name, value, true);
|
||||
Zotero.Prefs.set('prefVersion.remote', version);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the interval between repository queries
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue