From b40cde3679dd4d2058bfe4e989f3b00dfad2790e Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 8 Apr 2022 11:43:41 +0100 Subject: [PATCH 1/3] Tidy --- src/events/EventTileFactory.tsx | 14 +++++++------- src/shouldHideEvent.ts | 5 +++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/events/EventTileFactory.tsx b/src/events/EventTileFactory.tsx index dbf35d6afbb..21956a4f57b 100644 --- a/src/events/EventTileFactory.tsx +++ b/src/events/EventTileFactory.tsx @@ -153,7 +153,7 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? return JSONEventFactory; } - const noEventFactoryFactory: (() => Optional) = () => SettingsStore.getValue("showHiddenEventsInTimeline") + const noEventFactory: Optional = SettingsStore.getValue("showHiddenEventsInTimeline") ? JSONEventFactory : undefined; // just don't render things that we shouldn't render @@ -171,7 +171,7 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? if (content?.msgtype === MsgType.KeyVerificationRequest) { const me = cli.getUserId(); if (mxEvent.getSender() !== me && content['to'] !== me) { - return noEventFactoryFactory(); // not for/from us + return noEventFactory; // not for/from us } else { // override the factory return VerificationReqFactory; @@ -182,7 +182,7 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? // tile once the verification concludes, so filter out the one from the other party. const me = cli.getUserId(); if (mxEvent.getSender() !== me) { - return noEventFactoryFactory(); + return noEventFactory; } } @@ -192,7 +192,7 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? // XXX: This is extremely a hack. Possibly these components should have an interface for // declining to render? if (!MKeyVerificationConclusion.shouldRender(mxEvent, mxEvent.verificationRequest)) { - return noEventFactoryFactory(); + return noEventFactory; } } @@ -220,10 +220,10 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? } if (SINGULAR_STATE_EVENTS.has(evType) && mxEvent.getStateKey() !== '') { - return noEventFactoryFactory(); // improper event type to render + return noEventFactory; // improper event type to render } - return STATE_EVENT_TILE_TYPES[evType] ?? noEventFactoryFactory(); + return STATE_EVENT_TILE_TYPES[evType] ?? noEventFactory; } // Blanket override for all events. The MessageEvent component handles redacted states for us. @@ -231,7 +231,7 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? return MessageEventFactory; } - return EVENT_TILE_TYPES[evType] ?? noEventFactoryFactory(); + return EVENT_TILE_TYPES[evType] ?? noEventFactory; } /** diff --git a/src/shouldHideEvent.ts b/src/shouldHideEvent.ts index 5ca9d00e69b..8fef94ac9d3 100644 --- a/src/shouldHideEvent.ts +++ b/src/shouldHideEvent.ts @@ -15,6 +15,7 @@ */ import { MatrixEvent } from "matrix-js-sdk/src/models/event"; +import { EventType, RelationType } from "matrix-js-sdk/src/@types/event"; import SettingsStore from "./settings/SettingsStore"; import { IRoomState } from "./components/structures/RoomView"; @@ -29,7 +30,7 @@ interface IDiff { function memberEventDiff(ev: MatrixEvent): IDiff { const diff: IDiff = { - isMemberEvent: ev.getType() === 'm.room.member', + isMemberEvent: ev.getType() === EventType.RoomMember, }; // If is not a Member Event then the other checks do not apply, so bail early. @@ -67,7 +68,7 @@ export default function shouldHideEvent(ev: MatrixEvent, ctx?: IRoomState): bool if (ev.isRedacted() && !isEnabled('showRedactions') && !ev.getThread()) return true; // Hide replacement events since they update the original tile (if enabled) - if (ev.isRelation("m.replace")) return true; + if (ev.isRelation(RelationType.Replace)) return true; const eventDiff = memberEventDiff(ev); From 375b47709209700a5848df7036a34fca129ec343 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 8 Apr 2022 11:45:22 +0100 Subject: [PATCH 2/3] Fix regression of edits showing up in the timeline with show hidden events enabled --- src/events/EventTileFactory.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/events/EventTileFactory.tsx b/src/events/EventTileFactory.tsx index 21956a4f57b..03a6cf6c900 100644 --- a/src/events/EventTileFactory.tsx +++ b/src/events/EventTileFactory.tsx @@ -231,6 +231,10 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? return MessageEventFactory; } + if (mxEvent.isRelation(RelationType.Replace)) { + return noEventFactory; + } + return EVENT_TILE_TYPES[evType] ?? noEventFactory; } From 99f14450a6592057886f481ccdf06805ced352ff Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 8 Apr 2022 11:47:24 +0100 Subject: [PATCH 3/3] Re-add wrapped factory pattern to save bunch of SettingsStore calls --- src/events/EventTileFactory.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/events/EventTileFactory.tsx b/src/events/EventTileFactory.tsx index 03a6cf6c900..3f470a19b61 100644 --- a/src/events/EventTileFactory.tsx +++ b/src/events/EventTileFactory.tsx @@ -153,7 +153,7 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? return JSONEventFactory; } - const noEventFactory: Optional = SettingsStore.getValue("showHiddenEventsInTimeline") + const noEventFactoryFactory: (() => Optional) = () => SettingsStore.getValue("showHiddenEventsInTimeline") ? JSONEventFactory : undefined; // just don't render things that we shouldn't render @@ -171,7 +171,7 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? if (content?.msgtype === MsgType.KeyVerificationRequest) { const me = cli.getUserId(); if (mxEvent.getSender() !== me && content['to'] !== me) { - return noEventFactory; // not for/from us + return noEventFactoryFactory(); // not for/from us } else { // override the factory return VerificationReqFactory; @@ -182,7 +182,7 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? // tile once the verification concludes, so filter out the one from the other party. const me = cli.getUserId(); if (mxEvent.getSender() !== me) { - return noEventFactory; + return noEventFactoryFactory(); } } @@ -192,7 +192,7 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? // XXX: This is extremely a hack. Possibly these components should have an interface for // declining to render? if (!MKeyVerificationConclusion.shouldRender(mxEvent, mxEvent.verificationRequest)) { - return noEventFactory; + return noEventFactoryFactory(); } } @@ -220,10 +220,10 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? } if (SINGULAR_STATE_EVENTS.has(evType) && mxEvent.getStateKey() !== '') { - return noEventFactory; // improper event type to render + return noEventFactoryFactory(); // improper event type to render } - return STATE_EVENT_TILE_TYPES[evType] ?? noEventFactory; + return STATE_EVENT_TILE_TYPES[evType] ?? noEventFactoryFactory(); } // Blanket override for all events. The MessageEvent component handles redacted states for us. @@ -232,10 +232,10 @@ export function pickFactory(mxEvent: MatrixEvent, cli: MatrixClient, asHiddenEv? } if (mxEvent.isRelation(RelationType.Replace)) { - return noEventFactory; + return noEventFactoryFactory(); } - return EVENT_TILE_TYPES[evType] ?? noEventFactory; + return EVENT_TILE_TYPES[evType] ?? noEventFactoryFactory(); } /**