// 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();