@@ -97,6 +97,43 @@ export const VideoPlayer: FunctionComponent<VideoPlayerProps> = ({
9797 return pipButtonContainer ;
9898 } ;
9999
100+ useEffect ( ( ) => {
101+ if ( ! player ) return ;
102+
103+ const savedCaptionSetting = localStorage . getItem ( 'captionSetting' ) ;
104+ const tracks = player . textTracks ( ) ;
105+
106+ if ( savedCaptionSetting && player ) {
107+ for ( let i = 0 ; i < tracks . length ; i ++ ) {
108+ const track = tracks [ i ] ;
109+
110+ if ( track ) {
111+ track . mode =
112+ savedCaptionSetting === 'showing' ? 'showing' : 'disabled' ;
113+ }
114+ }
115+ }
116+
117+ const handleTrackChange = ( ) => {
118+ for ( let i = 0 ; i < tracks . length ; i ++ ) {
119+ const track = tracks [ i ] ;
120+ if ( track . kind === 'subtitles' && track . language === 'en' ) {
121+ track . addEventListener ( 'modechange' , ( ) => {
122+ localStorage . setItem ( 'captionSetting' , track . mode ) ;
123+ } ) ;
124+ }
125+ }
126+ } ;
127+
128+ handleTrackChange ( ) ;
129+ return ( ) => {
130+ for ( let i = 0 ; i < tracks . length ; i ++ ) {
131+ const track = tracks [ i ] ;
132+ track . removeEventListener ( 'modechange' , handleTrackChange ) ;
133+ }
134+ } ;
135+ } , [ player ] ) ;
136+
100137 useEffect ( ( ) => {
101138 const t = searchParams . get ( 'timestamp' ) ;
102139 if ( contentId && player && ! t ) {
@@ -260,11 +297,8 @@ export const VideoPlayer: FunctionComponent<VideoPlayerProps> = ({
260297 const track = tracks [ i ] ;
261298
262299 if ( track . kind === 'subtitles' && track . language === 'en' ) {
263- if ( track . mode === 'hidden' ) {
264- track . mode = 'showing' ;
265- } else {
266- track . mode = 'hidden' ;
267- }
300+ if ( track . mode === 'disabled' ) track . mode = 'showing' ;
301+ else track . mode = 'disabled' ;
268302 }
269303 }
270304 event . stopPropagation ( ) ;
@@ -323,6 +357,7 @@ export const VideoPlayer: FunctionComponent<VideoPlayerProps> = ({
323357 document . removeEventListener ( 'keydown' , handleKeyPress ) ;
324358 } ;
325359 } , [ player ] ) ;
360+
326361 useEffect ( ( ) => {
327362 if ( ! player ) {
328363 return ;
0 commit comments