From 0229f73fae455d48a6847e658f5aa3857eb43394 Mon Sep 17 00:00:00 2001 From: Rohan Gudimetla Date: Sat, 14 Jun 2025 04:20:51 +0530 Subject: [PATCH] lightbox: Fix media title update on change in title. Previously, when title of media element is updated the change is not reflected in lightbox view. This is because the title of the element is cached from the last time when the media element was opened in lightbox. This is fixed by invalidating a message's asset_map cache whenever the content of message is edited. Fixes #21311 --- web/src/lightbox.ts | 4 ++++ web/src/message_events.ts | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/web/src/lightbox.ts b/web/src/lightbox.ts index b117c702e4..e956e81da1 100644 --- a/web/src/lightbox.ts +++ b/web/src/lightbox.ts @@ -212,6 +212,10 @@ export function clear_for_testing(): void { asset_map.clear(); } +export function invalidate_asset_map_of_message(message_id: number): void { + asset_map.delete(message_id); +} + function set_selected_media_element($media: JQuery): void { // Clear out any previously selected element $(".media-to-select-in-lightbox-list").removeClass("media-to-select-in-lightbox-list"); diff --git a/web/src/message_events.ts b/web/src/message_events.ts index 00945eca34..9229ccc4b0 100644 --- a/web/src/message_events.ts +++ b/web/src/message_events.ts @@ -17,6 +17,7 @@ import * as direct_message_group_data from "./direct_message_group_data.ts"; import * as drafts from "./drafts.ts"; import * as echo from "./echo.ts"; import type {Filter} from "./filter.ts"; +import * as lightbox from "./lightbox.ts"; import * as message_edit from "./message_edit.ts"; import * as message_edit_history from "./message_edit_history.ts"; import * as message_events_util from "./message_events_util.ts"; @@ -458,6 +459,10 @@ export function update_messages(events: UpdateMessageEvent[]): void { // Update raw_content, so that editing a few times in a row is fast. anchor_message.raw_content = event.content; + + // Editing a message may change the titles for linked + // media, so we must invalidate the asset map. + lightbox.invalidate_asset_map_of_message(event.message_id); } if (unread.update_message_for_mention(anchor_message, any_message_content_edited)) {