diff --git a/src/components/player/atoms/settings/Downloads.tsx b/src/components/player/atoms/settings/Downloads.tsx index 43b0d44c..87cbbe2c 100644 --- a/src/components/player/atoms/settings/Downloads.tsx +++ b/src/components/player/atoms/settings/Downloads.tsx @@ -8,7 +8,7 @@ import { OptionItem } from "@/components/form/Dropdown"; import { Icon, Icons } from "@/components/Icon"; import { OverlayPage } from "@/components/overlays/OverlayPage"; import { Menu } from "@/components/player/internals/ContextMenu"; -import { convertSubtitlesToSrtDataurl } from "@/components/player/utils/captions"; +import { convertSubtitlesToSrt } from "@/components/player/utils/captions"; import { Transition } from "@/components/utils/Transition"; import { useOverlayRouter } from "@/hooks/useOverlayRouter"; import { usePlayerStore } from "@/stores/player/store"; @@ -125,11 +125,31 @@ export function DownloadView({ id }: { id: string }) { const sourceType = usePlayerStore((s) => s.source?.type); const selectedCaption = usePlayerStore((s) => s.caption?.selected); const openSubtitleDownload = useCallback(() => { - const dataUrl = selectedCaption - ? convertSubtitlesToSrtDataurl(selectedCaption?.srtData) - : null; - if (!dataUrl) return; - window.open(dataUrl); + if (!selectedCaption?.srtData) return; + + try { + // Convert subtitles to SRT format + const srtContent = convertSubtitlesToSrt(selectedCaption.srtData); + + // Create a Blob with the SRT content + const blob = new Blob([srtContent], { type: "application/x-subrip" }); + const url = URL.createObjectURL(blob); + + // Create an anchor element for downloading + const a = document.createElement("a"); + a.href = url; + a.download = "subtitles.srt"; + document.body.appendChild(a); + a.click(); + + // Clean up + setTimeout(() => { + document.body.removeChild(a); + URL.revokeObjectURL(url); + }, 100); + } catch (error) { + console.error("Error downloading subtitles:", error); + } }, [selectedCaption]); const playerOptions = useMemo(