mirror of
https://gitlab.com/futo-org/fcast.git
synced 2025-08-02 07:17:01 +00:00
webOS: Reworked page navigation, service subscription, and resolution handling
This commit is contained in:
parent
0da73f1f5b
commit
a549296aca
16 changed files with 1425 additions and 374 deletions
|
@ -1,4 +1,9 @@
|
|||
const logger = window.targetAPI.logger;
|
||||
import { v4 as uuidv4 } from 'modules/uuid';
|
||||
import { Logger, LoggerType } from 'common/Logger';
|
||||
require('lib/webOSTVjs-1.2.10/webOSTV.js');
|
||||
require('lib/webOSTVjs-1.2.10/webOSTV-dev.js');
|
||||
|
||||
const logger = new Logger('Common', LoggerType.FRONTEND);
|
||||
const serviceId = 'com.futo.fcast.receiver.service';
|
||||
|
||||
export enum RemoteKeyCode {
|
||||
|
@ -10,59 +15,104 @@ export enum RemoteKeyCode {
|
|||
Back = 461,
|
||||
}
|
||||
|
||||
export function requestService(method: string, successCb: (message: any) => void, failureCb?: (message: any) => void, onCompleteCb?: (message: any) => void): any {
|
||||
return window.webOS.service.request(`luna://${serviceId}/`, {
|
||||
method: method,
|
||||
parameters: {},
|
||||
onSuccess: (message: any) => {
|
||||
if (message.value?.subscribed === true) {
|
||||
logger.info(`requestService: Registered ${method} handler with service`);
|
||||
}
|
||||
else {
|
||||
successCb(message);
|
||||
}
|
||||
},
|
||||
onFailure: (message: any) => {
|
||||
logger.error(`requestService: ${method} ${JSON.stringify(message)}`);
|
||||
export class ServiceManager {
|
||||
private static serviceChannelSuccessCbHandler?: (message: any) => void;
|
||||
private static serviceChannelFailureCbHandler?: (message: any) => void;
|
||||
private static serviceChannelCompleteCbHandler?: (message: any) => void;
|
||||
|
||||
if (failureCb) {
|
||||
failureCb(message);
|
||||
}
|
||||
},
|
||||
onComplete: (message: any) => {
|
||||
if (onCompleteCb) {
|
||||
onCompleteCb(message);
|
||||
}
|
||||
},
|
||||
subscribe: true,
|
||||
resubscribe: true
|
||||
});
|
||||
}
|
||||
|
||||
export function callService(method: string, parameters?: any, successCb?: (message: any) => void, failureCb?: (message: any) => void, onCompleteCb?: (message: any) => void) {
|
||||
return window.webOS.service.request(`luna://${serviceId}/`, {
|
||||
method: method,
|
||||
parameters: parameters,
|
||||
constructor() {
|
||||
// @ts-ignore
|
||||
window.webOS.service.request(`luna://${serviceId}/`, {
|
||||
method: 'service_channel',
|
||||
parameters: { subscriptionId: uuidv4() },
|
||||
onSuccess: (message: any) => {
|
||||
if (successCb) {
|
||||
successCb(message);
|
||||
if (message.value?.subscribed === true) {
|
||||
logger.info(`requestService: Registered 'service_channel' handler with service`);
|
||||
}
|
||||
else if (ServiceManager.serviceChannelSuccessCbHandler) {
|
||||
ServiceManager.serviceChannelSuccessCbHandler(message);
|
||||
}
|
||||
},
|
||||
onFailure: (message: any) => {
|
||||
logger.error(`callService: ${method} ${JSON.stringify(message)}`);
|
||||
logger.error('Error subscribing to the service_channel:', message);
|
||||
|
||||
if (failureCb) {
|
||||
failureCb(message);
|
||||
if (ServiceManager.serviceChannelFailureCbHandler) {
|
||||
ServiceManager.serviceChannelFailureCbHandler(message);
|
||||
}
|
||||
},
|
||||
onComplete: (message: any) => {
|
||||
if (onCompleteCb) {
|
||||
onCompleteCb(message);
|
||||
if (ServiceManager.serviceChannelCompleteCbHandler) {
|
||||
ServiceManager.serviceChannelCompleteCbHandler(message);
|
||||
}
|
||||
},
|
||||
subscribe: false,
|
||||
resubscribe: false
|
||||
});
|
||||
subscribe: true,
|
||||
resubscribe: true
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public subscribeToServiceChannel(successCb: (message: any) => void, failureCb?: (message: any) => void, onCompleteCb?: (message: any) => void) {
|
||||
ServiceManager.serviceChannelSuccessCbHandler = successCb;
|
||||
ServiceManager.serviceChannelFailureCbHandler = failureCb;
|
||||
ServiceManager.serviceChannelCompleteCbHandler = onCompleteCb;
|
||||
}
|
||||
|
||||
public call(method: string, parameters?: any, successCb?: (message: any) => void, failureCb?: (message: any) => void, onCompleteCb?: (message: any) => void) {
|
||||
// @ts-ignore
|
||||
const service = window.webOS.service.request(`luna://${serviceId}/`, {
|
||||
method: 'app_channel',
|
||||
parameters: { event: method, value: parameters },
|
||||
onSuccess: (message: any) => {
|
||||
if (successCb) {
|
||||
successCb(message);
|
||||
}
|
||||
},
|
||||
onFailure: (message: any) => {
|
||||
logger.error(`callService: ${method} ${JSON.stringify(message)}`);
|
||||
|
||||
if (failureCb) {
|
||||
failureCb(message);
|
||||
}
|
||||
},
|
||||
onComplete: (message: any) => {
|
||||
if (onCompleteCb) {
|
||||
onCompleteCb(message);
|
||||
}
|
||||
},
|
||||
subscribe: false,
|
||||
resubscribe: false
|
||||
});
|
||||
|
||||
return service;
|
||||
}
|
||||
}
|
||||
|
||||
// CSS media queries do not work on older webOS versions...
|
||||
export function initializeWindowSizeStylesheet() {
|
||||
const resolution = sessionStorage.getItem('resolution');
|
||||
|
||||
if (resolution) {
|
||||
window.onload = () => {
|
||||
if (resolution == '1920x1080') {
|
||||
document.head.insertAdjacentHTML('beforeend', '<link rel="stylesheet" href="./1920x1080.css" />');
|
||||
}
|
||||
else {
|
||||
document.head.insertAdjacentHTML('beforeend', '<link rel="stylesheet" href="./1280x720.css" />');
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
window.onresize = () => {
|
||||
if (window.innerWidth >= 1920 && window.innerHeight >= 1080) {
|
||||
sessionStorage.setItem('resolution', '1920x1080');
|
||||
document.head.insertAdjacentHTML('beforeend', '<link rel="stylesheet" href="./1920x1080.css" />');
|
||||
}
|
||||
else {
|
||||
sessionStorage.setItem('resolution', '1280x720');
|
||||
document.head.insertAdjacentHTML('beforeend', '<link rel="stylesheet" href="./1280x720.css" />');
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export function targetKeyUpEventListener(event: KeyboardEvent): { handledCase: boolean, key: string } {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue