51 lines
1.8 KiB
JavaScript
51 lines
1.8 KiB
JavaScript
// Minimal CAF receiver that applies customData theming and shows media metadata.
|
|
const context = cast.framework.CastReceiverContext.getInstance();
|
|
const playerManager = context.getPlayerManager();
|
|
|
|
function applyBranding(customData, metadata) {
|
|
try {
|
|
const bgEl = document.getElementById('bg');
|
|
const art = document.getElementById('art');
|
|
const title = document.getElementById('title');
|
|
const subtitle = document.getElementById('subtitle');
|
|
const appName = document.getElementById('appName');
|
|
|
|
if (customData) {
|
|
if (customData.backgroundImage) {
|
|
bgEl.style.backgroundImage = `url(${customData.backgroundImage})`;
|
|
bgEl.style.backgroundSize = 'cover';
|
|
bgEl.style.backgroundPosition = 'center';
|
|
} else if (customData.backgroundGradient) {
|
|
bgEl.style.background = customData.backgroundGradient;
|
|
}
|
|
if (customData.appName) appName.textContent = customData.appName;
|
|
}
|
|
|
|
if (metadata) {
|
|
if (metadata.title) title.textContent = metadata.title;
|
|
const sub = metadata.subtitle || metadata.artist || '';
|
|
subtitle.textContent = sub;
|
|
if (metadata.images && metadata.images.length) {
|
|
art.src = metadata.images[0].url || '';
|
|
}
|
|
}
|
|
} catch (e) {
|
|
// swallow UI errors
|
|
console.warn('Branding apply failed', e);
|
|
}
|
|
}
|
|
|
|
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.LOAD, (request) => {
|
|
const media = request.media || {};
|
|
const customData = media.customData || {};
|
|
applyBranding(customData, media.metadata || {});
|
|
return request;
|
|
});
|
|
|
|
playerManager.addEventListener(cast.framework.events.EventType.MEDIA_STATUS, () => {
|
|
const media = playerManager.getMediaInformation();
|
|
if (media) applyBranding(media.customData || {}, media.metadata || {});
|
|
});
|
|
|
|
context.start();
|