mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-11 10:09:59 +00:00
Add initial status bridge implementation
This commit is contained in:
@@ -59,9 +59,11 @@ export default class StatusListener extends EventEmitter {
|
||||
}
|
||||
|
||||
case "RECEIVER_STATUS": {
|
||||
// Send update message
|
||||
this.emit("statusUpdate", data.status);
|
||||
|
||||
this.emit("receiverStatus", data.status);
|
||||
break;
|
||||
}
|
||||
case "MEDIA_STATUS": {
|
||||
this.emit("mediaStatus", data.status);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
54
app/src/castTypes.ts
Normal file
54
app/src/castTypes.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
"use strict";
|
||||
|
||||
export interface ReceiverStatus {
|
||||
volume: {
|
||||
muted: boolean;
|
||||
stepInterval: number;
|
||||
controlType: string;
|
||||
level: number;
|
||||
};
|
||||
applications?: {
|
||||
displayName: string;
|
||||
statusText: string;
|
||||
transportId: string;
|
||||
isIdleScreen: boolean;
|
||||
sessionId: string;
|
||||
namespaces: { name: string }[];
|
||||
appId: string;
|
||||
}[];
|
||||
userEq?: {};
|
||||
}
|
||||
|
||||
export interface MediaStatus {
|
||||
mediaSessionId: number;
|
||||
supportedMediaCommands: number;
|
||||
currentTime: number;
|
||||
media: {
|
||||
duration: number;
|
||||
contentId: string;
|
||||
streamType: string;
|
||||
contentType: string;
|
||||
};
|
||||
playbackRate: number;
|
||||
volume: {
|
||||
muted: boolean;
|
||||
level: number;
|
||||
}
|
||||
currentItemId: number;
|
||||
idleReason: string;
|
||||
playerState: string;
|
||||
extendedStatus: {
|
||||
playerState: string;
|
||||
media: {
|
||||
contentId: string;
|
||||
streamType: string;
|
||||
contentType: string;
|
||||
metadata: {
|
||||
images: { url: string }[];
|
||||
metadataType: number;
|
||||
artist: string;
|
||||
title: string;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,8 @@ import Session from "./Session";
|
||||
import StatusListener from "./StatusListener";
|
||||
import * as transforms from "./transforms";
|
||||
|
||||
import { ReceiverStatus, MediaStatus } from "./castTypes";
|
||||
|
||||
import { Message } from "./types";
|
||||
|
||||
import { __applicationName
|
||||
@@ -185,29 +187,48 @@ function initialize (options: InitializeOptions) {
|
||||
const statusListeners = new Map<string, StatusListener>();
|
||||
|
||||
browser.on("serviceUp", (service: dnssd.Service) => {
|
||||
const address = service.addresses[0];
|
||||
const host = service.addresses[0];
|
||||
const port = service.port;
|
||||
const id = service.txt.id;
|
||||
|
||||
if (options.shouldWatchStatus) {
|
||||
const listener = new StatusListener(address, port);
|
||||
const listener = new StatusListener(host, port);
|
||||
|
||||
listener.on("statusUpdate", (status: any) => {
|
||||
sendMessage({
|
||||
subject: "main:/receiverStatusUpdate"
|
||||
, data: { id, status }
|
||||
});
|
||||
listener.on("receiverStatus", (status: ReceiverStatus) => {
|
||||
const receiverStatusMessage: any = {
|
||||
subject: "receiverStatus"
|
||||
, data: {
|
||||
id
|
||||
, status: {
|
||||
volume: {
|
||||
level: status.volume.level
|
||||
, muted: status.volume.muted
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if ("applications" in status) {
|
||||
const application = status.applications[0];
|
||||
|
||||
receiverStatusMessage.data.status.application = {
|
||||
displayName: application.displayName
|
||||
, isIdleScreen: application.isIdleScreen
|
||||
, statusText: application.statusText
|
||||
};
|
||||
}
|
||||
|
||||
sendMessage(receiverStatusMessage);
|
||||
});
|
||||
|
||||
statusListeners.set(id, listener);
|
||||
}
|
||||
|
||||
transforms.encode.write({
|
||||
sendMessage({
|
||||
subject: "shim:/serviceUp"
|
||||
, data: {
|
||||
address, port, id
|
||||
host, port, id
|
||||
, friendlyName: service.txt.fn
|
||||
, currentApp: service.txt.rs
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -215,11 +236,12 @@ function initialize (options: InitializeOptions) {
|
||||
browser.on("serviceDown", (service: dnssd.Service) => {
|
||||
const id = service.txt.id;
|
||||
|
||||
// De-register status listener
|
||||
if (options.shouldWatchStatus && statusListeners.has(id)) {
|
||||
statusListeners.get(id).deregister();
|
||||
}
|
||||
|
||||
transforms.encode.write({
|
||||
sendMessage({
|
||||
subject: "shim:/serviceDown"
|
||||
, data: { id }
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user