mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-08 16:49:58 +00:00
80 lines
2.1 KiB
TypeScript
80 lines
2.1 KiB
TypeScript
"use strict";
|
|
|
|
import logger from "./logger";
|
|
import { stringify } from "./utils";
|
|
|
|
import { ReceiverSelection
|
|
, ReceiverSelectionActionType
|
|
, ReceiverSelectorMediaType } from "../background/receiverSelector";
|
|
|
|
import ShimManager from "../background/ShimManager";
|
|
|
|
|
|
interface LoadSenderOptions {
|
|
tabId: number;
|
|
frameId?: number;
|
|
selection: ReceiverSelection;
|
|
}
|
|
|
|
/**
|
|
* Loads the appropriate sender for a given receiver
|
|
* selector response.
|
|
*/
|
|
export default async function loadSender (opts: LoadSenderOptions) {
|
|
// Cancelled
|
|
if (!opts.selection) {
|
|
return;
|
|
}
|
|
|
|
if (opts.selection.actionType !== ReceiverSelectionActionType.Cast) {
|
|
return;
|
|
}
|
|
|
|
switch (opts.selection.mediaType) {
|
|
case ReceiverSelectorMediaType.App: {
|
|
const shim = ShimManager.getShim(opts.tabId, opts.frameId);
|
|
if (!shim) {
|
|
throw logger.error(`Shim not found at tabId ${
|
|
opts.tabId} / frameId ${opts.frameId}`);
|
|
}
|
|
|
|
shim.contentPort.postMessage({
|
|
subject: "shim:launchApp"
|
|
, data: { receiver: opts.selection.receiver }
|
|
});
|
|
|
|
break;
|
|
}
|
|
|
|
case ReceiverSelectorMediaType.Tab:
|
|
case ReceiverSelectorMediaType.Screen: {
|
|
await browser.tabs.executeScript(opts.tabId, {
|
|
code: stringify`
|
|
window.selectedMedia = ${opts.selection.mediaType};
|
|
window.selectedReceiver = ${opts.selection.receiver};
|
|
`
|
|
, frameId: opts.frameId
|
|
});
|
|
|
|
await browser.tabs.executeScript(opts.tabId, {
|
|
file: "senders/mirroring.js"
|
|
, frameId: opts.frameId
|
|
});
|
|
|
|
break;
|
|
}
|
|
|
|
case ReceiverSelectorMediaType.File: {
|
|
const fileUrl = new URL(`file://${opts.selection.filePath}`);
|
|
const { init } = await import("../senders/media");
|
|
|
|
init({
|
|
mediaUrl: fileUrl.href
|
|
, receiver: opts.selection.receiver
|
|
});
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|