2025-06-03 14:29:25 -05:00
|
|
|
import { EventMessage, EventType, KeyEvent, MediaItem, MediaItemEvent, PlayMessage, SeekMessage, SetSpeedMessage, SetVolumeMessage } from 'common/Packets';
|
2025-05-12 23:49:10 -05:00
|
|
|
import { supportedImageTypes } from 'common/MimeTypes';
|
|
|
|
import * as connectionMonitor from '../ConnectionMonitor';
|
|
|
|
import { toast, ToastIcon } from '../components/Toast';
|
|
|
|
const logger = window.targetAPI.logger;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const imageViewer = document.getElementById('viewer-image') as HTMLImageElement;
|
|
|
|
const genericViewer = document.getElementById('viewer-generic') as HTMLIFrameElement;
|
|
|
|
|
|
|
|
function onPlay(_event, value: PlayMessage) {
|
|
|
|
logger.info("Handle play message renderer", JSON.stringify(value));
|
2025-06-03 14:29:25 -05:00
|
|
|
const playMediaItem = new MediaItem(
|
|
|
|
value.container, value.url, value.content,
|
|
|
|
value.time, value.volume, value.speed,
|
|
|
|
null, null, value.headers, value.metadata
|
|
|
|
);
|
|
|
|
window.targetAPI.emitEvent(new EventMessage(Date.now(), new MediaItemEvent(EventType.MediaItemChange, playMediaItem)));
|
2025-05-12 23:49:10 -05:00
|
|
|
const src = value.url ? value.url : value.content;
|
|
|
|
|
|
|
|
if (src && value.container && supportedImageTypes.find(v => v === value.container.toLocaleLowerCase()) && imageViewer) {
|
|
|
|
logger.info("Loading image viewer");
|
|
|
|
|
|
|
|
genericViewer.style.display = "none";
|
|
|
|
genericViewer.src = "";
|
|
|
|
|
|
|
|
imageViewer.src = src;
|
|
|
|
imageViewer.style.display = "block";
|
|
|
|
}
|
|
|
|
else if (src && genericViewer) {
|
|
|
|
logger.info("Loading generic viewer");
|
|
|
|
|
|
|
|
imageViewer.style.display = "none";
|
|
|
|
imageViewer.src = "";
|
|
|
|
|
|
|
|
genericViewer.src = src;
|
|
|
|
genericViewer.style.display = "block";
|
|
|
|
} else {
|
|
|
|
logger.error("Error loading content");
|
|
|
|
|
|
|
|
imageViewer.style.display = "none";
|
|
|
|
imageViewer.src = "";
|
|
|
|
|
|
|
|
genericViewer.style.display = "none";
|
|
|
|
genericViewer.src = "";
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
window.targetAPI.onPause(() => { logger.warn('onPause handler invoked for generic content viewer'); });
|
|
|
|
window.targetAPI.onResume(() => { logger.warn('onResume handler invoked for generic content viewer'); });
|
|
|
|
window.targetAPI.onSeek((_event, value: SeekMessage) => { logger.warn('onSeek handler invoked for generic content viewer'); });
|
|
|
|
window.targetAPI.onSetVolume((_event, value: SetVolumeMessage) => { logger.warn('onSetVolume handler invoked for generic content viewer'); });
|
|
|
|
window.targetAPI.onSetSpeed((_event, value: SetSpeedMessage) => { logger.warn('onSetSpeed handler invoked for generic content viewer'); });
|
|
|
|
|
|
|
|
connectionMonitor.setUiUpdateCallbacks({
|
|
|
|
onConnect: (connections: string[], initialUpdate: boolean = false) => {
|
|
|
|
if (!initialUpdate) {
|
|
|
|
toast('Device connected', ToastIcon.INFO);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
onDisconnect: (connections: string[]) => {
|
|
|
|
toast('Device disconnected. If you experience playback issues, please reconnect.', ToastIcon.INFO);
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
window.targetAPI.onPlay(onPlay);
|
2025-06-03 14:29:25 -05:00
|
|
|
|
|
|
|
document.addEventListener('keydown', (event: KeyboardEvent) => {
|
|
|
|
if (window.targetAPI.getSubscribedKeys().keyDown.has(event.key)) {
|
|
|
|
window.targetAPI.emitEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyDown, event.key, event.repeat, false)));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
document.addEventListener('keyup', (event: KeyboardEvent) => {
|
|
|
|
if (window.targetAPI.getSubscribedKeys().keyUp.has(event.key)) {
|
|
|
|
window.targetAPI.emitEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyUp, event.key, event.repeat, false)));
|
|
|
|
}
|
|
|
|
});
|