Remove leading slash from message names

This commit is contained in:
hensm
2021-04-24 04:16:20 +01:00
committed by Matt Hensman
parent e349ce5db7
commit d48efe4840
23 changed files with 207 additions and 192 deletions

View File

@@ -62,14 +62,14 @@ export default class Media {
messageData.mediaSessionId = status.mediaSessionId; messageData.mediaSessionId = status.mediaSessionId;
} }
this.sendMessage("shim:/media/update", messageData); this.sendMessage("shim:media/update", messageData);
} }
}); });
} }
public messageHandler (message: Message) { public messageHandler (message: Message) {
switch (message.subject) { switch (message.subject) {
case "bridge:/media/sendMediaMessage": { case "bridge:media/sendMediaMessage": {
let error = false; let error = false;
try { try {
this.channel.send(message.data.message); this.channel.send(message.data.message);
@@ -77,7 +77,7 @@ export default class Media {
error = true; error = true;
} }
this.sendMessage("shim:/media/sendMediaMessageResponse", { this.sendMessage("shim:media/sendMediaMessageResponse", {
messageId: message.data.messageId messageId: message.data.messageId
, error , error
}); });

View File

@@ -69,7 +69,7 @@ export default class Session {
this.clientReceiver.on("message", (message: any) => { this.clientReceiver.on("message", (message: any) => {
if (message.type === "RECEIVER_STATUS") { if (message.type === "RECEIVER_STATUS") {
this.sendMessage("shim:/session/updateStatus", message.status); this.sendMessage("shim:session/updateStatus", message.status);
if (message.status.applications) { if (message.status.applications) {
const receiverApp = message.status.applications[0]; const receiverApp = message.status.applications[0];
@@ -79,7 +79,7 @@ export default class Session {
if (receiverAppId !== this.appId) { if (receiverAppId !== this.appId) {
// Close session // Close session
this.sendMessage("shim:/session/stopped"); this.sendMessage("shim:session/stopped");
this.client.close(); this.client.close();
clearInterval(this.clientHeartbeatIntervalId!); clearInterval(this.clientHeartbeatIntervalId!);
return; return;
@@ -103,7 +103,7 @@ export default class Session {
this.sessionId = this.app.sessionId; this.sessionId = this.app.sessionId;
this.sendMessage("shim:/session/connected", { this.sendMessage("shim:session/connected", {
sessionId: this.app.sessionId sessionId: this.app.sessionId
, namespaces: this.app.namespaces , namespaces: this.app.namespaces
, displayName: this.app.displayName , displayName: this.app.displayName
@@ -117,34 +117,34 @@ export default class Session {
public messageHandler (message: Message) { public messageHandler (message: Message) {
switch (message.subject) { switch (message.subject) {
case "bridge:/session/close": case "bridge:session/close":
this.close(); this.close();
break; break;
case "bridge:/session/impl_addMessageListener": case "bridge:session/impl_addMessageListener":
this._impl_addMessageListener(message.data.namespace); this._impl_addMessageListener(message.data.namespace);
break; break;
case "bridge:/session/impl_sendMessage": case "bridge:session/impl_sendMessage":
this._impl_sendMessage( this._impl_sendMessage(
message.data.namespace message.data.namespace
, message.data.message , message.data.message
, message.data.messageId); , message.data.messageId);
break; break;
case "bridge:/session/impl_setReceiverMuted": case "bridge:session/impl_setReceiverMuted":
this._impl_setReceiverMuted( this._impl_setReceiverMuted(
message.data.muted message.data.muted
, message.data.volumeId); , message.data.volumeId);
break; break;
case "bridge:/session/impl_setReceiverVolumeLevel": case "bridge:session/impl_setReceiverVolumeLevel":
this._impl_setReceiverVolumeLevel( this._impl_setReceiverVolumeLevel(
message.data.newLevel message.data.newLevel
, message.data.volumeId); , message.data.volumeId);
break; break;
case "bridge:/session/impl_stop": case "bridge:session/impl_stop":
this._impl_stop(message.data.stopId); this._impl_stop(message.data.stopId);
break; break;
} }
@@ -179,7 +179,7 @@ export default class Session {
private _impl_addMessageListener (namespace: string) { private _impl_addMessageListener (namespace: string) {
this.createChannel(namespace); this.createChannel(namespace);
this.channelMap.get(namespace)?.on("message", (data: any) => { this.channelMap.get(namespace)?.on("message", (data: any) => {
this.sendMessage("shim:/session/impl_addMessageListener", { this.sendMessage("shim:session/impl_addMessageListener", {
namespace namespace
, data: JSON.stringify(data) , data: JSON.stringify(data)
}); });
@@ -205,7 +205,7 @@ export default class Session {
error = true; error = true;
} }
this.sendMessage("shim:/session/impl_sendMessage", { this.sendMessage("shim:session/impl_sendMessage", {
messageId messageId
, error , error
}); });
@@ -225,7 +225,7 @@ export default class Session {
error = true; error = true;
} }
this.sendMessage("shim:/session/impl_setReceiverMuted", { this.sendMessage("shim:session/impl_setReceiverMuted", {
volumeId volumeId
, error , error
}); });
@@ -245,7 +245,7 @@ export default class Session {
error = true; error = true;
} }
this.sendMessage("shim:/session/impl_setReceiverVolumeLevel", { this.sendMessage("shim:session/impl_setReceiverVolumeLevel", {
volumeId volumeId
, error , error
}); });
@@ -268,7 +268,7 @@ export default class Session {
clearInterval(this.clientHeartbeatIntervalId!); clearInterval(this.clientHeartbeatIntervalId!);
this.sendMessage("shim:/session/impl_stop", { this.sendMessage("shim:session/impl_stop", {
stopId stopId
, error , error
}); });

View File

@@ -23,7 +23,7 @@ export function handleSessionMessage (message: any) {
// Forward message to instance message handler // Forward message to instance message handler
existingSessions.get(sessionId)?.messageHandler(message); existingSessions.get(sessionId)?.messageHandler(message);
} else { } else {
if (message.subject === "bridge:/session/initialize") { if (message.subject === "bridge:session/initialize") {
existingSessions.set(sessionId, new Session( existingSessions.set(sessionId, new Session(
message.data.address message.data.address
, message.data.port , message.data.port
@@ -46,7 +46,7 @@ export function handleMediaMessage (message: any) {
// Forward message to instance message handler // Forward message to instance message handler
existingMedia.get(mediaId)!.messageHandler(message); existingMedia.get(mediaId)!.messageHandler(message);
} else { } else {
if (message.subject === "bridge:/media/initialize") { if (message.subject === "bridge:media/initialize") {
// Get Session object media belongs to // Get Session object media belongs to
const parentSession = existingSessions.get( const parentSession = existingSessions.get(
message.data._internalSessionId); message.data._internalSessionId);

View File

@@ -20,7 +20,7 @@ const browser = mdns.createBrowser(mdns.tcp("googlecast"), {
function onBrowserServiceUp (service: mdns.Service) { function onBrowserServiceUp (service: mdns.Service) {
sendMessage({ sendMessage({
subject: "main:/serviceUp" subject: "main:serviceUp"
, data: { , data: {
host: service.addresses[0] host: service.addresses[0]
, port: service.port , port: service.port
@@ -32,7 +32,7 @@ function onBrowserServiceUp (service: mdns.Service) {
function onBrowserServiceDown (service: mdns.Service) { function onBrowserServiceDown (service: mdns.Service) {
sendMessage({ sendMessage({
subject: "main:/serviceDown" subject: "main:serviceDown"
, data: { , data: {
id: service.txtRecord.id id: service.txtRecord.id
} }
@@ -67,7 +67,7 @@ export function startDiscovery (options: InitializeOptions) {
listener.on("receiverStatus", (status: ReceiverStatus) => { listener.on("receiverStatus", (status: ReceiverStatus) => {
const receiverStatusMessage: any = { const receiverStatusMessage: any = {
subject: "main:/receiverStatus" subject: "main:receiverStatus"
, data: { , data: {
id id
, status: { , status: {

View File

@@ -33,7 +33,7 @@ export async function startMediaServer (filePath: string, port: number) {
} else { } else {
console.error("Error: Media path is not a file."); console.error("Error: Media path is not a file.");
sendMessage({ sendMessage({
subject: "mediaCast:/mediaServer/error" subject: "mediaCast:mediaServer/error"
}); });
return; return;
@@ -41,7 +41,7 @@ export async function startMediaServer (filePath: string, port: number) {
} catch (err) { } catch (err) {
console.error("Error: Failed to find media path."); console.error("Error: Failed to find media path.");
sendMessage({ sendMessage({
subject: "mediaCast:/mediaServer/error" subject: "mediaCast:mediaServer/error"
}); });
return; return;
@@ -51,7 +51,7 @@ export async function startMediaServer (filePath: string, port: number) {
if (!contentType) { if (!contentType) {
console.error("Error: Failed to find media type."); console.error("Error: Failed to find media type.");
sendMessage({ sendMessage({
subject: "mediaCast:/mediaServer/error" subject: "mediaCast:mediaServer/error"
}); });
return; return;
@@ -146,14 +146,14 @@ export async function startMediaServer (filePath: string, port: number) {
if (!localAddress) { if (!localAddress) {
console.error("Failed to get local address."); console.error("Failed to get local address.");
sendMessage({ sendMessage({
subject: "mediaCast:/mediaServer/error" subject: "mediaCast:mediaServer/error"
}); });
stopMediaServer(); stopMediaServer();
return; return;
} }
sendMessage({ sendMessage({
subject: "mediaCast:/mediaServer/started" subject: "mediaCast:mediaServer/started"
, data: { , data: {
mediaPath: fileName mediaPath: fileName
, subtitlePaths: Array.from(subtitles.keys()) , subtitlePaths: Array.from(subtitles.keys())
@@ -163,10 +163,10 @@ export async function startMediaServer (filePath: string, port: number) {
}); });
mediaServer.on("close", () => sendMessage({ mediaServer.on("close", () => sendMessage({
subject: "mediaCast:/mediaServer/stopped" subject: "mediaCast:mediaServer/stopped"
})); }));
mediaServer.on("error", () => sendMessage({ mediaServer.on("error", () => sendMessage({
subject: "mediaCast:/mediaServer/error" subject: "mediaCast:mediaServer/error"
})); }));
mediaServer.listen(port); mediaServer.listen(port);

View File

@@ -48,7 +48,7 @@ export function startReceiverSelector (data: string) {
if (!jsonData.mediaType) { if (!jsonData.mediaType) {
sendMessage({ sendMessage({
subject: "main:/receiverSelector/stop" subject: "main:receiverSelector/stop"
, data: jsonData , data: jsonData
}); });
@@ -56,7 +56,7 @@ export function startReceiverSelector (data: string) {
} }
sendMessage({ sendMessage({
subject: "main:/receiverSelector/selected" subject: "main:receiverSelector/selected"
, data: jsonData , data: jsonData
}); });
}); });
@@ -64,7 +64,7 @@ export function startReceiverSelector (data: string) {
selectorApp.on("error", err => { selectorApp.on("error", err => {
sendMessage({ sendMessage({
subject: "main:/receiverSelector/error" subject: "main:receiverSelector/error"
, data: err.message , data: err.message
}); });
}); });
@@ -74,7 +74,7 @@ export function startReceiverSelector (data: string) {
selectorAppOpen = false; selectorAppOpen = false;
sendMessage({ sendMessage({
subject: "main:/receiverSelector/close" subject: "main:receiverSelector/close"
}); });
} }
}); });

View File

@@ -28,47 +28,47 @@ process.on("SIGTERM", () => {
* for managing existing ones. * for managing existing ones.
*/ */
decodeTransform.on("data", (message: Message) => { decodeTransform.on("data", (message: Message) => {
if (message.subject.startsWith("bridge:/session/")) { if (message.subject.startsWith("bridge:session/")) {
handleSessionMessage(message); handleSessionMessage(message);
return; return;
} }
if (message.subject.startsWith("bridge:/media/")) { if (message.subject.startsWith("bridge:media/")) {
handleMediaMessage(message); handleMediaMessage(message);
return; return;
} }
switch (message.subject) { switch (message.subject) {
case "bridge:/getInfo": { case "bridge:getInfo": {
encodeTransform.write(__applicationVersion); encodeTransform.write(__applicationVersion);
break; break;
} }
case "bridge:/initialize": { case "bridge:initialize": {
startDiscovery(message.data); startDiscovery(message.data);
break; break;
} }
case "bridge:/stopReceiverApp": { case "bridge:stopReceiverApp": {
stopReceiverApp(message.data.receiver.host stopReceiverApp(message.data.receiver.host
, message.data.receiver.port); , message.data.receiver.port);
break; break;
} }
// Receiver selector // Receiver selector
case "bridge:/receiverSelector/open": { case "bridge:receiverSelector/open": {
startReceiverSelector(message.data); break; startReceiverSelector(message.data); break;
} }
case "bridge:/receiverSelector/close": { case "bridge:receiverSelector/close": {
stopReceiverSelector(); break; stopReceiverSelector(); break;
} }
// Media server // Media server
case "bridge:/mediaServer/start": { case "bridge:mediaServer/start": {
startMediaServer(message.data.filePath, message.data.port); startMediaServer(message.data.filePath, message.data.port);
break; break;
} }
case "bridge:/mediaServer/stop": { case "bridge:mediaServer/stop": {
stopMediaServer(); stopMediaServer();
break; break;
} }

View File

@@ -88,24 +88,24 @@ export interface Receiver {
export type Messages = [ export type Messages = [
{ {
subject: "shim:/serviceUp" subject: "shim:serviceUp"
, data: { id: Receiver["id"] } , data: { id: Receiver["id"] }
} }
, { , {
subject: "shim:/serviceDown" subject: "shim:serviceDown"
, data: { id: Receiver["id"] } , data: { id: Receiver["id"] }
} }
, { , {
subject: "shim:/launchApp" subject: "shim:launchApp"
, data: { receiver: Receiver } , data: { receiver: Receiver }
} }
// Session messages // Session messages
, { , {
subject: "shim:/session/stopped" subject: "shim:session/stopped"
} }
, { , {
subject: "shim:/session/connected" subject: "shim:session/connected"
, data: { , data: {
sessionId: string; sessionId: string;
namespaces: Array<{ name: string }>; namespaces: Array<{ name: string }>;
@@ -114,33 +114,33 @@ export type Messages = [
} }
} }
, { , {
subject: "shim:/session/updateStatus" subject: "shim:session/updateStatus"
, data: any , data: any
} }
, { , {
subject: "shim:/session/impl_addMessageListener" subject: "shim:session/impl_addMessageListener"
, data: { namespace: string, data: string } , data: { namespace: string, data: string }
} }
, { , {
subject: "shim:/session/impl_sendMessage" subject: "shim:session/impl_sendMessage"
, data: { messageId: string, error: boolean } , data: { messageId: string, error: boolean }
} }
, { , {
subject: "shim:/session/impl_setReceiverMuted" subject: "shim:session/impl_setReceiverMuted"
, data: { volumeId: string, error: boolean } , data: { volumeId: string, error: boolean }
} }
, { , {
subject: "shim:/session/impl_setReceiverVolumeLevel" subject: "shim:session/impl_setReceiverVolumeLevel"
, data: { volumeId: string, error: boolean } , data: { volumeId: string, error: boolean }
} }
, { , {
subject: "shim:/session/impl_stop" subject: "shim:session/impl_stop"
, data: { stopId: string, error: boolean } , data: { stopId: string, error: boolean }
} }
// Bridge session messages // Bridge session messages
, { , {
subject: "bridge:/session/initialize" subject: "bridge:session/initialize"
, data: { , data: {
address: string address: string
, port: number , port: number
@@ -150,43 +150,43 @@ export type Messages = [
, _id: string; , _id: string;
} }
, { , {
subject: "bridge:/session/close" subject: "bridge:session/close"
, _id: string; , _id: string;
} }
, { , {
subject: "bridge:/session/impl_leave" subject: "bridge:session/impl_leave"
, data: { id: string } , data: { id: string }
, _id: string , _id: string
} }
, { , {
subject: "bridge:/session/impl_sendMessage" subject: "bridge:session/impl_sendMessage"
, data: { namespace: string, message: any, messageId: string } , data: { namespace: string, message: any, messageId: string }
, _id: string , _id: string
} }
, { , {
subject: "bridge:/session/impl_setReceiverMuted" subject: "bridge:session/impl_setReceiverMuted"
, data: { muted: boolean, volumeId: string } , data: { muted: boolean, volumeId: string }
, _id: string , _id: string
} }
, { , {
subject: "bridge:/session/impl_setReceiverVolumeLevel" subject: "bridge:session/impl_setReceiverVolumeLevel"
, data: { newLevel: number, volumeId: string } , data: { newLevel: number, volumeId: string }
, _id: string , _id: string
} }
, { , {
subject: "bridge:/session/impl_stop" subject: "bridge:session/impl_stop"
, data: { stopId: string } , data: { stopId: string }
, _id: string , _id: string
} }
, { , {
subject: "bridge:/session/impl_addMessageListener" subject: "bridge:session/impl_addMessageListener"
, data: { namespace: string } , data: { namespace: string }
, _id: string , _id: string
} }
// Media messages // Media messages
, { , {
subject: "shim:/media/update" subject: "shim:media/update"
, data: { , data: {
currentTime: number currentTime: number
, _lastCurrentTime: number , _lastCurrentTime: number
@@ -201,13 +201,13 @@ export type Messages = [
} }
} }
, { , {
subject: "shim:/media/sendMediaMessageResponse" subject: "shim:media/sendMediaMessageResponse"
, data: { messageId: string, error: boolean } , data: { messageId: string, error: boolean }
} }
// Bridge media messages // Bridge media messages
, { , {
subject: "bridge:/media/initialize" subject: "bridge:media/initialize"
, data: { , data: {
sessionId: string sessionId: string
, mediaSessionId: number , mediaSessionId: number
@@ -216,54 +216,54 @@ export type Messages = [
, _id: string; , _id: string;
} }
, { , {
subject: "bridge:/media/sendMediaMessage" subject: "bridge:media/sendMediaMessage"
, data: { message: any, messageId: string } , data: { message: any, messageId: string }
, _id: string; , _id: string;
} }
// Bridge messages // Bridge messages
, { , {
subject: "main:/receiverSelector/selected" subject: "main:receiverSelector/selected"
, data: ReceiverSelectionCast , data: ReceiverSelectionCast
} }
, { , {
subject: "main:/receiverSelector/error" subject: "main:receiverSelector/error"
, data: string , data: string
} }
, { , {
subject: "main:/receiverSelector/close" subject: "main:receiverSelector/close"
} }
, { , {
subject: "main:/receiverSelector/stop" subject: "main:receiverSelector/stop"
, data: ReceiverSelectionStop , data: ReceiverSelectionStop
} }
, { , {
subject: "bridge:/getInfo" subject: "bridge:getInfo"
} }
, { , {
subject: "bridge:/initialize" subject: "bridge:initialize"
, data: { shouldWatchStatus: boolean } , data: { shouldWatchStatus: boolean }
} }
, { , {
subject: "bridge:/receiverSelector/open" subject: "bridge:receiverSelector/open"
, data: any } , data: any }
, { , {
subject: "bridge:/receiverSelector/close" subject: "bridge:receiverSelector/close"
} }
, { , {
subject: "bridge:/stopReceiverApp" subject: "bridge:stopReceiverApp"
, data: { receiver: Receiver } , data: { receiver: Receiver }
} }
, { , {
subject: "bridge:/mediaServer/start" subject: "bridge:mediaServer/start"
, data: { filePath: string, port: number } , data: { filePath: string, port: number }
} }
, { , {
subject: "bridge:/mediaServer/stop" subject: "bridge:mediaServer/stop"
} }
, { , {
subject: "mediaCast:/mediaServer/started" subject: "mediaCast:mediaServer/started"
, data: { , data: {
mediaPath: string mediaPath: string
, subtitlePaths: string[] , subtitlePaths: string[]
@@ -271,22 +271,22 @@ export type Messages = [
} }
} }
, { , {
subject: "mediaCast:/mediaServer/stopped" subject: "mediaCast:mediaServer/stopped"
} }
, { , {
subject: "mediaCast:/mediaServer/error" subject: "mediaCast:mediaServer/error"
} }
, { , {
subject: "main:/serviceUp" subject: "main:serviceUp"
, data: Receiver , data: Receiver
} }
, { , {
subject: "main:/serviceDown" subject: "main:serviceDown"
, data: { id: string } , data: { id: string }
} }
, { , {
subject: "main:/receiverStatus" subject: "main:receiverStatus"
, data: { id: string, status: ReceiverStatus } , data: { id: string, status: ReceiverStatus }
} }
]; ];

View File

@@ -52,7 +52,7 @@ export default new class ShimManager {
: this.createShimFromContent(port)); : this.createShimFromContent(port));
shim.contentPort.postMessage({ shim.contentPort.postMessage({
subject: "shim:/initialized" subject: "shim:initialized"
, data: await bridge.getInfo() , data: await bridge.getInfo()
}); });
@@ -139,18 +139,18 @@ export default new class ShimManager {
} }
private async handleContentMessage (shim: Shim, message: Message) { private async handleContentMessage (shim: Shim, message: Message) {
const [ destination ] = message.subject.split(":/"); const [ destination ] = message.subject.split(":");
if (destination === "bridge") { if (destination === "bridge") {
shim.bridgePort.postMessage(message); shim.bridgePort.postMessage(message);
} }
switch (message.subject) { switch (message.subject) {
case "main:/shimReady": { case "main:shimReady": {
shim.requestedAppId = message.data.appId; shim.requestedAppId = message.data.appId;
for (const receiver of StatusManager.getReceivers()) { for (const receiver of StatusManager.getReceivers()) {
shim.contentPort.postMessage({ shim.contentPort.postMessage({
subject: "shim:/serviceUp" subject: "shim:serviceUp"
, data: { id: receiver.id } , data: { id: receiver.id }
}); });
} }
@@ -234,7 +234,7 @@ export default new class ShimManager {
* TODO: If we're closing a selector, make sure it's the * TODO: If we're closing a selector, make sure it's the
* same one that caused the session creation. * same one that caused the session creation.
*/ */
case "main:/sessionCreated": { case "main:sessionCreated": {
const selector = await ReceiverSelectorManager.getSelector(); const selector = await ReceiverSelectorManager.getSelector();
const shouldClose = await options.get( const shouldClose = await options.get(
"receiverSelectorWaitForConnection"); "receiverSelectorWaitForConnection");
@@ -252,7 +252,7 @@ export default new class ShimManager {
StatusManager.addEventListener("serviceUp", ev => { StatusManager.addEventListener("serviceUp", ev => {
for (const shim of this.activeShims) { for (const shim of this.activeShims) {
shim.contentPort.postMessage({ shim.contentPort.postMessage({
subject: "shim:/serviceUp" subject: "shim:serviceUp"
, data: { id: ev.detail.id } , data: { id: ev.detail.id }
}); });
} }
@@ -261,7 +261,7 @@ export default new class ShimManager {
StatusManager.addEventListener("serviceDown", ev => { StatusManager.addEventListener("serviceDown", ev => {
for (const shim of this.activeShims) { for (const shim of this.activeShims) {
shim.contentPort.postMessage({ shim.contentPort.postMessage({
subject: "shim:/serviceDown" subject: "shim:serviceDown"
, data: { id: ev.detail.id } , data: { id: ev.detail.id }
}); });
} }

View File

@@ -50,7 +50,7 @@ export default new class StatusManager
} }
this.bridgePort.postMessage({ this.bridgePort.postMessage({
subject: "bridge:/stopReceiverApp" subject: "bridge:stopReceiverApp"
, data: { receiver } , data: { receiver }
}); });
} }
@@ -61,7 +61,7 @@ export default new class StatusManager
bridgePort.onDisconnect.addListener(this.onBridgePortDisconnect); bridgePort.onDisconnect.addListener(this.onBridgePortDisconnect);
bridgePort.postMessage({ bridgePort.postMessage({
subject: "bridge:/initialize" subject: "bridge:initialize"
, data: { , data: {
shouldWatchStatus: true shouldWatchStatus: true
} }
@@ -76,7 +76,7 @@ export default new class StatusManager
*/ */
private onBridgePortMessage (message: Message) { private onBridgePortMessage (message: Message) {
switch (message.subject) { switch (message.subject) {
case "main:/serviceUp": { case "main:serviceUp": {
const { data: receiver } = message; const { data: receiver } = message;
this.receivers.set(receiver.id, receiver); this.receivers.set(receiver.id, receiver);
@@ -87,7 +87,7 @@ export default new class StatusManager
break; break;
} }
case "main:/serviceDown": { case "main:serviceDown": {
const { data: { id }} = message; const { data: { id }} = message;
if (this.receivers.has(id)) { if (this.receivers.has(id)) {
@@ -101,7 +101,7 @@ export default new class StatusManager
break; break;
} }
case "main:/receiverStatus": { case "main:receiverStatus": {
const { data: { id, status }} = message; const { data: { id, status }} = message;
const receiver = this.receivers.get(id); const receiver = this.receivers.get(id);

View File

@@ -57,7 +57,7 @@ export default class NativeReceiverSelector extends ReceiverSelector {
"receiverSelectorCloseIfFocusLost"); "receiverSelectorCloseIfFocusLost");
this.bridgePort.postMessage({ this.bridgePort.postMessage({
subject: "bridge:/receiverSelector/open" subject: "bridge:receiverSelector/open"
, data: JSON.stringify({ , data: JSON.stringify({
receivers receivers
, defaultMediaType , defaultMediaType
@@ -93,7 +93,7 @@ export default class NativeReceiverSelector extends ReceiverSelector {
public close (): void { public close (): void {
if (this.bridgePort) { if (this.bridgePort) {
this.bridgePort.postMessage({ this.bridgePort.postMessage({
subject: "bridge:/receiverSelector/close" subject: "bridge:receiverSelector/close"
}); });
} }
@@ -102,7 +102,7 @@ export default class NativeReceiverSelector extends ReceiverSelector {
private async onBridgePortMessage (message: Message) { private async onBridgePortMessage (message: Message) {
switch (message.subject) { switch (message.subject) {
case "main:/receiverSelector/selected": { case "main:receiverSelector/selected": {
this.wasReceiverSelected = true; this.wasReceiverSelected = true;
this.dispatchEvent(new CustomEvent("selected", { this.dispatchEvent(new CustomEvent("selected", {
detail: message.data detail: message.data
@@ -114,12 +114,12 @@ export default class NativeReceiverSelector extends ReceiverSelector {
break; break;
} }
case "main:/receiverSelector/error": { case "main:receiverSelector/error": {
logger.error("Native receiver selector error", message.data); logger.error("Native receiver selector error", message.data);
this.dispatchEvent(new CustomEvent("error")); this.dispatchEvent(new CustomEvent("error"));
break; break;
} }
case "main:/receiverSelector/close": { case "main:receiverSelector/close": {
if (!this.wasReceiverSelected) { if (!this.wasReceiverSelected) {
this.dispatchEvent(new CustomEvent("cancelled")); this.dispatchEvent(new CustomEvent("cancelled"));
} }
@@ -134,7 +134,7 @@ export default class NativeReceiverSelector extends ReceiverSelector {
break; break;
} }
case "main:/receiverSelector/stop": { case "main:receiverSelector/stop": {
this.dispatchEvent(new CustomEvent("stop", { this.dispatchEvent(new CustomEvent("stop", {
detail: message.data detail: message.data
})); }));

View File

@@ -118,7 +118,7 @@ export default class PopupReceiverSelector extends ReceiverSelector {
public update (receivers: Receiver[]) { public update (receivers: Receiver[]) {
this.receivers = receivers; this.receivers = receivers;
this.messagePort?.postMessage({ this.messagePort?.postMessage({
subject: "popup:/update" subject: "popup:update"
, data: { , data: {
receivers: this.receivers receivers: this.receivers
} }
@@ -162,12 +162,12 @@ export default class PopupReceiverSelector extends ReceiverSelector {
} }
this.messagePort.postMessage({ this.messagePort.postMessage({
subject: "popup:/init" subject: "popup:init"
, data: { appId: this.appId } , data: { appId: this.appId }
}); });
this.messagePort.postMessage({ this.messagePort.postMessage({
subject: "popup:/update" subject: "popup:update"
, data: { , data: {
receivers: this.receivers receivers: this.receivers
, defaultMediaType: this.defaultMediaType , defaultMediaType: this.defaultMediaType
@@ -183,7 +183,7 @@ export default class PopupReceiverSelector extends ReceiverSelector {
*/ */
private onPopupMessage (message: Message) { private onPopupMessage (message: Message) {
switch (message.subject) { switch (message.subject) {
case "receiverSelector:/selected": { case "receiverSelector:selected": {
this.wasReceiverSelected = true; this.wasReceiverSelected = true;
this.dispatchEvent(new CustomEvent("selected", { this.dispatchEvent(new CustomEvent("selected", {
detail: message.data detail: message.data
@@ -192,7 +192,7 @@ export default class PopupReceiverSelector extends ReceiverSelector {
break; break;
} }
case "receiverSelector:/stop": { case "receiverSelector:stop": {
this.dispatchEvent(new CustomEvent("stop", { this.dispatchEvent(new CustomEvent("stop", {
detail: message.data detail: message.data
})); }));

View File

@@ -65,7 +65,7 @@ const getInfo = () => new Promise<BridgeInfo>(async (resolve, reject) => {
applicationVersion = await nativeMessaging.sendNativeMessage( applicationVersion = await nativeMessaging.sendNativeMessage(
applicationName applicationName
, { subject: "bridge:/getInfo" , { subject: "bridge:getInfo"
, data: version }); , data: version });
} catch (err) { } catch (err) {
logger.error("Bridge connection failed."); logger.error("Bridge connection failed.");

View File

@@ -39,7 +39,7 @@ export default async function loadSender (opts: LoadSenderOptions) {
} }
shim.contentPort.postMessage({ shim.contentPort.postMessage({
subject: "shim:/launchApp" subject: "shim:launchApp"
, data: { receiver: opts.selection.receiver } , data: { receiver: opts.selection.receiver }
}); });

View File

@@ -3,10 +3,12 @@
import logger from "./logger"; import logger from "./logger";
import options from "./options"; import options from "./options";
import { Message } from "../messaging";
type DisconnectListener = (port: browser.runtime.Port) => void; type DisconnectListener = (port: browser.runtime.Port) => void;
type MessageListener = (message: any) => void; type MessageListener = (message: Message) => void;
function connectNative (application: string) { function connectNative (application: string) {
/** /**
@@ -165,7 +167,7 @@ function connectNative (application: string) {
async function sendNativeMessage ( async function sendNativeMessage (
application: string application: string
, message: any) { , message: Message) {
try { try {
return await browser.runtime.sendNativeMessage(application, message); return await browser.runtime.sendNativeMessage(application, message);

View File

@@ -13,102 +13,114 @@ import Volume from "./shim/cast/classes/Volume";
import { MediaInfo } from "./shim/cast/media"; import { MediaInfo } from "./shim/cast/media";
/**
* Messages are JSON objects with a `subject` string key and a
* generic `data` key.
*
* Message subjects may include an optional destination and response
* name formatted like this:
* ^(destination:)?messageName(\/responseName)?$
*
* Message formats are specified with subject as a key and data as the
* value in the message table.
*/
type MessagesBase = { type MessagesBase = {
"popup:/init": { appId?: string } "popup:init": { appId?: string }
, "popup:/update": { , "popup:update": {
receivers: Receiver[] receivers: Receiver[]
, defaultMediaType?: ReceiverSelectorMediaType , defaultMediaType?: ReceiverSelectorMediaType
, availableMediaTypes?: ReceiverSelectorMediaType , availableMediaTypes?: ReceiverSelectorMediaType
} }
, "popup:/close": {} , "popup:close": {}
, "receiverSelector:/selected": ReceiverSelection , "receiverSelector:selected": ReceiverSelection
, "receiverSelector:/stop": ReceiverSelection , "receiverSelector:stop": ReceiverSelection
, "main:/shimReady": { appId: string } , "main:shimReady": { appId: string }
, "main:selectReceiver": {} , "main:selectReceiver": {}
, "shim:selectReceiver/selected": ReceiverSelectionCast , "shim:selectReceiver/selected": ReceiverSelectionCast
, "shim:selectReceiver/stopped": ReceiverSelectionStop , "shim:selectReceiver/stopped": ReceiverSelectionStop
, "shim:selectReceiver/cancelled": {} , "shim:selectReceiver/cancelled": {}
, "main:/sessionCreated": {} , "main:sessionCreated": {}
, "shim:/serviceUp": { id: Receiver["id"] } , "shim:serviceUp": { id: Receiver["id"] }
, "shim:/serviceDown": { id: Receiver["id"] } , "shim:serviceDown": { id: Receiver["id"] }
, "shim:/initialized": BridgeInfo , "shim:initialized": BridgeInfo
, "shim:/launchApp": { receiver: Receiver } , "shim:launchApp": { receiver: Receiver }
// Session messages // Session messages
, "shim:/session/stopped": {} , "shim:session/stopped": {}
, "shim:/session/connected": { , "shim:session/connected": {
sessionId: string sessionId: string
, namespaces: Array<{ name: string }> , namespaces: Array<{ name: string }>
, displayName: string , displayName: string
, statusText: string , statusText: string
} }
, "shim:/session/updateStatus": { volume: Volume } , "shim:session/updateStatus": { volume: Volume }
, "shim:/session/impl_addMessageListener": { , "shim:session/impl_addMessageListener": {
namespace: string namespace: string
, data: string , data: string
} }
, "shim:/session/impl_sendMessage": { , "shim:session/impl_sendMessage": {
messageId: string messageId: string
, error: boolean , error: boolean
} }
, "shim:/session/impl_setReceiverMuted": { , "shim:session/impl_setReceiverMuted": {
volumeId: string volumeId: string
, error: boolean , error: boolean
} }
, "shim:/session/impl_setReceiverVolumeLevel": { , "shim:session/impl_setReceiverVolumeLevel": {
volumeId: string volumeId: string
, error: boolean , error: boolean
} }
, "shim:/session/impl_stop": { , "shim:session/impl_stop": {
stopId: string stopId: string
, error: boolean , error: boolean
} }
// Bridge session messages // Bridge session messages
, "bridge:/session/initialize": { , "bridge:session/initialize": {
address: string address: string
, port: number , port: number
, appId: string , appId: string
, sessionId: string , sessionId: string
, _id: string , _id: string
} }
, "bridge:/session/impl_leave": { , "bridge:session/impl_leave": {
id: string id: string
, _id: string , _id: string
} }
, "bridge:/session/impl_sendMessage": { , "bridge:session/impl_sendMessage": {
namespace: string namespace: string
, message: any , message: any
, messageId: string , messageId: string
, _id: string , _id: string
} }
, "bridge:/session/impl_setReceiverMuted": { , "bridge:session/impl_setReceiverMuted": {
muted: boolean muted: boolean
, volumeId: string , volumeId: string
, _id: string , _id: string
} }
, "bridge:/session/impl_setReceiverVolumeLevel": { , "bridge:session/impl_setReceiverVolumeLevel": {
newLevel: number newLevel: number
, volumeId: string , volumeId: string
, _id: string , _id: string
} }
, "bridge:/session/impl_stop": { , "bridge:session/impl_stop": {
stopId: string; stopId: string;
_id: string; _id: string;
} }
, "bridge:/session/impl_addMessageListener": { , "bridge:session/impl_addMessageListener": {
namespace: string; namespace: string;
_id: string; _id: string;
} }
// Media messages // Media messages
, "shim:/media/update": { , "shim:media/update": {
currentTime: number currentTime: number
, _lastCurrentTime: number , _lastCurrentTime: number
, customData: any , customData: any
@@ -120,53 +132,54 @@ type MessagesBase = {
, media: MediaInfo , media: MediaInfo
, mediaSessionId: number , mediaSessionId: number
} }
, "shim:/media/sendMediaMessageResponse": { , "shim:media/sendMediaMessageResponse": {
messageId: string messageId: string
, error: boolean , error: boolean
} }
// Bridge media messages // Bridge media messages
, "bridge:/media/initialize": { , "bridge:media/initialize": {
sessionId: string sessionId: string
, mediaSessionId: number , mediaSessionId: number
, _internalSessionId: string , _internalSessionId: string
, _id: string , _id: string
} }
, "bridge:/media/sendMediaMessage": { , "bridge:media/sendMediaMessage": {
message: any message: any
, messageId: string , messageId: string
, _id: string , _id: string
} }
// Bridge messages // Bridge messages
, "main:/receiverSelector/selected": ReceiverSelectionCast , "main:receiverSelector/selected": ReceiverSelectionCast
, "main:/receiverSelector/error": string , "main:receiverSelector/error": string
, "main:/receiverSelector/close": {} , "main:receiverSelector/close": {}
, "main:/receiverSelector/stop": ReceiverSelectionStop , "main:receiverSelector/stop": ReceiverSelectionStop
, "bridge:/initialize": { shouldWatchStatus: boolean } , "bridge:getInfo": string
, "bridge:initialize": { shouldWatchStatus: boolean }
, "bridge:/receiverSelector/open": any , "bridge:receiverSelector/open": any
, "bridge:/receiverSelector/close": {} , "bridge:receiverSelector/close": {}
, "bridge:/stopReceiverApp": { receiver: Receiver } , "bridge:stopReceiverApp": { receiver: Receiver }
, "bridge:/mediaServer/start": { , "bridge:mediaServer/start": {
filePath: string filePath: string
, port: number , port: number
} }
, "mediaCast:/mediaServer/started": { , "mediaCast:mediaServer/started": {
mediaPath: string mediaPath: string
, subtitlePaths: string[] , subtitlePaths: string[]
, localAddress: string , localAddress: string
} }
, "mediaCast:/mediaServer/stopped": {} , "mediaCast:mediaServer/stopped": {}
, "mediaCast:/mediaServer/error": {} , "mediaCast:mediaServer/error": {}
, "main:/serviceUp": Receiver , "main:serviceUp": Receiver
, "main:/serviceDown": { id: string } , "main:serviceDown": { id: string }
, "main:/receiverStatus": { , "main:receiverStatus": {
id: string id: string
, status: ReceiverStatus , status: ReceiverStatus
} }

View File

@@ -15,7 +15,7 @@ function startMediaServer (filePath: string, port: number)
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
backgroundPort.postMessage({ backgroundPort.postMessage({
subject: "bridge:/mediaServer/start" subject: "bridge:mediaServer/start"
, data: { , data: {
filePath: decodeURI(filePath) filePath: decodeURI(filePath)
, port , port
@@ -25,16 +25,16 @@ function startMediaServer (filePath: string, port: number)
backgroundPort.addEventListener("message", function onMessage (ev) { backgroundPort.addEventListener("message", function onMessage (ev) {
const message = ev.data as Message; const message = ev.data as Message;
if (message.subject.startsWith("mediaCast:/mediaServer/")) { if (message.subject.startsWith("mediaCast:mediaServer/")) {
backgroundPort.removeEventListener("message", onMessage); backgroundPort.removeEventListener("message", onMessage);
} }
switch (message.subject) { switch (message.subject) {
case "mediaCast:/mediaServer/started": { case "mediaCast:mediaServer/started": {
resolve(message.data); resolve(message.data);
break; break;
} }
case "mediaCast:/mediaServer/error": { case "mediaCast:mediaServer/error": {
reject(); reject();
break; break;
} }
@@ -376,7 +376,7 @@ export async function init (opts: InitOptions) {
window.addEventListener("beforeunload", async () => { window.addEventListener("beforeunload", async () => {
backgroundPort.postMessage({ backgroundPort.postMessage({
subject: "bridge:/mediaServer/stop" subject: "bridge:mediaServer/stop"
}); });
if (await options.get("mediaStopOnUnload")) { if (await options.get("mediaStopOnUnload")) {

View File

@@ -55,7 +55,7 @@ export default class Session {
} }
switch (message.subject) { switch (message.subject) {
case "shim:/session/stopped": { case "shim:session/stopped": {
// Disconnect from extension messages // Disconnect from extension messages
this.#listener.disconnect(); this.#listener.disconnect();
@@ -68,7 +68,7 @@ export default class Session {
break; break;
} }
case "shim:/session/connected": { case "shim:session/connected": {
this.status = SessionStatus.CONNECTED; this.status = SessionStatus.CONNECTED;
this.sessionId = message.data.sessionId; this.sessionId = message.data.sessionId;
this.transportId = message.data.sessionId; this.transportId = message.data.sessionId;
@@ -83,7 +83,7 @@ export default class Session {
break; break;
} }
case "shim:/session/updateStatus": { case "shim:session/updateStatus": {
const volume: Volume = message.data.volume; const volume: Volume = message.data.volume;
if (volume) { if (volume) {
@@ -110,7 +110,7 @@ export default class Session {
} }
case "shim:/session/impl_addMessageListener": { case "shim:session/impl_addMessageListener": {
const { namespace, data } = message.data; const { namespace, data } = message.data;
const messageListeners = this.#messageListeners.get(namespace); const messageListeners = this.#messageListeners.get(namespace);
@@ -123,7 +123,7 @@ export default class Session {
break; break;
} }
case "shim:/session/impl_sendMessage": { case "shim:session/impl_sendMessage": {
const { messageId, error } = message.data; const { messageId, error } = message.data;
const [ successCallback, errorCallback ] = const [ successCallback, errorCallback ] =
this.#sendMessageCallbacks.get(messageId) ?? []; this.#sendMessageCallbacks.get(messageId) ?? [];
@@ -139,7 +139,7 @@ export default class Session {
break; break;
} }
case "shim:/session/impl_setReceiverMuted": { case "shim:session/impl_setReceiverMuted": {
const { volumeId, error } = message.data; const { volumeId, error } = message.data;
const [ successCallback, errorCallback ] = const [ successCallback, errorCallback ] =
this.#setReceiverMutedCallbacks.get(volumeId) ?? []; this.#setReceiverMutedCallbacks.get(volumeId) ?? [];
@@ -155,7 +155,7 @@ export default class Session {
break; break;
} }
case "shim:/session/impl_setReceiverVolumeLevel": { case "shim:session/impl_setReceiverVolumeLevel": {
const { volumeId, error } = message.data; const { volumeId, error } = message.data;
const [ successCallback, errorCallback ] = const [ successCallback, errorCallback ] =
this.#setReceiverVolumeLevelCallbacks this.#setReceiverVolumeLevelCallbacks
@@ -172,7 +172,7 @@ export default class Session {
break; break;
} }
case "shim:/session/impl_stop": { case "shim:session/impl_stop": {
const { stopId, error } = message.data; const { stopId, error } = message.data;
const [ successCallback, errorCallback ] const [ successCallback, errorCallback ]
= this.#stopCallbacks.get(stopId) ?? []; = this.#stopCallbacks.get(stopId) ?? [];
@@ -227,7 +227,7 @@ export default class Session {
if (receiver) { if (receiver) {
sendMessageResponse({ sendMessageResponse({
subject: "bridge:/session/initialize" subject: "bridge:session/initialize"
, data: { , data: {
address: (receiver as any)._address address: (receiver as any)._address
, port: (receiver as any)._port , port: (receiver as any)._port
@@ -255,7 +255,7 @@ export default class Session {
this.#messageListeners.get(namespace)?.add(listener); this.#messageListeners.get(namespace)?.add(listener);
sendMessageResponse({ sendMessageResponse({
subject: "bridge:/session/impl_addMessageListener" subject: "bridge:session/impl_addMessageListener"
, data: { , data: {
namespace namespace
, _id: this.#id , _id: this.#id
@@ -274,7 +274,7 @@ export default class Session {
const id = uuid(); const id = uuid();
sendMessageResponse({ sendMessageResponse({
subject: "bridge:/session/impl_leave" subject: "bridge:session/impl_leave"
, data: { , data: {
id id
, _id: this.#id , _id: this.#id
@@ -380,7 +380,7 @@ export default class Session {
const messageId = uuid(); const messageId = uuid();
sendMessageResponse({ sendMessageResponse({
subject: "bridge:/session/impl_sendMessage" subject: "bridge:session/impl_sendMessage"
, data: { , data: {
namespace namespace
, message , message
@@ -403,7 +403,7 @@ export default class Session {
const volumeId = uuid(); const volumeId = uuid();
sendMessageResponse({ sendMessageResponse({
subject: "bridge:/session/impl_setReceiverMuted" subject: "bridge:session/impl_setReceiverMuted"
, data: { , data: {
muted muted
, volumeId , volumeId
@@ -425,7 +425,7 @@ export default class Session {
const volumeId = uuid(); const volumeId = uuid();
sendMessageResponse({ sendMessageResponse({
subject: "bridge:/session/impl_setReceiverVolumeLevel" subject: "bridge:session/impl_setReceiverVolumeLevel"
, data: { , data: {
newLevel newLevel
, volumeId , volumeId
@@ -446,7 +446,7 @@ export default class Session {
const stopId = uuid(); const stopId = uuid();
sendMessageResponse({ sendMessageResponse({
subject: "bridge:/session/impl_stop" subject: "bridge:session/impl_stop"
, data: { , data: {
stopId stopId
, _id: this.#id , _id: this.#id

View File

@@ -102,7 +102,7 @@ export function initialize (
apiConfig = newApiConfig; apiConfig = newApiConfig;
sendMessageResponse({ sendMessageResponse({
subject: "main:/shimReady" subject: "main:shimReady"
, data: { appId: apiConfig.sessionRequest.appId } , data: { appId: apiConfig.sessionRequest.appId }
}); });
@@ -227,7 +227,7 @@ export function _requestSession (
, selectedReceiver // receiver , selectedReceiver // receiver
, (session: Session) => { , (session: Session) => {
sendMessageResponse({ sendMessageResponse({
subject: "main:/sessionCreated" subject: "main:sessionCreated"
}); });
sessionRequestInProgress = false; sessionRequestInProgress = false;
@@ -277,7 +277,7 @@ export function unescape (escaped: string): string {
onMessage(async message => { onMessage(async message => {
switch (message.subject) { switch (message.subject) {
case "shim:/initialized": { case "shim:initialized": {
isAvailable = true; isAvailable = true;
break; break;
} }
@@ -286,7 +286,7 @@ onMessage(async message => {
* Cast destination found (serviceUp). Set the API availability * Cast destination found (serviceUp). Set the API availability
* property and call the page event function (__onGCastApiAvailable). * property and call the page event function (__onGCastApiAvailable).
*/ */
case "shim:/serviceUp": { case "shim:serviceUp": {
const receiver = message.data; const receiver = message.data;
if (receiverList.find(r => r.id === receiver.id)) { if (receiverList.find(r => r.id === receiver.id)) {
@@ -307,7 +307,7 @@ onMessage(async message => {
* Cast destination lost (serviceDown). Remove from the receiver list * Cast destination lost (serviceDown). Remove from the receiver list
* and update availability state. * and update availability state.
*/ */
case "shim:/serviceDown": { case "shim:serviceDown": {
const receiverIndex = receiverList.findIndex( const receiverIndex = receiverList.findIndex(
receiver => receiver.id === message.data.id); receiver => receiver.id === message.data.id);
@@ -352,7 +352,7 @@ onMessage(async message => {
, selectedReceiver // receiver , selectedReceiver // receiver
, (session: Session) => { , (session: Session) => {
sendMessageResponse({ sendMessageResponse({
subject: "main:/sessionCreated" subject: "main:sessionCreated"
}); });
sessionRequestInProgress = false; sessionRequestInProgress = false;
@@ -412,7 +412,7 @@ onMessage(async message => {
break; break;
} }
case "shim:/launchApp": { case "shim:launchApp": {
const receiver: Receiver = message.data.receiver; const receiver: Receiver = message.data.receiver;
_requestSession(receiver _requestSession(receiver
, session => { , session => {

View File

@@ -50,7 +50,7 @@ export default class Media {
} }
switch (message.subject) { switch (message.subject) {
case "shim:/media/update": { case "shim:media/update": {
const status = message.data; const status = message.data;
this.currentTime = status.currentTime; this.currentTime = status.currentTime;
@@ -81,7 +81,7 @@ export default class Media {
break; break;
} }
case "shim:/media/sendMediaMessageResponse": { case "shim:media/sendMediaMessageResponse": {
const { messageId, error } = message.data; const { messageId, error } = message.data;
const [ successCallback, errorCallback ] const [ successCallback, errorCallback ]
= this.#sendMediaMessageCallbacks = this.#sendMediaMessageCallbacks
@@ -125,7 +125,7 @@ export default class Media {
, _internalSessionId: string) { , _internalSessionId: string) {
sendMessageResponse({ sendMessageResponse({
subject: "bridge:/media/initialize" subject: "bridge:media/initialize"
, data: { , data: {
sessionId sessionId
, mediaSessionId , mediaSessionId
@@ -344,7 +344,7 @@ export default class Media {
]); ]);
sendMessageResponse({ sendMessageResponse({
subject: "bridge:/media/sendMediaMessage" subject: "bridge:media/sendMediaMessage"
, data: { , data: {
message message
, messageId , messageId

View File

@@ -89,7 +89,7 @@ export function ensureInit (): Promise<MessagePort> {
function handleIncomingMessageToShim (message: Message) { function handleIncomingMessageToShim (message: Message) {
switch (message.subject) { switch (message.subject) {
case "shim:/initialized": { case "shim:initialized": {
initializedBridgeInfo = message.data; initializedBridgeInfo = message.data;
if (initializedBridgeInfo.isVersionCompatible) { if (initializedBridgeInfo.isVersionCompatible) {

View File

@@ -67,7 +67,7 @@ if (document.currentScript) {
onMessage(message => { onMessage(message => {
switch (message.subject) { switch (message.subject) {
case "shim:/initialized": { case "shim:initialized": {
bridgeInfo = message.data; bridgeInfo = message.data;
if (!isFramework) { if (!isFramework) {

View File

@@ -73,7 +73,7 @@ class PopupApp extends Component<{}, PopupAppState> {
this.port.onMessage.addListener((message: Message) => { this.port.onMessage.addListener((message: Message) => {
switch (message.subject) { switch (message.subject) {
case "popup:/init": { case "popup:init": {
this.setState({ this.setState({
requestedAppId: message.data?.appId requestedAppId: message.data?.appId
}); });
@@ -81,7 +81,7 @@ class PopupApp extends Component<{}, PopupAppState> {
break; break;
} }
case "popup:/update": { case "popup:update": {
const { receivers const { receivers
, availableMediaTypes , availableMediaTypes
, defaultMediaType } = message.data; , defaultMediaType } = message.data;
@@ -100,7 +100,7 @@ class PopupApp extends Component<{}, PopupAppState> {
break; break;
} }
case "popup:/close": { case "popup:close": {
window.close(); window.close();
break; break;
} }
@@ -217,7 +217,7 @@ class PopupApp extends Component<{}, PopupAppState> {
}); });
this.port?.postMessage({ this.port?.postMessage({
subject: "receiverSelector:/selected" subject: "receiverSelector:selected"
, data: { , data: {
receiver receiver
, mediaType: this.state.mediaType , mediaType: this.state.mediaType
@@ -228,7 +228,7 @@ class PopupApp extends Component<{}, PopupAppState> {
private onStop (receiver: Receiver) { private onStop (receiver: Receiver) {
this.port?.postMessage({ this.port?.postMessage({
subject: "receiverSelector:/stop" subject: "receiverSelector:stop"
, data: { receiver } , data: { receiver }
}); });
} }