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');
|
var styleUpdates = xmlhttp.responseXML.getElementsByTagName('style');
|
||||||
|
|
||||||
_showRepositoryMessage(xmlhttp.responseXML);
|
_showRepositoryMessage(xmlhttp.responseXML);
|
||||||
|
_checkRepositoryPrefs(xmlhttp.responseXML);
|
||||||
|
|
||||||
if (!translatorUpdates.length && !styleUpdates.length){
|
if (!translatorUpdates.length && !styleUpdates.length){
|
||||||
await Zotero.DB.executeTransaction(async function (conn) {
|
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
|
* Set the interval between repository queries
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue