feat(captions): edit image/video captions after sending
Captions could be attached at upload but never changed — canEditEvent only allowed m.text/emote/notice, so a typo in an image caption meant delete + re-upload. Add caption editing for image/video messages. - utils/room.ts: canEditCaption (own image/video RoomMessage, no non-thread relation) + canEditEventOrCaption. canEditEvent unchanged. - Message.tsx: gate the Edit affordance (quick-actions + menu) on canEditEventOrCaption; label it "Edit caption" for media; keep the media rendered above the editor while editing. - MessageEditor.tsx: for a media message, seed the editor from the caption (not the filename), allow an empty caption (removes it), and build the m.replace so m.new_content spreads the original media content (url/info/encrypted file/filename/msgtype) and only sets body + format/formatted_body. Outer content is the full media (not a "* text" fallback) so non-edit-aware clients still render the media. No-op guard when the caption is unchanged. Placeholder "Add a caption…". Rendering + Edit History need no changes: getEditedEvent's m.new_content flows to renderCaption, and the word-diff already diffs body (the caption). Encrypted media keeps its file/key (no re-upload). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+3
-1
@@ -715,7 +715,9 @@ KaTeX-rendered math in messages, two paths:
|
||||
|
||||
### Image / Video Captions
|
||||
|
||||
Images and videos can be sent with a caption. The caption and media are sent as a single event.
|
||||
Images and videos can be sent with a caption. The caption and media are sent as a single event (caption = the event `body` when it differs from `filename`).
|
||||
|
||||
- **Edit caption**: an image/video you sent shows an **Edit caption** action (quick-actions pencil + message menu). It opens the message editor seeded with the current caption; saving sends an `m.replace` whose `m.new_content` preserves the media (`url`/`info`/encrypted `file`/`filename`) and only changes `body`/`formatted_body`. An empty caption removes it (`body` falls back to `filename`). Gated by `canEditCaption` (`utils/room.ts`) to your own image/video messages; the media stays visible above the editor, and caption edits appear in Edit History (diffed by the word-diff). No re-upload — encrypted media keeps its original file/key.
|
||||
|
||||
### Location Sharing
|
||||
|
||||
|
||||
Reference in New Issue
Block a user