fix only-send-changed-preferences check for objects

before preference values which are objects have been always send again
trying to fix "storm" of set_preference() calls by mail splitter
This commit is contained in:
Ralf Becker 2019-01-22 10:09:47 +01:00
parent e97a9d991e
commit de27dd3ed3

View File

@ -83,15 +83,26 @@ egw.extend('preferences', egw.MODULE_GLOBAL, function()
* *
* Server will silently ignore setting preferences, if user has no right to do so! * Server will silently ignore setting preferences, if user has no right to do so!
* *
* Preferences are only send to server, if they are changed!
*
* @param {string} _app application name or "common" * @param {string} _app application name or "common"
* @param {string} _name name of the pref * @param {string} _name name of the pref
* @param {string} _val value of the pref, null, undefined or "" to unset it * @param {string} _val value of the pref, null, undefined or "" to unset it
* @param {function} _callback Function passed along to the queue, called after preference is set server-side * @param {function} _callback Function passed along to the queue, called after preference is set server-side,
* IF the preference is changed / has a value different from the current one
*/ */
set_preference: function(_app, _name, _val, _callback) set_preference: function(_app, _name, _val, _callback)
{ {
// if there is no change, no need to submit it to server // if there is no change, no need to submit it to server
if (typeof prefs[_app] != 'undefined' && prefs[_app][_name] === _val) return; if (typeof prefs[_app] != 'undefined')
{
var current = prefs[_app][_name];
var setting = _val;
// to compare objects we serialize them
if (typeof current == 'object') current = JSON.stringify(current);
if (typeof setting == 'object') setting = JSON.stringify(setting);
if (setting === current) return;
}
this.jsonq('EGroupware\\Api\\Framework::ajax_set_preference',[_app, _name, _val], _callback); this.jsonq('EGroupware\\Api\\Framework::ajax_set_preference',[_app, _name, _val], _callback);