Add API for setting and accessing user settings
This commit is contained in:
parent
6391cc0803
commit
e498657323
@ -274,6 +274,24 @@ Object.assign(_converse, Events);
|
|||||||
pluggable.enable(_converse, '_converse', 'pluggable');
|
pluggable.enable(_converse, '_converse', 'pluggable');
|
||||||
|
|
||||||
|
|
||||||
|
// Populated via the _converse.api.users.settings API
|
||||||
|
const user_settings = new Model();
|
||||||
|
|
||||||
|
function initUserSettings () {
|
||||||
|
if (!_converse.bare_jid) {
|
||||||
|
const msg = "No JID to fetch user settings for";
|
||||||
|
log.error(msg);
|
||||||
|
throw Error(msg);
|
||||||
|
}
|
||||||
|
if (!user_settings.fetched) {
|
||||||
|
const id = `converse.user-settings.${_converse.bare_jid}`;
|
||||||
|
user_settings.browserStorage = _converse.createStore(id, "session");
|
||||||
|
user_settings.fetched = user_settings.fetch({'promise': true});
|
||||||
|
}
|
||||||
|
return user_settings.fetched;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ### The private API
|
* ### The private API
|
||||||
*
|
*
|
||||||
@ -501,6 +519,46 @@ const api = _converse.api = {
|
|||||||
complete();
|
complete();
|
||||||
}
|
}
|
||||||
return promise;
|
return promise;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API for accessing and setting user settings. User settings are
|
||||||
|
* different from the application settings from {@link _converse.api.settings}
|
||||||
|
* because they are per-user and set via user action.
|
||||||
|
* @namespace _converse.api.user.settings
|
||||||
|
* @memberOf _converse.api.user
|
||||||
|
*/
|
||||||
|
settings: {
|
||||||
|
/**
|
||||||
|
* Get the value of a particular user setting.
|
||||||
|
* @method _converse.api.user.settings.get
|
||||||
|
* @returns {Promise} Promise which resolves with the value of the particular configuration setting.
|
||||||
|
* @example _converse.api.user.settings.get("foo");
|
||||||
|
*/
|
||||||
|
async get (key) {
|
||||||
|
await initUserSettings();
|
||||||
|
return user_settings.get(key);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set one or many user settings.
|
||||||
|
* @async
|
||||||
|
* @method _converse.api.user.settings.set
|
||||||
|
* @param {Object} [settings] An object containing configuration settings.
|
||||||
|
* @param {string} [key] Alternatively to passing in an object, you can pass in a key and a value.
|
||||||
|
* @param {string} [value]
|
||||||
|
* @example _converse.api.user.settings.set("foo", "bar");
|
||||||
|
* @example
|
||||||
|
* _converse.api.user.settings.set({
|
||||||
|
* "foo": "bar",
|
||||||
|
* "baz": "buz"
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
async set (key, val) {
|
||||||
|
await initUserSettings();
|
||||||
|
const o = isObject(key) ? key : {key: val};
|
||||||
|
return user_settings.save(o, {'promise': true});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -533,7 +591,7 @@ const api = _converse.api = {
|
|||||||
update (settings) {
|
update (settings) {
|
||||||
u.merge(DEFAULT_SETTINGS, settings);
|
u.merge(DEFAULT_SETTINGS, settings);
|
||||||
u.merge(_converse, settings);
|
u.merge(_converse, settings);
|
||||||
u.applySiteSettings(_converse, settings, _converse.site_settings);
|
u.applySiteSettings(_converse, settings, site_settings);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -560,8 +618,8 @@ const api = _converse.api = {
|
|||||||
* @example _converse.api.settings.set("play_sounds", true);
|
* @example _converse.api.settings.set("play_sounds", true);
|
||||||
* @example
|
* @example
|
||||||
* _converse.api.settings.set({
|
* _converse.api.settings.set({
|
||||||
* "play_sounds", true,
|
* "play_sounds": true,
|
||||||
* "hide_offline_users" true
|
* "hide_offline_users": true
|
||||||
* });
|
* });
|
||||||
*/
|
*/
|
||||||
set (key, val) {
|
set (key, val) {
|
||||||
@ -1588,13 +1646,15 @@ async function initLocale () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let site_settings;
|
||||||
|
|
||||||
function initSettings (settings) {
|
function initSettings (settings) {
|
||||||
_converse.settings = {};
|
_converse.settings = {};
|
||||||
assignIn(_converse.settings, DEFAULT_SETTINGS);
|
assignIn(_converse.settings, DEFAULT_SETTINGS);
|
||||||
// Allow only whitelisted configuration attributes to be overwritten
|
// Allow only whitelisted configuration attributes to be overwritten
|
||||||
assignIn(_converse.settings, pick(settings, Object.keys(DEFAULT_SETTINGS)));
|
assignIn(_converse.settings, pick(settings, Object.keys(DEFAULT_SETTINGS)));
|
||||||
assignIn(_converse, _converse.settings);
|
assignIn(_converse, _converse.settings);
|
||||||
_converse.site_settings = settings;
|
site_settings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user