From 8177dbfb56770a0287984256b1b785658334ad72 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 9 Jul 2021 17:11:17 +0100 Subject: [PATCH] Add display alias customisation point This will allow environments such as P2P to tweak the preferred display alias if needed. --- src/Rooms.ts | 4 ++++ src/customisations/Alias.ts | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/customisations/Alias.ts diff --git a/src/Rooms.ts b/src/Rooms.ts index f2f10e756d..efaca97985 100644 --- a/src/Rooms.ts +++ b/src/Rooms.ts @@ -17,6 +17,7 @@ limitations under the License. import { Room } from "matrix-js-sdk/src/models/room"; import { MatrixClientPeg } from './MatrixClientPeg'; +import AliasCustomisations from './customisations/Alias'; /** * Given a room object, return the alias we should use for it, @@ -36,6 +37,9 @@ export function getDisplayAliasForRoom(room: Room): string { // The various display alias getters all feed through this one path so there's a // single place to change the logic. export function getDisplayAliasForAliasSet(canonicalAlias: string, altAliases: string[]): string { + if (AliasCustomisations.getDisplayAliasForAliasSet) { + return AliasCustomisations.getDisplayAliasForAliasSet(canonicalAlias, altAliases); + } return canonicalAlias || altAliases?.[0]; } diff --git a/src/customisations/Alias.ts b/src/customisations/Alias.ts new file mode 100644 index 0000000000..fcf6742193 --- /dev/null +++ b/src/customisations/Alias.ts @@ -0,0 +1,31 @@ +/* +Copyright 2021 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +function getDisplayAliasForAliasSet(canonicalAlias: string, altAliases: string[]): string { + // E.g. prefer one of the aliases over another + return null; +} + +// This interface summarises all available customisation points and also marks +// them all as optional. This allows customisers to only define and export the +// customisations they need while still maintaining type safety. +export interface IAliasCustomisations { + getDisplayAliasForAliasSet?: typeof getDisplayAliasForAliasSet; +} + +// A real customisation module will define and export one or more of the +// customisation points that make up `IAliasCustomisations`. +export default {} as IAliasCustomisations;