From 68e1a8e506009e5dbd46148de30abff2e07d1576 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Thu, 29 Jan 2026 22:02:32 +0200 Subject: [PATCH] revoke media URLs --- src/view/com/composer/Composer.tsx | 2 ++ .../com/composer/drafts/DraftsListDialog.tsx | 17 ++++++++++--- src/view/com/composer/drafts/state/storage.ts | 14 +++++++++++ .../com/composer/drafts/state/storage.web.ts | 24 ++++++++++++++++++- .../videos/VideoTranscodeBackdrop.tsx | 2 +- 5 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index e42dce8cd7..ba70458ee4 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -142,6 +142,7 @@ import { useSaveDraftMutation, } from './drafts/state/queries' import {type DraftSummary} from './drafts/state/schema' +import {revokeAllMediaUrls} from './drafts/state/storage' import {PostLanguageSelect} from './select-language/PostLanguageSelect' import { type AssetType, @@ -504,6 +505,7 @@ export const ComposePost = ({ const onClose = useCallback(() => { closeComposer() clearThumbnailCache(queryClient) + revokeAllMediaUrls() }, [closeComposer, queryClient]) const handleSaveDraft = React.useCallback(async () => { diff --git a/src/view/com/composer/drafts/DraftsListDialog.tsx b/src/view/com/composer/drafts/DraftsListDialog.tsx index ca8fcbf820..a09517d3bd 100644 --- a/src/view/com/composer/drafts/DraftsListDialog.tsx +++ b/src/view/com/composer/drafts/DraftsListDialog.tsx @@ -14,6 +14,7 @@ import {IS_NATIVE} from '#/env' import {DraftItem} from './DraftItem' import {useDeleteDraftMutation, useDraftsQuery} from './state/queries' import {type DraftSummary} from './state/schema' +import {revokeAllMediaUrls} from './state/storage' export function DraftsListDialog({ control, @@ -36,6 +37,12 @@ export function DraftsListDialog({ const handleSelectDraft = useCallback( (summary: DraftSummary) => { control.close(() => { + // Revoke preview URLs + // It would be neater to do it in the `onClose` callback + // on the dialog itself, but this would wipe out the new ones + // that will be created by `onSelectDraft` + // ndb: if we miss any, it'll be handled by the composer closing + revokeAllMediaUrls() onSelectDraft(summary) }) }, @@ -53,7 +60,11 @@ export function DraftsListDialog({ () => (