From 58e8174378b170fd412632b26631a143b8535157 Mon Sep 17 00:00:00 2001 From: gnuxie Date: Mon, 7 Nov 2022 09:37:20 +0000 Subject: [PATCH] wip --- src/Mjolnir.ts | 13 +++++++++++++ src/ProtectedRoomsConfig.ts | 12 +++++++++++- src/ProtectedSpace.ts | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/ProtectedSpace.ts diff --git a/src/Mjolnir.ts b/src/Mjolnir.ts index 227125f..ab6198a 100644 --- a/src/Mjolnir.ts +++ b/src/Mjolnir.ts @@ -384,6 +384,19 @@ export class Mjolnir { this.protectedRoomsTracker.removeProtectedRoom(roomId); } + public async addProtectedSpace(roomId: string): Promise { + await this.protectedRoomsConfig.addProtectedSpace(roomId); + await this.protectSpace(roomId); + } + + private async protectSpace(roomId: string): Promise { + // create a ProtectedSpace and keep that somewhere, + // protected space could use ProtectedRoomSet for all its rooms. + // don't bother with recursively following spaces yet, but we probably need something like + // m.space.parent for that to work properly since anyone can add any room to spaces. + // + } + /** * Resynchronize the protected rooms with rooms that the mjolnir user is joined to. * This is to implement `config.protectAllJoinedRooms` functionality. diff --git a/src/ProtectedRoomsConfig.ts b/src/ProtectedRoomsConfig.ts index 0c3643b..5843bde 100644 --- a/src/ProtectedRoomsConfig.ts +++ b/src/ProtectedRoomsConfig.ts @@ -19,6 +19,16 @@ import { extractRequestError, LogService, MatrixClient, Permalinks } from "matri import { IConfig } from "./config"; const PROTECTED_ROOMS_EVENT_TYPE = "org.matrix.mjolnir.protected_rooms"; +interface ProtectedRoomsAccountData { + rooms: string[], + spaces: [ + { + room_id: string, + recursive: boolean, + } + ] +} + /** * Manages the set of rooms that the user has EXPLICITLY asked to be protected. */ @@ -64,7 +74,7 @@ export default class ProtectedRoomsConfig { public async loadProtectedRoomsFromAccountData(): Promise { LogService.debug("ProtectedRoomsConfig", "Loading protected rooms..."); try { - const data: { rooms?: string[] } | null = await this.client.getAccountData(PROTECTED_ROOMS_EVENT_TYPE); + const data: ProtectedRoomsAccountData | null = await this.client.getAccountData(PROTECTED_ROOMS_EVENT_TYPE); if (data && data['rooms']) { for (const roomId of data['rooms']) { this.explicitlyProtectedRooms.add(roomId); diff --git a/src/ProtectedSpace.ts b/src/ProtectedSpace.ts new file mode 100644 index 0000000..87c279b --- /dev/null +++ b/src/ProtectedSpace.ts @@ -0,0 +1 @@ +import { Space } from "matrix-bot-sdk"; \ No newline at end of file