diff --git a/ui/component/viewers/videoViewer/index.js b/ui/component/viewers/videoViewer/index.js index 62cc04f8b..6a6a91089 100644 --- a/ui/component/viewers/videoViewer/index.js +++ b/ui/component/viewers/videoViewer/index.js @@ -3,6 +3,7 @@ import { makeSelectClaimForUri, makeSelectFileInfoForUri, makeSelectThumbnailFor import { doChangeVolume, doChangeMute, doAnalyticsView } from 'redux/actions/app'; import { selectVolume, selectMute } from 'redux/selectors/app'; import { savePosition } from 'redux/actions/content'; +import { makeSelectContentPositionForUri } from 'redux/selectors/content'; import VideoViewer from './view'; import { withRouter } from 'react-router'; import { doClaimEligiblePurchaseRewards } from 'lbryinc'; @@ -13,7 +14,7 @@ const select = (state, props) => { const { search } = props.location; const urlParams = new URLSearchParams(search); const autoplay = urlParams.get('autoplay'); - const position = urlParams.get('t'); + const position = urlParams.get('t') !== null ? urlParams.get('t') : makeSelectContentPositionForUri(props.uri)(state); return { autoplayIfEmbedded: Boolean(autoplay), diff --git a/ui/component/viewers/videoViewer/internal/videojs.jsx b/ui/component/viewers/videoViewer/internal/videojs.jsx index 4255b1eed..90b77048f 100644 --- a/ui/component/viewers/videoViewer/internal/videojs.jsx +++ b/ui/component/viewers/videoViewer/internal/videojs.jsx @@ -15,7 +15,7 @@ export type Player = { volume: (?number) => number, muted: (?boolean) => boolean, dispose: () => void, - currentTime: number => void, + currentTime: (?number) => number, }; type Props = { diff --git a/ui/component/viewers/videoViewer/view.jsx b/ui/component/viewers/videoViewer/view.jsx index d57cb2d10..b00dc6161 100644 --- a/ui/component/viewers/videoViewer/view.jsx +++ b/ui/component/viewers/videoViewer/view.jsx @@ -31,6 +31,7 @@ type Props = { autoplayIfEmbedded: boolean, doAnalyticsView: (string, number) => Promise, claimRewards: () => void, + savePosition: (string, number) => void, }; /* @@ -54,6 +55,7 @@ function VideoViewer(props: Props) { autoplayIfEmbedded, doAnalyticsView, claimRewards, + savePosition, } = props; const claimId = claim && claim.claim_id; const isAudio = contentType.includes('audio'); @@ -155,6 +157,7 @@ function VideoViewer(props: Props) { if (position) { player.currentTime(position); } + player.on('timeupdate', () => savePosition(uri, player.currentTime())); }, [uri] );