From 10c878871ff199b3e5ada4b1a9f161b2594d2829 Mon Sep 17 00:00:00 2001 From: Namyts <35004248+Namyts@users.noreply.github.com> Date: Wed, 10 Jul 2024 19:31:23 +0100 Subject: [PATCH] copy infohash to clipboard when right clicking the search result. toast. --- .../MetaDetails/StreamsList/Stream/Stream.js | 11 +++++++++-- src/routes/MetaDetails/StreamsList/StreamsList.js | 15 ++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/routes/MetaDetails/StreamsList/Stream/Stream.js b/src/routes/MetaDetails/StreamsList/Stream/Stream.js index 6587c72d0..d386cbf95 100644 --- a/src/routes/MetaDetails/StreamsList/Stream/Stream.js +++ b/src/routes/MetaDetails/StreamsList/Stream/Stream.js @@ -74,12 +74,18 @@ const Stream = ({ className, videoId, videoReleased, addonName, name, descriptio } }, [props.onClick, profile.settings, markVideoAsWatched]); + const onContextMenu = React.useCallback((event) => { + if (typeof props.onContextMenu === 'function') { + props.onContextMenu(event); + } + }, [props.onContextMenu]); + const renderThumbnailFallback = React.useCallback(() => ( ), []); return ( - + { typeof thumbnail === 'string' && thumbnail.length > 0 ? @@ -140,7 +146,8 @@ Stream.propTypes = { }) }) }), - onClick: PropTypes.func + onClick: PropTypes.func, + onContextMenu: PropTypes.func }; module.exports = Stream; diff --git a/src/routes/MetaDetails/StreamsList/StreamsList.js b/src/routes/MetaDetails/StreamsList/StreamsList.js index ae7d2416e..728f773b3 100644 --- a/src/routes/MetaDetails/StreamsList/StreamsList.js +++ b/src/routes/MetaDetails/StreamsList/StreamsList.js @@ -5,7 +5,7 @@ const PropTypes = require('prop-types'); const classnames = require('classnames'); const { useTranslation } = require('react-i18next'); const { default: Icon } = require('@stremio/stremio-icons/react'); -const { Button, Image, Multiselect } = require('stremio/common'); +const { Button, Image, Multiselect, useToast } = require('stremio/common'); const { useServices } = require('stremio/services'); const Stream = require('./Stream'); const styles = require('./styles'); @@ -15,6 +15,7 @@ const ALL_ADDONS_KEY = 'ALL'; const StreamsList = ({ className, video, ...props }) => { const { t } = useTranslation(); const { core } = useServices(); + const toast = useToast(); const [selectedAddon, setSelectedAddon] = React.useState(ALL_ADDONS_KEY); const onAddonSelected = React.useCallback((event) => { setSelectedAddon(event.value); @@ -41,6 +42,17 @@ const StreamsList = ({ className, video, ...props }) => { } }); }, + onContextMenu: (e) => { + e.preventDefault(); + if(stream?.infoHash && navigator?.clipboard) { + stream?.infoHash && navigator?.clipboard?.writeText(stream.infoHash); + toast.show({ + type: 'success', + title: 'Copied infohash to clipboard', + timeout: 4000 + }); + } + }, addonName: streams.addon.manifest.name })) }; @@ -146,6 +158,7 @@ const StreamsList = ({ className, video, ...props }) => { progress={stream.progress} deepLinks={stream.deepLinks} onClick={stream.onClick} + onContextMenu={stream.onContextMenu} /> ))}