mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-11 10:09:59 +00:00
Remove leading slash from message names
This commit is contained in:
@@ -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
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 }
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -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 }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -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
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -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.");
|
||||||
|
|||||||
@@ -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 }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 => {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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 }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user