fix(downloads): stop repeating an extension the name already carries

A voice comment's display name is the generated file name, extension
included, so appending the extension again downloaded it as
<uuid>.webm.webm. Both download paths, the single asset route and the
project zip, now append only when the name does not already end in it.
This commit is contained in:
yusufipk
2026-07-30 23:13:04 +07:00
parent e7008c571a
commit 93e85683e9
5 changed files with 69 additions and 8 deletions
+6 -5
View File
@@ -4,6 +4,7 @@ import {
extractImageFileNameFromProxyUrl,
extractVideoFileNameFromProxyUrl,
sanitizeAssetDisplayName,
withFileExtension,
} from '@/lib/video-assets';
const DEFAULT_MAX_FILES = 250;
@@ -171,21 +172,21 @@ function buildAssetFileName(videoIndex: number, videoTitle: string, asset: Asset
if (asset.provider === VideoAssetProvider.R2_IMAGE) {
const fileName = extractImageFileNameFromProxyUrl(asset.sourceUrl);
return `${stem}${extensionFromUrl(fileName ?? '', '.png')}`;
return withFileExtension(stem, extensionFromUrl(fileName ?? '', '.png'));
}
if (asset.provider === VideoAssetProvider.R2_AUDIO) {
const fileName = extractAudioFileNameFromProxyUrl(asset.sourceUrl);
return `${stem}${extensionFromUrl(fileName ?? '', '.webm')}`;
return withFileExtension(stem, extensionFromUrl(fileName ?? '', '.webm'));
}
if (asset.provider === VideoAssetProvider.R2_VIDEO) {
const fileName = extractVideoFileNameFromProxyUrl(asset.sourceUrl);
return `${stem}${extensionFromUrl(fileName ?? '', '.mp4')}`;
return withFileExtension(stem, extensionFromUrl(fileName ?? '', '.mp4'));
}
if (asset.provider === VideoAssetProvider.BUNNY) {
return `${stem}.mp4`;
return withFileExtension(stem, '.mp4');
}
return `${stem}.bin`;
return withFileExtension(stem, '.bin');
}
function versionDownloadUrl(version: VersionRow): string | null {