1+ const PROGRESS_PREFIX = 'streamit:progress:' ;
2+ let currentVideoSrc = '' ;
3+
4+ function progressKey ( src ) {
5+ return `${ PROGRESS_PREFIX } ${ src } ` ;
6+ }
7+
8+ function restoreProgress ( player , src ) {
9+ const saved = parseFloat ( localStorage . getItem ( progressKey ( src ) ) || '' ) ;
10+ if ( Number . isNaN ( saved ) ) return ;
11+
12+ const applyTime = ( ) => {
13+ const nearEnd = player . duration && saved >= player . duration - 1 ;
14+ if ( ! nearEnd ) player . currentTime = saved ;
15+ player . removeEventListener ( 'loadedmetadata' , applyTime ) ;
16+ } ;
17+
18+ if ( player . readyState >= 1 ) applyTime ( ) ;
19+ else player . addEventListener ( 'loadedmetadata' , applyTime ) ;
20+ }
21+
22+ function persistProgress ( player ) {
23+ if ( ! currentVideoSrc ) return ;
24+ const key = progressKey ( currentVideoSrc ) ;
25+ const t = player . currentTime || 0 ;
26+ const nearEnd = player . duration && t >= player . duration - 1 ;
27+
28+ if ( nearEnd ) localStorage . removeItem ( key ) ;
29+ else localStorage . setItem ( key , String ( t ) ) ;
30+ }
31+
132export function playVideo ( src ) {
233 const overlay = document . getElementById ( 'videoOverlay' ) ;
334 const player = document . getElementById ( 'mainPlayer' ) ;
@@ -7,7 +38,10 @@ export function playVideo(src) {
738 return ;
839 }
940
41+ currentVideoSrc = src ;
1042 player . src = src ;
43+ restoreProgress ( player , src ) ;
44+
1145 overlay . classList . remove ( 'hidden' ) ;
1246 setTimeout ( ( ) => {
1347 player . play ( ) . catch ( e => console . log ( "Autoplay bloqué par le navigateur" , e ) ) ;
@@ -19,6 +53,7 @@ export function closeVideo() {
1953 const player = document . getElementById ( 'mainPlayer' ) ;
2054 player . pause ( ) ;
2155 player . src = "" ;
56+ currentVideoSrc = '' ;
2257 overlay . classList . add ( 'hidden' ) ;
2358}
2459
@@ -62,4 +97,27 @@ export function hideLoader() {
6297 const loader = document . getElementById ( 'loader' ) ;
6398 loader . style . opacity = '0' ;
6499 setTimeout ( ( ) => loader . classList . add ( 'hidden' ) , 700 ) ;
100+ }
101+
102+ export function hardenPlayerControls ( ) {
103+ const player = document . getElementById ( 'mainPlayer' ) ;
104+ if ( ! player ) return ;
105+
106+ player . setAttribute ( 'controlsList' , 'nodownload noremoteplayback' ) ;
107+ player . setAttribute ( 'disablepictureinpicture' , '' ) ;
108+ player . setAttribute ( 'playsinline' , '' ) ;
109+ player . addEventListener ( 'contextmenu' , ( e ) => e . preventDefault ( ) ) ;
110+ }
111+
112+ export function initPlayerPersistence ( ) {
113+ const player = document . getElementById ( 'mainPlayer' ) ;
114+ if ( ! player ) return ;
115+
116+ const save = ( ) => persistProgress ( player ) ;
117+ player . addEventListener ( 'timeupdate' , save ) ;
118+ player . addEventListener ( 'pause' , save ) ;
119+ player . addEventListener ( 'ended' , ( ) => {
120+ save ( ) ;
121+ currentVideoSrc = '' ;
122+ } ) ;
65123}
0 commit comments