Files
element-web/src/notifications/NotificationUtils.ts
renovate[bot] 4a381c2a10 Update all non-major dependencies (#29194)
* Update all non-major dependencies

* Delint

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Prettier

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2025-02-05 13:25:06 +00:00

92 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 {
type PushRuleAction,
PushRuleActionName,
type TweakHighlight,
type 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;
}
}