@@ -453,28 +453,24 @@ if (window.top === window.self) {
453453 }
454454 }
455455 let shiftPressed = false ;
456+ let lastShiftPressTime = 0 ;
457+ const DOUBLE_PRESS_THRESHOLD = 500 ;
456458 function handleShift ( event ) {
457- shiftPressed = event . detail . action === "pressed" ;
458-
459- if ( lockedSpeed && shiftPressed && video . playbackRate !== initialSpeed ) {
460- console . log (
461- "keyboardShift if: video.playbackRate !== initialSpeed: " ,
462- video . playbackRate !== initialSpeed ,
463- video . playbackRate ,
464- initialSpeed
465- ) ;
466- lockedSpeed = false ;
467-
468- currentSpeed = initialSpeed ;
469- video . playbackRate = initialSpeed ;
470- showSpeedDisplay ( ) ;
471- } else {
472- console . log (
473- "keyboardShift else: video.playbackRate !== initialSpeed: " ,
474- video . playbackRate !== initialSpeed ,
475- video . playbackRate ,
476- initialSpeed
477- ) ;
459+ const isPressed = event . detail . action === "pressed" ;
460+ shiftPressed = isPressed ;
461+
462+ if ( isPressed ) {
463+ const now = Date . now ( ) ;
464+ const isDoublePress = now - lastShiftPressTime < DOUBLE_PRESS_THRESHOLD ;
465+ lastShiftPressTime = now ;
466+
467+ if ( lockedSpeed && isDoublePress && video . playbackRate !== initialSpeed ) {
468+ console . log ( "Double Shift detected - resetting speed" ) ;
469+ lockedSpeed = false ;
470+ currentSpeed = initialSpeed ;
471+ video . playbackRate = initialSpeed ;
472+ showSpeedDisplay ( ) ;
473+ }
478474 }
479475 }
480476
@@ -562,9 +558,59 @@ if (window.top === window.self) {
562558 }
563559 } ) ;
564560 document . addEventListener ( "mediaPlay" , ( event ) => {
565- // https://github.com/stopsopa/os-browser-bridge/blob/main/SPECIAL.md#detect-media-keys
566- document . querySelector ( 'tp-yt-paper-dialog [id="close-button"]' ) ?. click ( ) ;
561+ log ( "mediaPlay:" , event . detail . action , "document.hidden" , document . hidden ) ;
562+
563+ if ( document . hidden ) {
564+ return ;
565+ }
566+
567+ if ( event . detail . action === "pressed" ) {
568+ document . querySelector ( 'tp-yt-paper-dialog [id="close-button"]' ) ?. click ( ) ;
569+ return ;
570+ // let's not do that here, allow native media keyboard buttons to control it
571+ // this way when I take off my headphones we give a chance for native event to stop music
572+ if ( video . paused ) {
573+ video . play ( ) ;
574+ } else {
575+ video . pause ( ) ;
576+ }
577+ }
567578 } ) ;
579+
580+ ( function ( ) {
581+ let isCommandPressed = false ;
582+ document . addEventListener ( "keyboardCommand" , ( e ) => {
583+ isCommandPressed = e . detail . action === "pressed" ;
584+ } ) ;
585+ document . addEventListener (
586+ "mediaNext" ,
587+ ( e ) => {
588+ if ( document . hidden ) {
589+ return ;
590+ }
591+ if ( isCommandPressed && e . detail . action === "pressed" ) {
592+ log ( "→ Playlist Next (Local override)" ) ;
593+ document . querySelector ( ".ytp-next-button" ) ?. click ( ) ;
594+ e . stopImmediatePropagation ( ) ;
595+ }
596+ } ,
597+ true
598+ ) ;
599+ document . addEventListener (
600+ "mediaPrevious" ,
601+ ( e ) => {
602+ if ( document . hidden ) {
603+ return ;
604+ }
605+ if ( isCommandPressed && e . detail . action === "pressed" ) {
606+ log ( "→ Playlist Previous (Local override)" ) ;
607+ document . querySelector ( ".ytp-prev-button" ) ?. click ( ) ;
608+ e . stopImmediatePropagation ( ) ;
609+ }
610+ } ,
611+ true
612+ ) ;
613+ } ) ( ) ;
568614 } catch ( e ) {
569615 log ( "general try catch error:" , e ) ;
570616 }
0 commit comments