forked from matrix/element-web
PushRules settings: Use a workaround for SYN-590 (Push rule update fails)
This commit is contained in:
parent
b9080c770d
commit
9fb8c9f67a
|
@ -80,24 +80,49 @@ module.exports = React.createClass({
|
|||
phase: this.phases.LOADING
|
||||
});
|
||||
|
||||
var enabled = true;
|
||||
switch (newPushRuleState) {
|
||||
case PushRuleState.OFF:
|
||||
enabled = false;
|
||||
break
|
||||
}
|
||||
|
||||
// Update all rules in self.state.vectorContentRules
|
||||
var deferreds = [];
|
||||
for (var i in this.state.vectorContentRules.rules) {
|
||||
var rule = this.state.vectorContentRules.rules[i];
|
||||
|
||||
var enabled;
|
||||
var actions;
|
||||
switch (newPushRuleState) {
|
||||
case PushRuleState.ON:
|
||||
if (rule.actions.length !== 1) {
|
||||
actions = ['notify'];
|
||||
}
|
||||
|
||||
if (enabled) {
|
||||
deferreds.push(cli.addPushRule('global', rule.kind, rule.rule_id, rule));
|
||||
if (this.state.vectorContentRules.state === PushRuleState.OFF) {
|
||||
enabled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case PushRuleState.STRONG:
|
||||
if (rule.actions.length !== 3) {
|
||||
actions = ['notify',
|
||||
{'set_tweak': 'sound', 'value': 'default'},
|
||||
{'set_tweak': 'highlight', 'value': 'true'}
|
||||
];
|
||||
}
|
||||
|
||||
if (this.state.vectorContentRules.state === PushRuleState.OFF) {
|
||||
enabled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case PushRuleState.OFF:
|
||||
enabled = false;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
deferreds.push(cli.setPushRuleEnabled('global', rule.kind, rule.rule_id, false));
|
||||
|
||||
if (actions) {
|
||||
// Note that the workaound in _updatePushRuleActions will automatically
|
||||
// enable the rule
|
||||
deferreds.push(this._updatePushRuleActions(rule, actions));
|
||||
}
|
||||
else if (enabled != undefined) {
|
||||
deferreds.push(cli.setPushRuleEnabled('global', rule.kind, rule.rule_id, enabled));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -114,7 +139,7 @@ module.exports = React.createClass({
|
|||
else {
|
||||
var rule = this.getRule(vectorRuleId);
|
||||
|
||||
// For now, we support only enabled/disabled.
|
||||
// For now, we support only enabled/disabled for hs default rules
|
||||
// Translate ON, STRONG, OFF to one of the 2.
|
||||
if (rule && rule.state !== newPushRuleState) {
|
||||
|
||||
|
@ -335,6 +360,28 @@ module.exports = React.createClass({
|
|||
});
|
||||
},
|
||||
|
||||
_updatePushRuleActions: function(rule, actions) {
|
||||
// Workaround for SYN-590 : Push rule update fails
|
||||
// Remove the rule and recreate it with the new actions
|
||||
var cli = MatrixClientPeg.get();
|
||||
var deferred = q.defer();
|
||||
|
||||
cli.deletePushRule('global', rule.kind, rule.rule_id).done(function() {
|
||||
cli.addPushRule('global', rule.kind, rule.rule_id, {
|
||||
actions: actions,
|
||||
pattern: rule.pattern
|
||||
}).done(function() {
|
||||
deferred.resolve();
|
||||
}, function(err) {
|
||||
deferred.reject(err);
|
||||
});
|
||||
}, function(err) {
|
||||
deferred.reject(err);
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
},
|
||||
|
||||
renderNotifRulesTableRow: function(title, className, pushRuleState, disabled) {
|
||||
return (
|
||||
<tr key = {className}>
|
||||
|
|
Loading…
Reference in New Issue