Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 8ae9f7d

Browse files
authored
Fix edge case thread summaries around events without a msgtype (#8576)
* Fix edge case thread summaries around events without a msgtype * Remove incomprehensible comment
1 parent fc2d7b6 commit 8ae9f7d

File tree

3 files changed

+16
-12
lines changed

3 files changed

+16
-12
lines changed

src/stores/room-list/MessagePreviewStore.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,16 @@ import { CallHangupEvent } from "./previews/CallHangupEvent";
3131
import { StickerEventPreview } from "./previews/StickerEventPreview";
3232
import { ReactionEventPreview } from "./previews/ReactionEventPreview";
3333
import { UPDATE_EVENT } from "../AsyncStore";
34+
import { IPreview } from "./previews/IPreview";
3435

3536
// Emitted event for when a room's preview has changed. First argument will the room for which
3637
// the change happened.
3738
const ROOM_PREVIEW_CHANGED = "room_preview_changed";
3839

39-
const PREVIEWS = {
40+
const PREVIEWS: Record<string, {
41+
isState: boolean;
42+
previewer: IPreview;
43+
}> = {
4044
'm.room.message': {
4145
isState: false,
4246
previewer: new MessageEventPreview(),
@@ -122,10 +126,7 @@ export class MessagePreviewStore extends AsyncStoreWithClient<IState> {
122126

123127
public generatePreviewForEvent(event: MatrixEvent): string {
124128
const previewDef = PREVIEWS[event.getType()];
125-
// TODO: Handle case where we don't have
126-
if (!previewDef) return '';
127-
const previewText = previewDef.previewer.getTextFor(event, null, true);
128-
return previewText ?? '';
129+
return previewDef?.previewer.getTextFor(event, null, true) ?? "";
129130
}
130131

131132
private async generatePreview(room: Room, tagId?: TagID) {

src/stores/room-list/previews/IPreview.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ export interface IPreview {
2626
* Gets the text which represents the event as a preview.
2727
* @param event The event to preview.
2828
* @param tagId Optional. The tag where the room the event was sent in resides.
29+
* @param isThread Optional. Whether the preview being generated is for a thread summary.
2930
* @returns The preview.
3031
*/
31-
getTextFor(event: MatrixEvent, tagId?: TagID): string | null;
32+
getTextFor(event: MatrixEvent, tagId?: TagID, isThread?: boolean): string | null;
3233
}

src/stores/room-list/previews/MessageEventPreview.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ limitations under the License.
1515
*/
1616

1717
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
18+
import { MsgType, RelationType } from "matrix-js-sdk/src/@types/event";
1819

1920
import { IPreview } from "./IPreview";
2021
import { TagID } from "../models";
@@ -27,16 +28,17 @@ export class MessageEventPreview implements IPreview {
2728
public getTextFor(event: MatrixEvent, tagId?: TagID, isThread?: boolean): string {
2829
let eventContent = event.getContent();
2930

30-
if (event.isRelation("m.replace")) {
31+
if (event.isRelation(RelationType.Replace)) {
3132
// It's an edit, generate the preview on the new text
3233
eventContent = event.getContent()['m.new_content'];
3334
}
3435

35-
if (!eventContent || !eventContent['body']) return null; // invalid for our purposes
36+
if (!eventContent?.['body']) return null; // invalid for our purposes
3637

37-
let body = (eventContent['body'] || '').trim();
38-
const msgtype = eventContent['msgtype'];
39-
if (!body || !msgtype) return null; // invalid event, no preview
38+
let body = eventContent['body'].trim();
39+
if (!body) return null; // invalid event, no preview
40+
// A msgtype is actually required in the spec but the app is a bit softer on this requirement
41+
const msgtype = eventContent['msgtype'] ?? MsgType.Text;
4042

4143
const hasHtml = eventContent.format === "org.matrix.custom.html" && eventContent.formatted_body;
4244
if (hasHtml) {
@@ -62,7 +64,7 @@ export class MessageEventPreview implements IPreview {
6264

6365
body = sanitizeForTranslation(body);
6466

65-
if (msgtype === 'm.emote') {
67+
if (msgtype === MsgType.Emote) {
6668
return _t("* %(senderName)s %(emote)s", { senderName: getSenderName(event), emote: body });
6769
}
6870

0 commit comments

Comments
 (0)