Fix extension cast senders

This commit is contained in:
hensm
2021-05-03 16:58:17 +01:00
parent 94423e4eee
commit dbcf3b1459
3 changed files with 56 additions and 49 deletions

View File

@@ -63,16 +63,11 @@ function getSession(opts: InitOptions): Promise<cast.Session> {
*/ */
function receiverListener(availability: string) { function receiverListener(availability: string) {
if (availability === cast.ReceiverAvailability.AVAILABLE) { if (availability === cast.ReceiverAvailability.AVAILABLE) {
if (opts.receiver) { cast.requestSession(
/*cast._requestSession( onRequestSessionSuccess
opts.receiver , onRequestSessionError
, onRequestSessionSuccess , undefined
, onRequestSessionError);*/ , opts.receiver);
} else {
cast.requestSession(
onRequestSessionSuccess
, onRequestSessionError);
}
} }
} }
@@ -340,7 +335,7 @@ async function registerMediaElementListeners() {
interface InitOptions { interface InitOptions {
mediaUrl: string; mediaUrl: string;
receiver: ReceiverDevice; receiver?: ReceiverDevice;
targetElementId?: number; targetElementId?: number;
} }

View File

@@ -162,10 +162,10 @@ function receiverListener(availability: string) {
if (availability === cast.ReceiverAvailability.AVAILABLE) { if (availability === cast.ReceiverAvailability.AVAILABLE) {
wasSessionRequested = true; wasSessionRequested = true;
/*cast._requestSession( cast.requestSession(onRequestSessionSuccess
selectedReceiver , onRequestSessionError
, onRequestSessionSuccess , undefined
, onRequestSessionError);*/ , selectedReceiver);
} }
} }

View File

@@ -3,6 +3,7 @@
import logger from "../../lib/logger"; import logger from "../../lib/logger";
import { ReceiverDevice } from "../../types"; import { ReceiverDevice } from "../../types";
import { ErrorCallback, SuccessCallback } from "../types";
import { onMessage, sendMessageResponse } from "../eventMessageChannel"; import { onMessage, sendMessageResponse } from "../eventMessageChannel";
@@ -23,9 +24,6 @@ type ReceiverActionListener = (
type RequestSessionSuccessCallback = (session: Session) => void; type RequestSessionSuccessCallback = (session: Session) => void;
type SuccessCallback = () => void;
type ErrorCallback = (err: Error_) => void;
let apiConfig: Nullable<ApiConfig>; let apiConfig: Nullable<ApiConfig>;
let sessionRequest: Nullable<SessionRequest>; let sessionRequest: Nullable<SessionRequest>;
@@ -57,6 +55,26 @@ export const timeout = new Timeout();
export * as media from "./media"; export * as media from "./media";
function sendSessionRequest(sessionRequest: SessionRequest
, receiverDevice: ReceiverDevice) {
for (const listener of receiverActionListeners) {
const receiver = new Receiver(
receiverDevice.id
, receiverDevice.friendlyName);
listener(receiver, ReceiverAction.CAST);
}
sendMessageResponse({
subject: "bridge:createCastSession"
, data: {
appId: sessionRequest.appId
, receiverDevice: receiverDevice
}
});
}
export function initialize(newApiConfig: ApiConfig export function initialize(newApiConfig: ApiConfig
, successCallback?: SuccessCallback , successCallback?: SuccessCallback
, errorCallback?: ErrorCallback) { , errorCallback?: ErrorCallback) {
@@ -85,7 +103,8 @@ export function initialize(newApiConfig: ApiConfig
export function requestSession(successCallback: RequestSessionSuccessCallback export function requestSession(successCallback: RequestSessionSuccessCallback
, errorCallback: ErrorCallback , errorCallback: ErrorCallback
, newSessionRequest?: SessionRequest) { , newSessionRequest?: SessionRequest
, receiverDevice?: ReceiverDevice) {
logger.info("cast.requestSession"); logger.info("cast.requestSession");
@@ -118,10 +137,20 @@ export function requestSession(successCallback: RequestSessionSuccessCallback
requestSessionSuccessCallback = successCallback; requestSessionSuccessCallback = successCallback;
requestSessionErrorCallback = errorCallback; requestSessionErrorCallback = errorCallback;
// Open receiver selector UI /**
sendMessageResponse({ * If a receiver was provided, skip the receiver selector
subject: "main:selectReceiver" * process.
}); */
if (receiverDevice) {
if (receiverDevice?.id && receiverDevices.has(receiverDevice.id)) {
sendSessionRequest(sessionRequest, receiverDevice);
}
} else {
// Open receiver selector UI
sendMessageResponse({
subject: "main:selectReceiver"
});
}
} }
export function requestSessionById(_sessionId: string): void { export function requestSessionById(_sessionId: string): void {
@@ -183,18 +212,18 @@ onMessage(message => {
// TODO: Implement persistent per-origin receiver IDs // TODO: Implement persistent per-origin receiver IDs
const receiver = new Receiver( const receiver = new Receiver(
status.receiverFriendlyName // label status.receiverFriendlyName // label
, status.receiverFriendlyName // friendlyName , status.receiverFriendlyName // friendlyName
, [ Capability.VIDEO_OUT , [ Capability.VIDEO_OUT
, Capability.AUDIO_OUT ] // capabilities , Capability.AUDIO_OUT ] // capabilities
, status.volume); // volume , status.volume); // volume
const session = new Session( const session = new Session(
status.sessionId // sessionId status.sessionId // sessionId
, status.appId // appId , status.appId // appId
, status.displayName // displayName , status.displayName // displayName
, status.appImages // appImages , status.appImages // appImages
, receiver); // receiver , receiver); // receiver
session.senderApps = status.senderApps; session.senderApps = status.senderApps;
session.transportId = status.transportId; session.transportId = status.transportId;
@@ -316,24 +345,7 @@ onMessage(message => {
break; break;
} }
const { receiver: receiverDevice } = message.data; sendSessionRequest(sessionRequest, message.data.receiver);
for (const listener of receiverActionListeners) {
const receiver = new Receiver(
receiverDevice.id
, receiverDevice.friendlyName);
listener(receiver, ReceiverAction.CAST);
}
sendMessageResponse({
subject: "bridge:createCastSession"
, data: {
appId: sessionRequest.appId
, receiverDevice: receiverDevice
}
});
break; break;
} }