From e11366b3748f7fcdd2e0fb24ec10a0a83378cbb9 Mon Sep 17 00:00:00 2001 From: Lachezar Lechev Date: Thu, 15 Jan 2026 17:58:43 +0200 Subject: [PATCH 1/2] fix(streams): copy stream link returns streamable url feat(streams): add copy download link Signed-off-by: Lachezar Lechev --- .../MetaDetails/StreamsList/Stream/Stream.js | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/routes/MetaDetails/StreamsList/Stream/Stream.js b/src/routes/MetaDetails/StreamsList/Stream/Stream.js index 41f81b386..96c95e42f 100644 --- a/src/routes/MetaDetails/StreamsList/Stream/Stream.js +++ b/src/routes/MetaDetails/StreamsList/Stream/Stream.js @@ -86,6 +86,10 @@ const Stream = ({ className, videoId, videoReleased, addonName, name, descriptio }, [href, deepLinks]); const streamLink = React.useMemo(() => { + return deepLinks?.externalPlayer?.streaming; + }, [deepLinks]); + + const downloadLink = React.useMemo(() => { return deepLinks?.externalPlayer?.download; }, [deepLinks]); @@ -116,6 +120,28 @@ const Stream = ({ className, videoId, videoReleased, addonName, name, descriptio } }, [props.onClick, profile.settings, markVideoAsWatched]); + const copyDownloadLink = React.useCallback((event) => { + event.preventDefault(); + closeMenu(); + if (downloadLink) { + navigator.clipboard.writeText(downloadLink) + .then(() => { + toast.show({ + type: 'success', + title: t('PLAYER_COPY_DOWNLOAD_SUCCESS'), + timeout: 4000 + }); + }) + .catch(() => { + toast.show({ + type: 'error', + title: t('PLAYER_COPY_DOWNLOAD_ERROR'), + timeout: 4000, + }); + }); + } + }, [downloadLink]); + const copyStreamLink = React.useCallback((event) => { event.preventDefault(); closeMenu(); @@ -195,6 +221,13 @@ const Stream = ({ className, videoId, videoReleased, addonName, name, descriptio
{t('CTX_COPY_STREAM_LINK')}
} + { + downloadLink && + + } ); }, [copyStreamLink, onClick]); From cf0ff1f4ca9d4358caa07dc6711aed2cb303898b Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Thu, 22 Jan 2026 12:25:20 +0200 Subject: [PATCH 2/2] fix: trnslations --- src/routes/MetaDetails/StreamsList/Stream/Stream.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/routes/MetaDetails/StreamsList/Stream/Stream.js b/src/routes/MetaDetails/StreamsList/Stream/Stream.js index 96c95e42f..e5a8717cb 100644 --- a/src/routes/MetaDetails/StreamsList/Stream/Stream.js +++ b/src/routes/MetaDetails/StreamsList/Stream/Stream.js @@ -128,14 +128,14 @@ const Stream = ({ className, videoId, videoReleased, addonName, name, descriptio .then(() => { toast.show({ type: 'success', - title: t('PLAYER_COPY_DOWNLOAD_SUCCESS'), + title: t('PLAYER_COPY_DOWNLOAD_LINK_SUCCESS'), timeout: 4000 }); }) .catch(() => { toast.show({ type: 'error', - title: t('PLAYER_COPY_DOWNLOAD_ERROR'), + title: t('PLAYER_COPY_DOWNLOAD_LINK_ERROR'), timeout: 4000, }); }); @@ -223,9 +223,9 @@ const Stream = ({ className, videoId, videoReleased, addonName, name, descriptio } { downloadLink && - }