The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/app/settings/lib/settings.js

88 lines
2.3 KiB

import { Meteor } from 'meteor/meteor';
import _ from 'underscore';
export const settings = {
callbacks: {},
regexCallbacks: {},
ts: new Date(),
get(_id, callback) {
if (callback != null) {
settings.onload(_id, callback);
if (!Meteor.settings) {
return;
}
if (_id === '*') {
return Object.keys(Meteor.settings).forEach((key) => {
const value = Meteor.settings[key];
callback(key, value);
});
}
if (_.isRegExp(_id) && Meteor.settings) {
return Object.keys(Meteor.settings).forEach((key) => {
if (!_id.test(key)) {
return;
}
const value = Meteor.settings[key];
callback(key, value);
});
}
return Meteor.settings[_id] != null && callback(_id, Meteor.settings[_id]);
}
if (!Meteor.settings) {
return;
}
if (_.isRegExp(_id)) {
return Object.keys(Meteor.settings).reduce((items, key) => {
const value = Meteor.settings[key];
if (_id.test(key)) {
items.push({
key,
value,
});
}
return items;
}, []);
}
return Meteor.settings && Meteor.settings[_id];
},
set(_id, value, callback) {
return Meteor.call('saveSetting', _id, value, callback);
},
batchSet(settings, callback) {
return Meteor.call('saveSettings', settings, callback);
},
load(key, value, initialLoad) {
['*', key].forEach((item) => {
if (settings.callbacks[item]) {
settings.callbacks[item].forEach((callback) => callback(key, value, initialLoad));
}
});
Object.keys(settings.regexCallbacks).forEach((cbKey) => {
const cbValue = settings.regexCallbacks[cbKey];
if (!cbValue.regex.test(key)) {
return;
}
cbValue.callbacks.forEach((callback) => callback(key, value, initialLoad));
});
},
onload(key, callback) {
// if key is '*'
// for key, value in Meteor.settings
// callback key, value, false
// else if Meteor.settings?[_id]?
// callback key, Meteor.settings[_id], false
const keys = [].concat(key);
keys.forEach((k) => {
if (_.isRegExp(k)) {
settings.regexCallbacks[name = k.source] = settings.regexCallbacks[name = k.source] || {
regex: k,
callbacks: [],
};
settings.regexCallbacks[k.source].callbacks.push(callback);
} else {
settings.callbacks[k] = settings.callbacks[k] || [];
settings.callbacks[k].push(callback);
}
});
},
};