Skip to content

Commit 78ebffa

Browse files
authored
Merge pull request #257 from dozro/compat/msc2723-msg-forwarding
add MSC2723 forwarding meta data for more compatibility
2 parents 9830f71 + 633626a commit 78ebffa

File tree

3 files changed

+70
-17
lines changed

3 files changed

+70
-17
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
default: patch
3+
---
4+
5+
added for compatibility sake the forward meta data as defined in MSC2723

src/app/components/message/modals/MessageForward.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,14 @@ type ForwardMeta = {
8787
original_event_private: boolean;
8888
};
8989

90+
// see https://github.com/hummlbach/matrix-doc/blob/acea0854a1c9489599295a858b068ce02a6b2b20/proposals/2723-add-forward-info.md
91+
type MSC2723ForwardMeta = {
92+
event_id: string;
93+
room_id: string;
94+
sender: string | null; // we won't set this field
95+
origin_server_ts: number;
96+
};
97+
9098
export function MessageForwardInternal({
9199
room,
92100
mEvent,
@@ -246,6 +254,12 @@ export function MessageForwardInternal({
246254
original_event_id: eventId,
247255
original_event_private: false,
248256
} satisfies ForwardMeta,
257+
'com.famedly.app.forwarded': {
258+
event_id: eventId,
259+
room_id: room.roomId,
260+
sender: null, // we won't set this field, as a design decision to avoid potential privacy issues and since the sender can be inferred from the event_id and room_id if needed
261+
origin_server_ts: mEvent.getTs(),
262+
} satisfies MSC2723ForwardMeta,
249263
};
250264
}
251265

src/app/features/room/message/Message.tsx

Lines changed: 51 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,13 @@ export type ForwardedMessageProps = {
211211
originalEventPrivate: boolean;
212212
};
213213

214+
export type MSC2723ForwardedMessageProps = {
215+
event_id: string;
216+
room_id: string;
217+
sender: string | null;
218+
origin_server_ts: number;
219+
};
220+
214221
export type MessageProps = {
215222
room: Room;
216223
mEvent: MatrixEvent;
@@ -248,6 +255,7 @@ export type MessageProps = {
248255
onResend?: (event: MatrixEvent) => void;
249256
onDeleteFailedSend?: (event: MatrixEvent) => void;
250257
messageForwardedProps?: ForwardedMessageProps;
258+
msc2723ForwardedMessageProps?: MSC2723ForwardedMessageProps;
251259
};
252260

253261
function useMobileDoubleTap(callback: () => void, delay = 300) {
@@ -349,6 +357,7 @@ function MessageInternal(
349357
onResend,
350358
onDeleteFailedSend,
351359
messageForwardedProps,
360+
msc2723ForwardedMessageProps,
352361
...props
353362
}: MessageProps & { className?: string; children?: ReactNode },
354363
ref: any
@@ -509,6 +518,32 @@ function MessageInternal(
509518
// handle clicks on mentions in the message body (e.g. jump to original message from a forwarded message notice)
510519
const mentionClickHandler = useMentionClickHandler(room.roomId);
511520

521+
const forwardedNotice = useMemo(() => {
522+
if (messageForwardedProps?.isForwarded) {
523+
return {
524+
label: messageForwardedProps.originalEventPrivate
525+
? 'Forwarded private message'
526+
: 'Forwarded from another room',
527+
roomId: messageForwardedProps.originalRoomId,
528+
eventId: messageForwardedProps.originalEventId,
529+
ts: messageForwardedProps.originalTimestamp ?? 0,
530+
showLink: !messageForwardedProps.originalEventPrivate,
531+
};
532+
}
533+
534+
if (msc2723ForwardedMessageProps) {
535+
return {
536+
label: 'Forwarded from another room',
537+
roomId: msc2723ForwardedMessageProps.room_id,
538+
eventId: msc2723ForwardedMessageProps.event_id,
539+
ts: msc2723ForwardedMessageProps.origin_server_ts ?? 0,
540+
showLink: true,
541+
};
542+
}
543+
544+
return null;
545+
}, [messageForwardedProps, msc2723ForwardedMessageProps]);
546+
512547
const handleResendClick: MouseEventHandler<HTMLButtonElement> = useCallback(
513548
(evt) => {
514549
evt.preventDefault();
@@ -539,27 +574,26 @@ function MessageInternal(
539574
[css.MessageFailed]: isFailedSend,
540575
})}
541576
>
542-
{messageForwardedProps?.isForwarded && (
577+
{forwardedNotice && (
543578
<Chip as="div" variant="SurfaceVariant" radii="Pill">
544579
<Text size="T200" priority="300">
545-
Forwarded{' '}
546-
{messageForwardedProps.originalEventPrivate ? 'private message' : 'from another room'}{' '}
547-
{!messageForwardedProps.originalEventPrivate && (
548-
<a
549-
href={getMatrixToRoomEvent(
550-
messageForwardedProps.originalRoomId,
551-
messageForwardedProps.originalEventId
552-
)}
553-
rel="noreferrer noopener"
554-
data-mention-id={messageForwardedProps.originalRoomId}
555-
data-mention-event-id={messageForwardedProps.originalEventId}
556-
onClick={mentionClickHandler}
557-
>
558-
jump to original
559-
</a>
580+
{forwardedNotice.label}
581+
{forwardedNotice.showLink && (
582+
<>
583+
{' '}
584+
<a
585+
href={getMatrixToRoomEvent(forwardedNotice.roomId, forwardedNotice.eventId)}
586+
rel="noreferrer noopener"
587+
data-mention-id={forwardedNotice.roomId}
588+
data-mention-event-id={forwardedNotice.eventId}
589+
onClick={mentionClickHandler}
590+
>
591+
jump to original
592+
</a>
593+
</>
560594
)}
561595
<Time
562-
ts={messageForwardedProps?.originalTimestamp ?? 0}
596+
ts={forwardedNotice.ts}
563597
compact={messageLayout === MessageLayout.Compact}
564598
hour24Clock={hour24Clock}
565599
dateFormatString={dateFormatString}

0 commit comments

Comments
 (0)