1
0
Fork 0
mirror of https://gitlab.com/futo-org/fcast.git synced 2025-07-28 04:46:59 +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();
}
document.addEventListener('keydown', (event: KeyboardEvent) => {
export function keyDownEventHandler(event: KeyboardEvent) {
// logger.info("KeyDown", event);
let result = targetKeyDownEventListener(event);
let handledCase = result.handledCase;
@ -221,8 +221,9 @@ document.addEventListener('keydown', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyDown.has(key)) {
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);
let result = targetKeyUpEventListener(event);
let handledCase = result.handledCase;
@ -240,4 +241,7 @@ document.addEventListener('keyup', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyUp.has(key)) {
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);
let result = targetKeyDownEventListener(event);
let handledCase = result.handledCase;
@ -993,8 +993,9 @@ document.addEventListener('keydown', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyDown.has(key)) {
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);
let result = targetKeyUpEventListener(event);
let handledCase = result.handledCase;
@ -1012,7 +1013,10 @@ document.addEventListener('keyup', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyUp.has(key)) {
window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyUp, key, event.repeat, handledCase)));
}
});
}
document.addEventListener('keydown', keyDownEventHandler);
document.addEventListener('keyup', keyUpEventHandler);
export {
PlayerControlEvent,
@ -1042,4 +1046,6 @@ export {
formatDuration,
skipBack,
skipForward,
keyDownEventHandler,
keyUpEventHandler,
};

View file

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

View file

@ -1,5 +1,7 @@
import { Logger, LoggerType } from 'common/Logger';
import { ServiceManager } from 'lib/common';
require('lib/webOSTVjs-1.2.10/webOSTV.js');
require('lib/webOSTVjs-1.2.10/webOSTV-dev.js');
declare global {
interface Window {
@ -10,6 +12,8 @@ declare global {
const logger = new Logger('Main', LoggerType.FRONTEND);
const webPage: HTMLIFrameElement = document.getElementById('page') as HTMLIFrameElement;
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) {
// @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
// required services
logger.info('Starting webOS application')
window.webOS.deviceInfo((info) => { logger.info('Device info:', info); });
window.webOSApp = {
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
};
document.addEventListener('webOSLaunch', launchHandlerCallback);
document.addEventListener('webOSRelaunch', launchHandlerCallback);
document.addEventListener('keydown', keyDownEventHandler);
document.addEventListener('keyup', keyUpEventHandler);
loadPage('./main_window/index.html');

View file

@ -109,6 +109,7 @@ try {
};
const launchHandler = () => {
// Launch handler not supported in simulator due to JSON parsing errors of launch parameters
const params = window.webOSDev.launchParams();
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 * as common from 'lib/common';
@ -29,6 +29,9 @@ backgroundVideo.onplaying = () => {
backgroundVideo.onplaying = null;
};
window.parent.webOSApp.setKeyDownHandler(keyDownEventHandler);
window.parent.webOSApp.setKeyUpHandler(keyUpEventHandler);
export function onQRCodeRendered() {
qrCodeRendered = true;
}

View file

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