diff --git a/cast/src/media/entrypoint.ts b/cast/src/media/entrypoint.ts index ac8e150382..49babb9171 100644 --- a/cast/src/media/entrypoint.ts +++ b/cast/src/media/entrypoint.ts @@ -5,17 +5,19 @@ const castContext = framework.CastReceiverContext.getInstance(); const playerManager = castContext.getPlayerManager(); playerManager.setMessageInterceptor( - framework.messages.MessageType.LOAD, + "LOAD" as framework.messages.MessageType.LOAD, (loadRequestData) => { const media = loadRequestData.media; // Special handling if it came from Google Assistant if (media.entity) { media.contentId = media.entity; - media.streamType = framework.messages.StreamType.LIVE; + media.streamType = "LIVE" as framework.messages.StreamType.LIVE; media.contentType = "application/vnd.apple.mpegurl"; // @ts-ignore + // type definition is wrong, should be "FMP4" instead of "fmp4" + // https://developers.google.com/cast/docs/reference/web_receiver/cast.framework.messages#.HlsVideoSegmentFormat media.hlsVideoSegmentFormat = - framework.messages.HlsVideoSegmentFormat.FMP4; + "FMP4" as framework.messages.HlsVideoSegmentFormat.FMP4; } return loadRequestData; } diff --git a/cast/src/receiver/entrypoint.ts b/cast/src/receiver/entrypoint.ts index afdb19a36a..2dddc51216 100644 --- a/cast/src/receiver/entrypoint.ts +++ b/cast/src/receiver/entrypoint.ts @@ -1,10 +1,9 @@ -import { framework } from "./cast_framework"; import { CAST_NS } from "../../../src/cast/const"; import type { HassMessage } from "../../../src/cast/receiver_messages"; import "../../../src/resources/custom-card-support"; import { castContext } from "./cast_context"; +import { framework } from "./cast_framework"; import { HcMain } from "./layout/hc-main"; -import type { ReceivedMessage } from "./types"; const lovelaceController = new HcMain(); document.body.append(lovelaceController); @@ -40,7 +39,8 @@ const playDummyMedia = (viewTitle?: string) => { loadRequestData.media.contentId = "https://cast.home-assistant.io/images/google-nest-hub.png"; loadRequestData.media.contentType = "image/jpeg"; - loadRequestData.media.streamType = framework.messages.StreamType.NONE; + loadRequestData.media.streamType = + "NONE" as framework.messages.StreamType.NONE; const metadata = new framework.messages.GenericMediaMetadata(); metadata.title = viewTitle; loadRequestData.media.metadata = metadata; @@ -89,31 +89,30 @@ const showMediaPlayer = () => { const options = new framework.CastReceiverOptions(); options.disableIdleTimeout = true; options.customNamespaces = { - [CAST_NS]: framework.system.MessageType.JSON, + // type definition is wrong, should be "JSON" instead of "json" + // https://developers.google.com/cast/docs/reference/web_receiver/cast.framework.system#.MessageType + [CAST_NS]: "JSON" as framework.system.MessageType.JSON, }; -castContext.addCustomMessageListener( - CAST_NS, - // @ts-ignore - (ev: ReceivedMessage) => { - // We received a show Lovelace command, stop media from playing, hide media player and show Lovelace controller - if ( - playerManager.getPlayerState() !== framework.messages.PlayerState.IDLE - ) { - playerManager.stop(); - } else { - showLovelaceController(); - } - const msg = ev.data; - msg.senderId = ev.senderId; - lovelaceController.processIncomingMessage(msg); +castContext.addCustomMessageListener(CAST_NS, (ev) => { + // We received a show Lovelace command, stop media from playing, hide media player and show Lovelace controller + if ( + playerManager.getPlayerState() !== + ("IDLE" as framework.messages.PlayerState.IDLE) + ) { + playerManager.stop(); + } else { + showLovelaceController(); } -); + const msg = ev.data as HassMessage; + msg.senderId = ev.senderId; + lovelaceController.processIncomingMessage(msg); +}); const playerManager = castContext.getPlayerManager(); playerManager.setMessageInterceptor( - framework.messages.MessageType.LOAD, + "LOAD" as framework.messages.MessageType.LOAD, (loadRequestData) => { if ( loadRequestData.media.contentId === @@ -127,24 +126,26 @@ playerManager.setMessageInterceptor( // Special handling if it came from Google Assistant if (media.entity) { media.contentId = media.entity; - media.streamType = framework.messages.StreamType.LIVE; + media.streamType = "LIVE" as framework.messages.StreamType.LIVE; media.contentType = "application/vnd.apple.mpegurl"; - // @ts-ignore + // type definition is wrong, should be "FMP4" instead of "fmp4" + // https://developers.google.com/cast/docs/reference/web_receiver/cast.framework.messages#.HlsVideoSegmentFormat media.hlsVideoSegmentFormat = - framework.messages.HlsVideoSegmentFormat.FMP4; + "FMP4" as framework.messages.HlsVideoSegmentFormat.FMP4; } return loadRequestData; } ); playerManager.addEventListener( - framework.events.EventType.MEDIA_STATUS, + "MEDIA_STATUS" as framework.events.EventType.MEDIA_STATUS, (event) => { if ( - event.mediaStatus?.playerState === framework.messages.PlayerState.IDLE && + event.mediaStatus?.playerState === + ("IDLE" as framework.messages.PlayerState.IDLE) && event.mediaStatus?.idleReason && event.mediaStatus?.idleReason !== - framework.messages.IdleReason.INTERRUPTED + ("INTERRUPTED" as framework.messages.IdleReason.INTERRUPTED) ) { // media finished or stopped, return to default Lovelace showLovelaceController(); diff --git a/cast/src/receiver/types.ts b/cast/src/receiver/types.ts deleted file mode 100644 index ef785a2e51..0000000000 --- a/cast/src/receiver/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface ReceivedMessage { - gj: boolean; - data: T; - senderId: string; - type: "message"; -} diff --git a/package.json b/package.json index 1b170798a9..10f0d8d8c8 100644 --- a/package.json +++ b/package.json @@ -161,7 +161,7 @@ "@rspack/core": "1.6.7", "@rspack/dev-server": "1.1.4", "@types/babel__plugin-transform-runtime": "7.9.5", - "@types/chromecast-caf-receiver": "6.0.22", + "@types/chromecast-caf-receiver": "6.0.25", "@types/chromecast-caf-sender": "1.0.11", "@types/color-name": "2.0.0", "@types/culori": "4.0.1", diff --git a/yarn.lock b/yarn.lock index e9aa9f9f74..5727bece8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4455,10 +4455,10 @@ __metadata: languageName: node linkType: hard -"@types/chromecast-caf-receiver@npm:6.0.22": - version: 6.0.22 - resolution: "@types/chromecast-caf-receiver@npm:6.0.22" - checksum: 10/6c51cb52527776ddfa187a261b88184c98bdd61c129dd8719cba213894d565cf69073734d6473696ffd60a768f6fb5a3fe9932693f43174fbc5e7af201db8a90 +"@types/chromecast-caf-receiver@npm:6.0.25": + version: 6.0.25 + resolution: "@types/chromecast-caf-receiver@npm:6.0.25" + checksum: 10/b3460609b6a0357949a078de59b89030181eed59b567cdc2935d99627707bfc922429fddfbe3a4deb62359018f14f163e7c81211125d303c3943203ed3d45785 languageName: node linkType: hard @@ -9250,7 +9250,7 @@ __metadata: "@tsparticles/engine": "npm:3.9.1" "@tsparticles/preset-links": "npm:3.2.0" "@types/babel__plugin-transform-runtime": "npm:7.9.5" - "@types/chromecast-caf-receiver": "npm:6.0.22" + "@types/chromecast-caf-receiver": "npm:6.0.25" "@types/chromecast-caf-sender": "npm:1.0.11" "@types/color-name": "npm:2.0.0" "@types/culori": "npm:4.0.1"