1
0
Fork 0
mirror of https://gitlab.com/futo-org/fcast.git synced 2025-08-03 15:57:01 +00:00

Refractored WebOS preload out of common preload

This commit is contained in:
Michael Hollister 2025-01-07 22:47:46 -06:00
parent 3142709d7f
commit bff3440a8e
5 changed files with 244 additions and 421 deletions

View file

@ -1,5 +1,4 @@
/* eslint-disable @typescript-eslint/ban-ts-comment */
/* eslint-disable @typescript-eslint/no-require-imports */
/* eslint-disable @typescript-eslint/no-explicit-any */
import { PlaybackErrorMessage, PlaybackUpdateMessage, VolumeUpdateMessage } from 'common/Packets';
export {};
@ -34,219 +33,29 @@ if (TARGET === 'electron') {
// @ts-ignore
} else if (TARGET === 'webOS') {
require('lib/webOSTVjs-1.2.10/webOSTV.js');
require('lib/webOSTVjs-1.2.10/webOSTV-dev.js');
const serviceId = 'com.futo.fcast.receiver.service';
let onPlayCb, onPauseCb, onResumeCb;
let onSeekCb, onSetVolumeCb, onSetSpeedCb;
let playerWindowOpen = false;
const playService = window.webOS.service.request(`luna://${serviceId}/`, {
method:"play",
parameters: {},
onSuccess: (message: any) => {
// console.log(JSON.stringify(message));
if (message.value.subscribed === true) {
console.log('Player: Registered play handler with service');
}
if (message.value.playData !== null) {
if (!playerWindowOpen) {
playerWindowOpen = true;
}
if (onPlayCb === undefined) {
window.webOSAPI.pendingPlay = message.value.playData;
}
else {
onPlayCb(null, message.value.playData);
}
}
},
onFailure: (message: any) => {
console.error(`Player: play ${JSON.stringify(message)}`);
},
subscribe: true,
resubscribe: true
});
const pauseService = window.webOS.service.request(`luna://${serviceId}/`, {
method:"pause",
parameters: {},
onSuccess: (message: any) => {
if (message.value.subscribed === true) {
console.log('Player: Registered pause handler with service');
}
else {
onPauseCb();
}
},
onFailure: (message: any) => {
console.error(`Player: pause ${JSON.stringify(message)}`);
},
subscribe: true,
resubscribe: true
});
const resumeService = window.webOS.service.request(`luna://${serviceId}/`, {
method:"resume",
parameters: {},
onSuccess: (message: any) => {
if (message.value.subscribed === true) {
console.log('Player: Registered resume handler with service');
}
else {
onResumeCb();
}
},
onFailure: (message: any) => {
console.error(`Player: resume ${JSON.stringify(message)}`);
},
subscribe: true,
resubscribe: true
});
const stopService = window.webOS.service.request(`luna://${serviceId}/`, {
method:"stop",
parameters: {},
onSuccess: (message: any) => {
if (message.value.subscribed === true) {
console.log('Player: Registered stop handler with service');
}
else {
playerWindowOpen = false;
playService.cancel();
pauseService.cancel();
resumeService.cancel();
stopService.cancel();
seekService.cancel();
setVolumeService.cancel();
setSpeedService.cancel();
// WebOS 22 and earlier does not work well using the history API,
// so manually handling page navigation...
// history.back();
window.open('../main_window/index.html');
}
},
onFailure: (message: any) => {
console.error(`Player: stop ${JSON.stringify(message)}`);
},
subscribe: true,
resubscribe: true
});
const seekService = window.webOS.service.request(`luna://${serviceId}/`, {
method:"seek",
parameters: {},
onSuccess: (message: any) => {
if (message.value.subscribed === true) {
console.log('Player: Registered seek handler with service');
}
else {
onSeekCb(null, message.value);
}
},
onFailure: (message: any) => {
console.error(`Player: seek ${JSON.stringify(message)}`);
},
subscribe: true,
resubscribe: true
});
const setVolumeService = window.webOS.service.request(`luna://${serviceId}/`, {
method:"setvolume",
parameters: {},
onSuccess: (message: any) => {
if (message.value.subscribed === true) {
console.log('Player: Registered setvolume handler with service');
}
else {
onSetVolumeCb(null, message.value);
}
},
onFailure: (message: any) => {
console.error(`Player: setvolume ${JSON.stringify(message)}`);
},
subscribe: true,
resubscribe: true
});
const setSpeedService = window.webOS.service.request(`luna://${serviceId}/`, {
method:"setspeed",
parameters: {},
onSuccess: (message: any) => {
if (message.value.subscribed === true) {
console.log('Player: Registered setspeed handler with service');
}
else {
onSetSpeedCb(null, message.value);
}
},
onFailure: (message: any) => {
console.error(`Player: setspeed ${JSON.stringify(message)}`);
},
subscribe: true,
resubscribe: true
});
preloadData = {
sendPlaybackErrorCb: () => { console.error('Player: Callback "send_playback_error" not set'); },
sendPlaybackUpdateCb: () => { console.error('Player: Callback "send_playback_update" not set'); },
sendVolumeUpdateCb: () => { console.error('Player: Callback "send_volume_update" not set'); },
// onPlayCb: () => { console.error('Player: Callback "play" not set'); },
onPlayCb: undefined,
onPauseCb: () => { console.error('Player: Callback "pause" not set'); },
onResumeCb: () => { console.error('Player: Callback "resume" not set'); },
onSeekCb: () => { console.error('Player: Callback "onseek" not set'); },
onSetVolumeCb: () => { console.error('Player: Callback "setvolume" not set'); },
onSetSpeedCb: () => { console.error('Player: Callback "setspeed" not set'); },
};
window.targetAPI = {
sendPlaybackError: (error: PlaybackErrorMessage) => {
window.webOS.service.request(`luna://${serviceId}/`, {
method: 'send_playback_error',
parameters: { error },
onSuccess: () => {},
onFailure: (message: any) => {
console.error(`Player: send_playback_error ${JSON.stringify(message)}`);
},
});
},
sendPlaybackUpdate: (update: PlaybackUpdateMessage) => {
window.webOS.service.request(`luna://${serviceId}/`, {
method: 'send_playback_update',
parameters: { update },
// onSuccess: (message: any) => {
// console.log(`Player: send_playback_update ${JSON.stringify(message)}`);
// },
onSuccess: () => {},
onFailure: (message: any) => {
console.error(`Player: send_playback_update ${JSON.stringify(message)}`);
},
});
},
sendVolumeUpdate: (update: VolumeUpdateMessage) => {
window.webOS.service.request(`luna://${serviceId}/`, {
method: 'send_volume_update',
parameters: { update },
onSuccess: () => {},
onFailure: (message: any) => {
console.error(`Player: send_volume_update ${JSON.stringify(message)}`);
},
});
},
onPlay: (callback: any) => { onPlayCb = callback; },
onPause: (callback: any) => { onPauseCb = callback; },
onResume: (callback: any) => { onResumeCb = callback; },
onSeek: (callback: any) => { onSeekCb = callback; },
onSetVolume: (callback: any) => { onSetVolumeCb = callback; },
onSetSpeed: (callback: any) => { onSetSpeedCb = callback; }
};
window.webOSAPI = {
pendingPlay: null
};
preloadData = {
playerWindowOpen: playerWindowOpen,
playService: playService,
pauseService: pauseService,
resumeService: resumeService,
stopService: stopService,
seekService: seekService,
setVolumeService: setVolumeService,
setSpeedService: setSpeedService,
sendPlaybackError: (error: PlaybackErrorMessage) => { preloadData.sendPlaybackErrorCb(error); },
sendPlaybackUpdate: (update: PlaybackUpdateMessage) => { preloadData.sendPlaybackUpdateCb(update); },
sendVolumeUpdate: (update: VolumeUpdateMessage) => { preloadData.sendVolumeUpdateCb(update); },
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; }
};
} else {
// @ts-ignore