From 1942fc464d6f398c9cf77203e7774c73f4170a77 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Thu, 10 Oct 2024 00:07:38 +0300 Subject: [PATCH] web/statestore: flip decrypted content fields --- web/src/api/statestore.ts | 6 ++++++ web/src/api/types/hitypes.ts | 9 +++++++++ web/src/ui/roomlist/Entry.tsx | 5 +---- web/src/ui/timeline/TimelineEvent.tsx | 6 ------ web/src/ui/timeline/content/MessageBody.tsx | 2 +- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/web/src/api/statestore.ts b/web/src/api/statestore.ts index a1dbdf9..cca812c 100644 --- a/web/src/api/statestore.ts +++ b/web/src/api/statestore.ts @@ -18,6 +18,7 @@ import type { ContentURI, DBEvent, DBRoom, + EncryptedEventContent, EventID, EventRowID, EventType, @@ -82,6 +83,11 @@ export class RoomStateStore { } applyEvent(evt: DBEvent) { + if (evt.type === "m.room.encrypted" && evt.decrypted && evt.decrypted_type) { + evt.type = evt.decrypted_type + evt.encrypted = evt.content as EncryptedEventContent + evt.content = evt.decrypted + } this.eventsByRowID.set(evt.rowid, evt) this.eventsByID.set(evt.event_id, evt) } diff --git a/web/src/api/types/hitypes.ts b/web/src/api/types/hitypes.ts index 5fcb2c0..f490508 100644 --- a/web/src/api/types/hitypes.ts +++ b/web/src/api/types/hitypes.ts @@ -82,6 +82,14 @@ export interface DBRoom { prev_batch: string } +export interface EncryptedEventContent { + algorithm: "m.megolm.v1.aes-sha2" + ciphertext: string + session_id: string + sender_key?: string + device_id?: DeviceID +} + export interface DBEvent { rowid: EventRowID timeline_rowid: TimelineRowID @@ -96,6 +104,7 @@ export interface DBEvent { content: unknown decrypted?: unknown decrypted_type?: EventType + encrypted?: EncryptedEventContent unsigned: EventUnsigned transaction_id?: string diff --git a/web/src/ui/roomlist/Entry.tsx b/web/src/ui/roomlist/Entry.tsx index dd6371c..6d7fe76 100644 --- a/web/src/ui/roomlist/Entry.tsx +++ b/web/src/ui/roomlist/Entry.tsx @@ -26,12 +26,9 @@ function makePreviewText(evt?: DBEvent): string { if (!evt) { return "" } - if (evt.type === "m.room.message") { + if (evt.type === "m.room.message" || evt.type === "m.sticker") { // @ts-expect-error TODO add content types return evt.content.body - } else if (evt.decrypted_type === "m.room.message") { - // @ts-expect-error TODO add content types - return evt.decrypted.body } return "" } diff --git a/web/src/ui/timeline/TimelineEvent.tsx b/web/src/ui/timeline/TimelineEvent.tsx index 6ad0617..dac3bde 100644 --- a/web/src/ui/timeline/TimelineEvent.tsx +++ b/web/src/ui/timeline/TimelineEvent.tsx @@ -28,12 +28,6 @@ export interface TimelineEventProps { function getBodyType(evt: DBEvent): React.FunctionComponent { switch (evt.type) { - case "m.room.encrypted": - switch (evt.decrypted_type) { - case "m.room.message": - return MessageBody - } - break case "m.room.message": return MessageBody case "m.sticker": diff --git a/web/src/ui/timeline/content/MessageBody.tsx b/web/src/ui/timeline/content/MessageBody.tsx index 2b6465a..d8fd903 100644 --- a/web/src/ui/timeline/content/MessageBody.tsx +++ b/web/src/ui/timeline/content/MessageBody.tsx @@ -60,7 +60,7 @@ interface LocationMessageEventContent extends BaseMessageEventContent { type MessageEventContent = TextMessageEventContent | MediaMessageEventContent | LocationMessageEventContent const MessageBody = ({ event }: EventContentProps) => { - const content = (event.decrypted ?? event.content) as MessageEventContent + const content = event.content as MessageEventContent switch (content.msgtype) { case "m.text": case "m.emote":