Partial merge of develop to experimental
Does not include #2336 as the file has been moved out from underneath it: will do this separately
This commit is contained in:
parent
00405e7f22
commit
7d161de35b
77 changed files with 3526 additions and 598 deletions
|
@ -20,6 +20,7 @@ import { _td } from '../languageHandler';
|
|||
|
||||
const StandardActions = require('./StandardActions');
|
||||
const PushRuleVectorState = require('./PushRuleVectorState');
|
||||
const { decodeActions } = require('./NotificationUtils');
|
||||
|
||||
class VectorPushRuleDefinition {
|
||||
constructor(opts) {
|
||||
|
@ -31,13 +32,11 @@ class VectorPushRuleDefinition {
|
|||
// Translate the rule actions and its enabled value into vector state
|
||||
ruleToVectorState(rule) {
|
||||
let enabled = false;
|
||||
let actions = null;
|
||||
if (rule) {
|
||||
enabled = rule.enabled;
|
||||
actions = rule.actions;
|
||||
}
|
||||
|
||||
for (const stateKey in PushRuleVectorState.states) {
|
||||
for (const stateKey in PushRuleVectorState.states) { // eslint-disable-line guard-for-in
|
||||
const state = PushRuleVectorState.states[stateKey];
|
||||
const vectorStateToActions = this.vectorStateToActions[state];
|
||||
|
||||
|
@ -47,15 +46,21 @@ class VectorPushRuleDefinition {
|
|||
return state;
|
||||
}
|
||||
} else {
|
||||
// The actions must match to the ones expected by vector state
|
||||
if (enabled && JSON.stringify(rule.actions) === JSON.stringify(vectorStateToActions)) {
|
||||
// The actions must match to the ones expected by vector state.
|
||||
// Use `decodeActions` on both sides to canonicalize things like
|
||||
// value: true vs. unspecified for highlight (which defaults to
|
||||
// true, making them equivalent).
|
||||
if (enabled &&
|
||||
JSON.stringify(decodeActions(rule.actions)) ===
|
||||
JSON.stringify(decodeActions(vectorStateToActions))) {
|
||||
return state;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.error("Cannot translate rule actions into Vector rule state. Rule: " +
|
||||
JSON.stringify(rule));
|
||||
console.error(`Cannot translate rule actions into Vector rule state. ` +
|
||||
`Rule: ${JSON.stringify(rule)}, ` +
|
||||
`Expected: ${JSON.stringify(this.vectorStateToActions)}`);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
@ -86,6 +91,17 @@ module.exports = {
|
|||
},
|
||||
}),
|
||||
|
||||
// Messages containing @room
|
||||
".m.rule.roomnotif": new VectorPushRuleDefinition({
|
||||
kind: "override",
|
||||
description: _td("Messages containing @room"), // passed through _t() translation in src/components/views/settings/Notifications.js
|
||||
vectorStateToActions: { // The actions for each vector state, or null to disable the rule.
|
||||
on: StandardActions.ACTION_NOTIFY,
|
||||
loud: StandardActions.ACTION_HIGHLIGHT,
|
||||
off: StandardActions.ACTION_DISABLED,
|
||||
},
|
||||
}),
|
||||
|
||||
// Messages just sent to the user in a 1:1 room
|
||||
".m.rule.room_one_to_one": new VectorPushRuleDefinition({
|
||||
kind: "underride",
|
||||
|
@ -97,6 +113,17 @@ module.exports = {
|
|||
},
|
||||
}),
|
||||
|
||||
// Encrypted messages just sent to the user in a 1:1 room
|
||||
".m.rule.encrypted_room_one_to_one": new VectorPushRuleDefinition({
|
||||
kind: "underride",
|
||||
description: _td("Encrypted messages in one-to-one chats"), // passed through _t() translation in src/components/views/settings/Notifications.js
|
||||
vectorStateToActions: {
|
||||
on: StandardActions.ACTION_NOTIFY,
|
||||
loud: StandardActions.ACTION_NOTIFY_DEFAULT_SOUND,
|
||||
off: StandardActions.ACTION_DONT_NOTIFY,
|
||||
},
|
||||
}),
|
||||
|
||||
// Messages just sent to a group chat room
|
||||
// 1:1 room messages are catched by the .m.rule.room_one_to_one rule if any defined
|
||||
// By opposition, all other room messages are from group chat rooms.
|
||||
|
@ -110,6 +137,19 @@ module.exports = {
|
|||
},
|
||||
}),
|
||||
|
||||
// Encrypted messages just sent to a group chat room
|
||||
// Encrypted 1:1 room messages are catched by the .m.rule.encrypted_room_one_to_one rule if any defined
|
||||
// By opposition, all other room messages are from group chat rooms.
|
||||
".m.rule.encrypted": new VectorPushRuleDefinition({
|
||||
kind: "underride",
|
||||
description: _td("Encrypted messages in group chats"), // passed through _t() translation in src/components/views/settings/Notifications.js
|
||||
vectorStateToActions: {
|
||||
on: StandardActions.ACTION_NOTIFY,
|
||||
loud: StandardActions.ACTION_NOTIFY_DEFAULT_SOUND,
|
||||
off: StandardActions.ACTION_DONT_NOTIFY,
|
||||
},
|
||||
}),
|
||||
|
||||
// Invitation for the user
|
||||
".m.rule.invite_for_me": new VectorPushRuleDefinition({
|
||||
kind: "underride",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue