1- import React , { type FC , useCallback , useState } from 'react' ;
1+ import React , { type FC , useCallback , useEffect , useState } from 'react' ;
22
33import './BookOsd.scss' ;
44import IconButton from '../../../elements/emby-button/IconButton' ;
55import globalize from 'lib/globalize' ;
66import * as userSettings from '../../../scripts/settings/userSettings' ;
77import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client' ;
8+ import Screenfull from 'screenfull' ;
89
910interface BookOsdProps {
1011 item : BaseItemDto ;
@@ -17,7 +18,7 @@ interface BookOsdProps {
1718 onIncreaseFontSize ?: ( ) => void ;
1819 onToggleDirection ?: ( ) => void ;
1920 onToggleLayout ?: ( ) => void ;
20- onToggleFullscreen ? : ( ) => void ;
21+ onToggleFullscreen : ( ) => void ;
2122}
2223
2324interface ComicsPlayerSettings {
@@ -44,6 +45,20 @@ const BookOsd: FC<BookOsdProps> = ({
4445 const [ layout , setLayout ] = useState ( settings . pagesPerView === 2 ) ;
4546 const [ fullscreen , setFullscreen ] = useState ( false ) ;
4647
48+ const updateFullscreen = useCallback ( ( state : boolean ) => {
49+ if ( Screenfull . isEnabled ) {
50+ void Screenfull . toggle ( ) ;
51+ } else if ( window . NativeShell ) {
52+ state ? window . NativeShell . enableFullscreen ( ) : window . NativeShell . disableFullscreen ( ) ;
53+ } else if ( document . webkitEnterFullscreen || document . webkitCancelFullscreen ) {
54+ state ? document . webkitEnterFullscreen ?.( ) : document . webkitCancelFullscreen ?.( ) ;
55+ }
56+ } , [ ] ) ;
57+
58+ useEffect ( ( ) => {
59+ return ( ) => updateFullscreen ( false ) ;
60+ } , [ updateFullscreen ] ) ;
61+
4762 const onClickDirection = useCallback ( ( ) => {
4863 onToggleDirection ?.( ) ;
4964 setDirection ( state => ! state ) ;
@@ -55,9 +70,10 @@ const BookOsd: FC<BookOsdProps> = ({
5570 } , [ onToggleLayout ] ) ;
5671
5772 const onClickFullscreen = useCallback ( ( ) => {
73+ updateFullscreen ( ! fullscreen ) ;
5874 onToggleFullscreen ?.( ) ;
5975 setFullscreen ( state => ! state ) ;
60- } , [ onToggleFullscreen ] ) ;
76+ } , [ onToggleFullscreen , updateFullscreen , fullscreen ] ) ;
6177
6278 return (
6379 < div className = 'bookOsd' >
@@ -119,13 +135,11 @@ const BookOsd: FC<BookOsdProps> = ({
119135 />
120136 ) }
121137
122- { onToggleFullscreen && (
123- < IconButton
124- onClick = { onClickFullscreen }
125- icon = { fullscreen ? 'fullscreen_exit' : 'fullscreen' }
126- title = { globalize . translate ( fullscreen ? 'ExitFullscreen' : 'Fullscreen' ) }
127- />
128- ) }
138+ < IconButton
139+ onClick = { onClickFullscreen }
140+ icon = { fullscreen ? 'fullscreen_exit' : 'fullscreen' }
141+ title = { globalize . translate ( fullscreen ? 'ExitFullscreen' : 'Fullscreen' ) }
142+ />
129143 </ div >
130144 </ div >
131145 ) ;
0 commit comments