PushRules settings: BF when adding a new keyword with the keywords rule in Off

This commit is contained in:
manuroe 2016-01-13 17:56:59 +01:00
parent 0475bcd9de
commit 629883731e
1 changed files with 44 additions and 14 deletions

View File

@ -238,9 +238,24 @@ module.exports = React.createClass({
for (var i in newKeywords) { for (var i in newKeywords) {
var keyword = newKeywords[i]; var keyword = newKeywords[i];
var pushRuleStateKind = self.state.vectorContentRules.state;
if (pushRuleStateKind === PushRuleState.OFF) {
// When the current global keywords rule is OFF, we need to look at
// the flavor of rules in 'vectorContentRules' to apply the same actions
// when creating the new rule.
// Thus, this new rule will join the 'vectorContentRules' set.
if (self.state.vectorContentRules.rules.length) {
pushRuleStateKind = self._pushRuleStateKind(self.state.vectorContentRules.rules[0]);
}
else {
// ON is default
pushRuleStateKind = PushRuleState.ON;
}
}
if (vectorContentRulesPatterns.indexOf(keyword) < 0) { if (vectorContentRulesPatterns.indexOf(keyword) < 0) {
deferreds.push(cli.addPushRule('global', 'content', keyword, { deferreds.push(cli.addPushRule('global', 'content', keyword, {
actions: self._actionsFor(self.state.vectorContentRules.state), actions: self._actionsFor(pushRuleStateKind),
pattern: keyword pattern: keyword
})); }));
} }
@ -276,6 +291,31 @@ module.exports = React.createClass({
} }
}, },
// Determine whether a rule is in the PushRuleState.ON category or in PushRuleState.LOUD
// regardless of its enabled state.
_pushRuleStateKind: function(rule) {
var stateKind;
// Count tweaks to determine if it is a ON or LOUD rule
var tweaks = 0;
for (var j in rule.actions) {
var action = rule.actions[j];
if (action.set_tweak === 'sound' ||
(action.set_tweak === 'highlight' && action.value)) {
tweaks++;
}
}
switch (tweaks) {
case 0:
stateKind = PushRuleState.ON;
break;
case 2:
stateKind = PushRuleState.LOUD;
break;
}
return stateKind;
},
_refreshFromServer: function() { _refreshFromServer: function() {
var self = this; var self = this;
MatrixClientPeg.get().getPushRules().done(function(rulesets) { MatrixClientPeg.get().getPushRules().done(function(rulesets) {
@ -317,18 +357,8 @@ module.exports = React.createClass({
} }
} }
else if (kind === 'content') { else if (kind === 'content') {
// Count tweaks to determine if it is a ON or LOUD rule switch (self._pushRuleStateKind(r)) {
var tweaks = 0; case PushRuleState.ON:
for (var j in r.actions) {
var action = r.actions[j];
if (action.set_tweak === 'sound' ||
(action.set_tweak === 'highlight' && action.value)) {
tweaks++;
}
}
switch (tweaks) {
case 0:
if (r.enabled) { if (r.enabled) {
contentRules.on.push(r); contentRules.on.push(r);
} }
@ -336,7 +366,7 @@ module.exports = React.createClass({
contentRules.on_but_disabled.push(r); contentRules.on_but_disabled.push(r);
} }
break; break;
case 2: case PushRuleState.LOUD:
if (r.enabled) { if (r.enabled) {
contentRules.loud.push(r); contentRules.loud.push(r);
} }