1
0
Fork 0
mirror of https://gitlab.com/futo-org/fcast.git synced 2025-07-28 12:57:00 +00:00

webOS: Fixed key and launch event handlers

This commit is contained in:
Michael Hollister 2025-07-16 12:01:23 -05:00
parent a549296aca
commit b0a706dfed
8 changed files with 69 additions and 15 deletions

View file

@ -203,7 +203,7 @@ function renderQRCode(url: string) {
onQRCodeRendered(); onQRCodeRendered();
} }
document.addEventListener('keydown', (event: KeyboardEvent) => { export function keyDownEventHandler(event: KeyboardEvent) {
// logger.info("KeyDown", event); // logger.info("KeyDown", event);
let result = targetKeyDownEventListener(event); let result = targetKeyDownEventListener(event);
let handledCase = result.handledCase; let handledCase = result.handledCase;
@ -221,8 +221,9 @@ document.addEventListener('keydown', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyDown.has(key)) { if (window.targetAPI.getSubscribedKeys().keyDown.has(key)) {
window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyDown, key, event.repeat, handledCase))); window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyDown, key, event.repeat, handledCase)));
} }
}); }
document.addEventListener('keyup', (event: KeyboardEvent) => {
export function keyUpEventHandler(event: KeyboardEvent) {
// logger.info("KeyUp", event); // logger.info("KeyUp", event);
let result = targetKeyUpEventListener(event); let result = targetKeyUpEventListener(event);
let handledCase = result.handledCase; let handledCase = result.handledCase;
@ -240,4 +241,7 @@ document.addEventListener('keyup', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyUp.has(key)) { if (window.targetAPI.getSubscribedKeys().keyUp.has(key)) {
window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyUp, key, event.repeat, handledCase))); window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyUp, key, event.repeat, handledCase)));
} }
}); }
document.addEventListener('keydown', keyDownEventHandler);
document.addEventListener('keyup', keyUpEventHandler);

View file

@ -923,7 +923,7 @@ function skipForward() {
} }
} }
document.addEventListener('keydown', (event: KeyboardEvent) => { function keyDownEventHandler(event: KeyboardEvent) {
// logger.info("KeyDown", event.key); // logger.info("KeyDown", event.key);
let result = targetKeyDownEventListener(event); let result = targetKeyDownEventListener(event);
let handledCase = result.handledCase; let handledCase = result.handledCase;
@ -993,8 +993,9 @@ document.addEventListener('keydown', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyDown.has(key)) { if (window.targetAPI.getSubscribedKeys().keyDown.has(key)) {
window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyDown, key, event.repeat, handledCase))); window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyDown, key, event.repeat, handledCase)));
} }
}); }
document.addEventListener('keyup', (event: KeyboardEvent) => {
function keyUpEventHandler(event: KeyboardEvent) {
// logger.info("KeyUp", event); // logger.info("KeyUp", event);
let result = targetKeyUpEventListener(event); let result = targetKeyUpEventListener(event);
let handledCase = result.handledCase; let handledCase = result.handledCase;
@ -1012,7 +1013,10 @@ document.addEventListener('keyup', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyUp.has(key)) { if (window.targetAPI.getSubscribedKeys().keyUp.has(key)) {
window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyUp, key, event.repeat, handledCase))); window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyUp, key, event.repeat, handledCase)));
} }
}); }
document.addEventListener('keydown', keyDownEventHandler);
document.addEventListener('keyup', keyUpEventHandler);
export { export {
PlayerControlEvent, PlayerControlEvent,
@ -1042,4 +1046,6 @@ export {
formatDuration, formatDuration,
skipBack, skipBack,
skipForward, skipForward,
keyDownEventHandler,
keyUpEventHandler,
}; };

View file

@ -329,7 +329,7 @@ document.onmousemove = () => {
uiHideTimer.start(); uiHideTimer.start();
}; };
document.addEventListener('keydown', (event: KeyboardEvent) => { function keyDownEventHandler(event: KeyboardEvent) {
// logger.info("KeyDown", event); // logger.info("KeyDown", event);
let result = targetKeyDownEventListener(event); let result = targetKeyDownEventListener(event);
let handledCase = result.handledCase; let handledCase = result.handledCase;
@ -379,8 +379,9 @@ document.addEventListener('keydown', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyDown.has(key)) { if (window.targetAPI.getSubscribedKeys().keyDown.has(key)) {
window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyDown, key, event.repeat, handledCase))); window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyDown, key, event.repeat, handledCase)));
} }
}); }
document.addEventListener('keyup', (event: KeyboardEvent) => {
function keyUpEventHandler(event: KeyboardEvent) {
// logger.info("KeyUp", event); // logger.info("KeyUp", event);
let result = targetKeyUpEventListener(event); let result = targetKeyUpEventListener(event);
let handledCase = result.handledCase; let handledCase = result.handledCase;
@ -398,7 +399,10 @@ document.addEventListener('keyup', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyUp.has(key)) { if (window.targetAPI.getSubscribedKeys().keyUp.has(key)) {
window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyUp, key, event.repeat, handledCase))); window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyUp, key, event.repeat, handledCase)));
} }
}); }
document.addEventListener('keydown', keyDownEventHandler);
document.addEventListener('keyup', keyUpEventHandler);
export { export {
PlayerControlEvent, PlayerControlEvent,
@ -411,4 +415,6 @@ export {
onPlayPlaylist, onPlayPlaylist,
playerCtrlStateUpdate, playerCtrlStateUpdate,
setPlaylistItem, setPlaylistItem,
keyDownEventHandler,
keyUpEventHandler,
}; };

View file

@ -1,5 +1,7 @@
import { Logger, LoggerType } from 'common/Logger'; import { Logger, LoggerType } from 'common/Logger';
import { ServiceManager } from 'lib/common'; import { ServiceManager } from 'lib/common';
require('lib/webOSTVjs-1.2.10/webOSTV.js');
require('lib/webOSTVjs-1.2.10/webOSTV-dev.js');
declare global { declare global {
interface Window { interface Window {
@ -10,6 +12,8 @@ declare global {
const logger = new Logger('Main', LoggerType.FRONTEND); const logger = new Logger('Main', LoggerType.FRONTEND);
const webPage: HTMLIFrameElement = document.getElementById('page') as HTMLIFrameElement; const webPage: HTMLIFrameElement = document.getElementById('page') as HTMLIFrameElement;
let launchHandlerCallback = () => { logger.warn('No (re)launch handler set'); }; let launchHandlerCallback = () => { logger.warn('No (re)launch handler set'); };
let keyDownEventHandler = () => { logger.warn('No keyDown event handler set'); };
let keyUpEventHandler = () => { logger.warn('No keyUp event handler set'); };
function loadPage(path: string) { function loadPage(path: string) {
// @ts-ignore // @ts-ignore
@ -20,13 +24,35 @@ function loadPage(path: string) {
// so bugs related to oversubscribing/canceling services are worked around by only subscribing once to // so bugs related to oversubscribing/canceling services are worked around by only subscribing once to
// required services // required services
logger.info('Starting webOS application') logger.info('Starting webOS application')
window.webOS.deviceInfo((info) => { logger.info('Device info:', info); });
window.webOSApp = { window.webOSApp = {
serviceManager: new ServiceManager(), serviceManager: new ServiceManager(),
setLaunchHandler: (callback: () => void) => launchHandlerCallback = callback, setLaunchHandler: (callback: () => void) => {
document.removeEventListener('webOSLaunch', launchHandlerCallback);
document.removeEventListener('webOSRelaunch', launchHandlerCallback);
launchHandlerCallback = callback;
document.addEventListener('webOSLaunch', launchHandlerCallback);
document.addEventListener('webOSRelaunch', launchHandlerCallback);
},
setKeyDownHandler: (callback: () => void) => {
document.removeEventListener('keydown', keyDownEventHandler);
keyDownEventHandler = callback;
document.addEventListener('keydown', keyDownEventHandler);
},
setKeyUpHandler: (callback: () => void) => {
document.removeEventListener('keyup', keyUpEventHandler);
keyUpEventHandler = callback;
document.addEventListener('keyup', keyUpEventHandler);
},
loadPage: loadPage loadPage: loadPage
}; };
document.addEventListener('webOSLaunch', launchHandlerCallback); document.addEventListener('webOSLaunch', launchHandlerCallback);
document.addEventListener('webOSRelaunch', launchHandlerCallback); document.addEventListener('webOSRelaunch', launchHandlerCallback);
document.addEventListener('keydown', keyDownEventHandler);
document.addEventListener('keyup', keyUpEventHandler);
loadPage('./main_window/index.html'); loadPage('./main_window/index.html');

View file

@ -109,6 +109,7 @@ try {
}; };
const launchHandler = () => { const launchHandler = () => {
// Launch handler not supported in simulator due to JSON parsing errors of launch parameters
const params = window.webOSDev.launchParams(); const params = window.webOSDev.launchParams();
logger.info(`Main: (Re)launching FCast Receiver with args: ${JSON.stringify(params)}`); logger.info(`Main: (Re)launching FCast Receiver with args: ${JSON.stringify(params)}`);

View file

@ -1,4 +1,4 @@
import 'common/main/Renderer'; import { keyDownEventHandler, keyUpEventHandler } from 'common/main/Renderer';
import { RemoteKeyCode } from 'lib/common'; import { RemoteKeyCode } from 'lib/common';
import * as common from 'lib/common'; import * as common from 'lib/common';
@ -29,6 +29,9 @@ backgroundVideo.onplaying = () => {
backgroundVideo.onplaying = null; backgroundVideo.onplaying = null;
}; };
window.parent.webOSApp.setKeyDownHandler(keyDownEventHandler);
window.parent.webOSApp.setKeyUpHandler(keyUpEventHandler);
export function onQRCodeRendered() { export function onQRCodeRendered() {
qrCodeRendered = true; qrCodeRendered = true;
} }

View file

@ -20,6 +20,8 @@ import {
formatDuration, formatDuration,
skipBack, skipBack,
skipForward, skipForward,
keyDownEventHandler,
keyUpEventHandler,
} from 'common/player/Renderer'; } from 'common/player/Renderer';
import { RemoteKeyCode } from 'lib/common'; import { RemoteKeyCode } from 'lib/common';
import * as common from 'lib/common'; import * as common from 'lib/common';
@ -28,6 +30,9 @@ const captionsBaseHeightCollapsed = 150;
const captionsBaseHeightExpanded = 320; const captionsBaseHeightExpanded = 320;
const captionsLineHeight = 68; const captionsLineHeight = 68;
window.parent.webOSApp.setKeyDownHandler(keyDownEventHandler);
window.parent.webOSApp.setKeyUpHandler(keyUpEventHandler);
export function targetPlayerCtrlStateUpdate(event: PlayerControlEvent): boolean { export function targetPlayerCtrlStateUpdate(event: PlayerControlEvent): boolean {
let handledCase = false; let handledCase = false;

View file

@ -1,7 +1,10 @@
import { PlayerControlEvent, playerCtrlStateUpdate, onPlay, onPlayPlaylist, setPlaylistItem, playlistIndex } from 'common/viewer/Renderer'; import { PlayerControlEvent, playerCtrlStateUpdate, onPlay, onPlayPlaylist, setPlaylistItem, playlistIndex, keyDownEventHandler, keyUpEventHandler } from 'common/viewer/Renderer';
import { RemoteKeyCode } from 'lib/common'; import { RemoteKeyCode } from 'lib/common';
import * as common from 'lib/common'; import * as common from 'lib/common';
window.parent.webOSApp.setKeyDownHandler(keyDownEventHandler);
window.parent.webOSApp.setKeyUpHandler(keyUpEventHandler);
export function targetPlayerCtrlStateUpdate(event: PlayerControlEvent): boolean { export function targetPlayerCtrlStateUpdate(event: PlayerControlEvent): boolean {
let handledCase = false; let handledCase = false;
return handledCase; return handledCase;