mirror of
https://gitlab.com/futo-org/fcast.git
synced 2025-08-23 15:52:49 +00:00
webOS: Initial port of Electron v2.2.0 changes
This commit is contained in:
parent
b08c3dab95
commit
4c1cb6cf8e
28 changed files with 1273 additions and 532 deletions
|
@ -75,32 +75,48 @@ if (TARGET === 'electron') {
|
|||
|
||||
// @ts-ignore
|
||||
} else if (TARGET === 'webOS' || TARGET === 'tizenOS') {
|
||||
preloadData = {
|
||||
sendPlaybackErrorCb: () => { logger.error('Player: Callback "send_playback_error" not set'); },
|
||||
sendPlaybackUpdateCb: () => { logger.error('Player: Callback "send_playback_update" not set'); },
|
||||
sendVolumeUpdateCb: () => { logger.error('Player: Callback "send_volume_update" not set'); },
|
||||
// onPlayCb: () => { logger.error('Player: Callback "play" not set'); },
|
||||
onPlayCb: undefined,
|
||||
onPauseCb: () => { logger.error('Player: Callback "pause" not set'); },
|
||||
onResumeCb: () => { logger.error('Player: Callback "resume" not set'); },
|
||||
onSeekCb: () => { logger.error('Player: Callback "onseek" not set'); },
|
||||
onSetVolumeCb: () => { logger.error('Player: Callback "setvolume" not set'); },
|
||||
onSetSpeedCb: () => { logger.error('Player: Callback "setspeed" not set'); },
|
||||
getSessionsCb: () => { logger.error('Player: Callback "getSessions" not set'); },
|
||||
onConnectCb: () => { logger.error('Player: Callback "onConnect" not set'); },
|
||||
onDisconnectCb: () => { logger.error('Player: Callback "onDisconnect" not set'); },
|
||||
preloadData.sendPlaybackUpdateCb = (update: PlaybackUpdateMessage) => { logger.error('Player: Callback "send_playback_update" not set'); };
|
||||
preloadData.sendVolumeUpdateCb = (update: VolumeUpdateMessage) => { logger.error('Player: Callback "send_volume_update" not set'); };
|
||||
preloadData.sendPlaybackErrorCb = (error: PlaybackErrorMessage) => { logger.error('Player: Callback "send_playback_error" not set'); };
|
||||
preloadData.sendEventCb = (message: EventMessage) => { logger.error('Player: Callback "onSendEventCb" not set'); };
|
||||
// preloadData.onPlayCb = () => { logger.error('Player: Callback "play" not set'); };
|
||||
preloadData.onPlayCb = undefined;
|
||||
preloadData.onPauseCb = () => { logger.error('Player: Callback "pause" not set'); };
|
||||
preloadData.onResumeCb = () => { logger.error('Player: Callback "resume" not set'); };
|
||||
preloadData.onSeekCb = () => { logger.error('Player: Callback "onseek" not set'); };
|
||||
preloadData.onSetVolumeCb = () => { logger.error('Player: Callback "setvolume" not set'); };
|
||||
preloadData.onSetSpeedCb = () => { logger.error('Player: Callback "setspeed" not set'); };
|
||||
preloadData.onSetPlaylistItemCb = () => { logger.error('Player: Callback "onSetPlaylistItem" not set'); };
|
||||
|
||||
preloadData.sendPlayRequestCb = () => { logger.error('Player: Callback "sendPlayRequest" not set'); };
|
||||
preloadData.getSessionsCb = () => { logger.error('Player: Callback "getSessions" not set'); };
|
||||
preloadData.onConnectCb = () => { logger.error('Player: Callback "onConnect" not set'); };
|
||||
preloadData.onDisconnectCb = () => { logger.error('Player: Callback "onDisconnect" not set'); };
|
||||
preloadData.onPlayPlaylistCb = () => { logger.error('Player: Callback "onPlayPlaylist" not set'); };
|
||||
|
||||
preloadData.onEventSubscribedKeysUpdate = (value: { keyDown: Set<string>, keyUp: Set<string> }) => {
|
||||
preloadData.subscribedKeys.keyDown = value.keyDown;
|
||||
preloadData.subscribedKeys.keyUp = value.keyUp;
|
||||
};
|
||||
|
||||
preloadData.onToast = (message: string, icon: ToastIcon = ToastIcon.INFO, duration: number = 5000) => {
|
||||
toast(message, icon, duration);
|
||||
};
|
||||
|
||||
window.targetAPI = {
|
||||
sendPlaybackError: (error: PlaybackErrorMessage) => { preloadData.sendPlaybackErrorCb(error); },
|
||||
sendPlaybackUpdate: (update: PlaybackUpdateMessage) => { preloadData.sendPlaybackUpdateCb(update); },
|
||||
sendVolumeUpdate: (update: VolumeUpdateMessage) => { preloadData.sendVolumeUpdateCb(update); },
|
||||
sendPlaybackError: (error: PlaybackErrorMessage) => { preloadData.sendPlaybackErrorCb(error); },
|
||||
sendEvent: (message: EventMessage) => { preloadData.sendEventCb(message); },
|
||||
onPlay: (callback: any) => { preloadData.onPlayCb = callback; },
|
||||
onPause: (callback: any) => { preloadData.onPauseCb = callback; },
|
||||
onResume: (callback: any) => { preloadData.onResumeCb = callback; },
|
||||
onSeek: (callback: any) => { preloadData.onSeekCb = callback; },
|
||||
onSetVolume: (callback: any) => { preloadData.onSetVolumeCb = callback; },
|
||||
onSetSpeed: (callback: any) => { preloadData.onSetSpeedCb = callback; },
|
||||
onSetPlaylistItem: (callback: any) => { preloadData.onSetPlaylistItemCb = callback; },
|
||||
|
||||
sendPlayRequest: (message: PlayMessage, playlistIndex: number) => { preloadData.sendPlayRequestCb(message, playlistIndex); },
|
||||
getSessions: (callback?: () => Promise<[any]>) => {
|
||||
if (callback) {
|
||||
preloadData.getSessionsCb = callback;
|
||||
|
@ -109,8 +125,10 @@ if (TARGET === 'electron') {
|
|||
return preloadData.getSessionsCb();
|
||||
}
|
||||
},
|
||||
getSubscribedKeys: () => preloadData.subscribedKeys,
|
||||
onConnect: (callback: any) => { preloadData.onConnectCb = callback; },
|
||||
onDisconnect: (callback: any) => { preloadData.onDisconnectCb = callback; },
|
||||
onPlayPlaylist: (callback: any) => { preloadData.onPlayPlaylistCb = callback; },
|
||||
logger: loggerInterface,
|
||||
};
|
||||
} else {
|
||||
|
|
|
@ -12,7 +12,8 @@ import {
|
|||
targetKeyDownEventListener,
|
||||
captionsBaseHeightCollapsed,
|
||||
captionsBaseHeightExpanded,
|
||||
captionsLineHeight
|
||||
captionsLineHeight,
|
||||
targetKeyUpEventListener
|
||||
} from 'src/player/Renderer';
|
||||
|
||||
const logger = window.targetAPI.logger;
|
||||
|
@ -912,74 +913,6 @@ document.addEventListener('click', (event: MouseEvent) => {
|
|||
const skipInterval = 10;
|
||||
const volumeIncrement = 0.1;
|
||||
|
||||
function keyDownEventListener(event: KeyboardEvent) {
|
||||
// logger.info("KeyDown", event);
|
||||
let handledCase = targetKeyDownEventListener(event);
|
||||
|
||||
if (!handledCase) {
|
||||
switch (event.code) {
|
||||
case 'ArrowLeft':
|
||||
skipBack();
|
||||
event.preventDefault();
|
||||
handledCase = true;
|
||||
break;
|
||||
case 'ArrowRight':
|
||||
skipForward();
|
||||
event.preventDefault();
|
||||
handledCase = true;
|
||||
break;
|
||||
case "Home":
|
||||
player?.setCurrentTime(0);
|
||||
event.preventDefault();
|
||||
handledCase = true;
|
||||
break;
|
||||
case "End":
|
||||
if (isLive) {
|
||||
setLivePosition();
|
||||
}
|
||||
else {
|
||||
player?.setCurrentTime(player?.getDuration());
|
||||
}
|
||||
event.preventDefault();
|
||||
handledCase = true;
|
||||
break;
|
||||
case 'KeyK':
|
||||
case 'Space':
|
||||
case 'Enter':
|
||||
// Play/pause toggle
|
||||
if (player?.isPaused()) {
|
||||
player?.play();
|
||||
} else {
|
||||
player?.pause();
|
||||
}
|
||||
event.preventDefault();
|
||||
handledCase = true;
|
||||
break;
|
||||
case 'KeyM':
|
||||
// Mute toggle
|
||||
player?.setMute(!player?.isMuted());
|
||||
handledCase = true;
|
||||
break;
|
||||
case 'ArrowUp':
|
||||
// Volume up
|
||||
volumeChangeHandler(Math.min(player?.getVolume() + volumeIncrement, 1));
|
||||
handledCase = true;
|
||||
break;
|
||||
case 'ArrowDown':
|
||||
// Volume down
|
||||
volumeChangeHandler(Math.max(player?.getVolume() - volumeIncrement, 0));
|
||||
handledCase = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (window.targetAPI.getSubscribedKeys().keyDown.has(event.key)) {
|
||||
window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyDown, event.key, event.repeat, handledCase)));
|
||||
}
|
||||
}
|
||||
|
||||
function skipBack() {
|
||||
player?.setCurrentTime(Math.max(player?.getCurrentTime() - skipInterval, 0));
|
||||
}
|
||||
|
@ -990,10 +923,94 @@ function skipForward() {
|
|||
}
|
||||
}
|
||||
|
||||
document.addEventListener('keydown', keyDownEventListener);
|
||||
document.addEventListener('keydown', (event: KeyboardEvent) => {
|
||||
// logger.info("KeyDown", event.key);
|
||||
let result = targetKeyDownEventListener(event);
|
||||
let handledCase = result.handledCase;
|
||||
|
||||
// @ts-ignore
|
||||
let key = (TARGET === 'webOS' && result.key !== '') ? result.key : event.key;
|
||||
|
||||
if (!handledCase) {
|
||||
switch (event.key.toLowerCase()) {
|
||||
case 'arrowleft':
|
||||
skipBack();
|
||||
event.preventDefault();
|
||||
handledCase = true;
|
||||
break;
|
||||
case 'arrowright':
|
||||
skipForward();
|
||||
event.preventDefault();
|
||||
handledCase = true;
|
||||
break;
|
||||
case "home":
|
||||
player?.setCurrentTime(0);
|
||||
event.preventDefault();
|
||||
handledCase = true;
|
||||
break;
|
||||
case "end":
|
||||
if (isLive) {
|
||||
setLivePosition();
|
||||
}
|
||||
else {
|
||||
player?.setCurrentTime(player?.getDuration());
|
||||
}
|
||||
event.preventDefault();
|
||||
handledCase = true;
|
||||
break;
|
||||
case 'k':
|
||||
case ' ':
|
||||
case 'enter':
|
||||
// Play/pause toggle
|
||||
if (player?.isPaused()) {
|
||||
player?.play();
|
||||
} else {
|
||||
player?.pause();
|
||||
}
|
||||
event.preventDefault();
|
||||
handledCase = true;
|
||||
break;
|
||||
case 'm':
|
||||
// Mute toggle
|
||||
player?.setMute(!player?.isMuted());
|
||||
handledCase = true;
|
||||
break;
|
||||
case 'arrowup':
|
||||
// Volume up
|
||||
volumeChangeHandler(Math.min(player?.getVolume() + volumeIncrement, 1));
|
||||
handledCase = true;
|
||||
break;
|
||||
case 'arrowdown':
|
||||
// Volume down
|
||||
volumeChangeHandler(Math.max(player?.getVolume() - volumeIncrement, 0));
|
||||
handledCase = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
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) => {
|
||||
if (window.targetAPI.getSubscribedKeys().keyUp.has(event.key)) {
|
||||
window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyUp, event.key, event.repeat, false)));
|
||||
// logger.info("KeyUp", event);
|
||||
let result = targetKeyUpEventListener(event);
|
||||
let handledCase = result.handledCase;
|
||||
|
||||
// @ts-ignore
|
||||
let key = (TARGET === 'webOS' && result.key !== '') ? result.key : event.key;
|
||||
|
||||
if (!handledCase) {
|
||||
switch (event.key) {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (window.targetAPI.getSubscribedKeys().keyUp.has(key)) {
|
||||
window.targetAPI.sendEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyUp, key, event.repeat, handledCase)));
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -1020,6 +1037,7 @@ export {
|
|||
captionsBaseHeight,
|
||||
captionsLineHeight,
|
||||
onPlay,
|
||||
onPlayPlaylist,
|
||||
playerCtrlStateUpdate,
|
||||
formatDuration,
|
||||
skipBack,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue