Files
element-web/src/notifications/NotificationUtils.ts
David Langley 69ee8fd96a Change License: AGPL + Element Commercial (#28856)
* Add commercial licence and update config files

* Update license in headers

* Revert "Update license in headers"

This reverts commit 7ed7949485.

* Update only spdx id

* Remove LicenseRef- from package.json

LicenseRef- no longer allowed in npm v3 package.json
This fixes the warning in the logs and failing build check.
2025-01-06 11:18:54 +00:00

87 lines
2.9 KiB
TypeScript

/*
Copyright 2024 New Vector Ltd.
Copyright 2016-2021 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
import { PushRuleAction, PushRuleActionName, TweakHighlight, TweakSound } from "matrix-js-sdk/src/matrix";
export interface PushRuleActions {
notify: boolean;
sound?: string;
highlight?: boolean;
}
export class NotificationUtils {
// Encodes a dictionary of {
// "notify": true/false,
// "sound": string or undefined,
// "highlight: true/false,
// }
// to a list of push actions.
public static encodeActions(action: PushRuleActions): PushRuleAction[] {
const notify = action.notify;
const sound = action.sound;
const highlight = action.highlight;
if (notify) {
const actions: PushRuleAction[] = [PushRuleActionName.Notify];
if (sound) {
actions.push({ set_tweak: "sound", value: sound } as TweakSound);
}
if (highlight) {
actions.push({ set_tweak: "highlight" } as TweakHighlight);
} else {
actions.push({ set_tweak: "highlight", value: false } as TweakHighlight);
}
return actions;
} else {
return [PushRuleActionName.DontNotify];
}
}
// Decode a list of actions to a dictionary of {
// "notify": true/false,
// "sound": string or undefined,
// "highlight: true/false,
// }
// If the actions couldn't be decoded then returns null.
public static decodeActions(actions: PushRuleAction[]): PushRuleActions | null {
let notify = false;
let sound: string | undefined;
let highlight: boolean | undefined = false;
for (const action of actions) {
if (action === PushRuleActionName.Notify) {
notify = true;
} else if (action === PushRuleActionName.DontNotify) {
notify = false;
} else if (typeof action === "object") {
if (action.set_tweak === "sound") {
sound = action.value;
} else if (action.set_tweak === "highlight") {
highlight = action.value;
} else {
// We don't understand this kind of tweak, so give up.
return null;
}
} else {
// We don't understand this kind of action, so give up.
return null;
}
}
if (highlight === undefined) {
// If a highlight tweak is missing a value then it defaults to true.
highlight = true;
}
const result: PushRuleActions = { notify, highlight };
if (sound !== undefined) {
result.sound = sound;
}
return result;
}
}