mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-11 18:19:58 +00:00
Partial selector media type handling
This commit is contained in:
@@ -417,6 +417,28 @@ let mirrorCastTabId: number;
|
|||||||
let mirrorCastFrameId: number;
|
let mirrorCastFrameId: number;
|
||||||
|
|
||||||
|
|
||||||
|
async function loadMirrorCastSender (
|
||||||
|
tabId: number
|
||||||
|
, frameId: number
|
||||||
|
, selectedMedia: ReceiverSelectorMediaType) {
|
||||||
|
|
||||||
|
mirrorCastTabId = tabId;
|
||||||
|
mirrorCastFrameId = frameId;
|
||||||
|
|
||||||
|
await browser.tabs.executeScript(tabId, {
|
||||||
|
code: `
|
||||||
|
window.selectedMedia = ${selectedMedia};
|
||||||
|
`
|
||||||
|
, frameId
|
||||||
|
});
|
||||||
|
|
||||||
|
await browser.tabs.executeScript(tabId, {
|
||||||
|
file: "senders/mirroringCast.js"
|
||||||
|
, frameId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
browser.menus.onClicked.addListener(async (info, tab) => {
|
browser.menus.onClicked.addListener(async (info, tab) => {
|
||||||
if (info.menuItemId === mirrorCastMenuId
|
if (info.menuItemId === mirrorCastMenuId
|
||||||
|| info.menuItemId === mediaCastMenuId) {
|
|| info.menuItemId === mediaCastMenuId) {
|
||||||
@@ -425,25 +447,9 @@ browser.menus.onClicked.addListener(async (info, tab) => {
|
|||||||
|
|
||||||
switch (info.menuItemId) {
|
switch (info.menuItemId) {
|
||||||
case mirrorCastMenuId: {
|
case mirrorCastMenuId: {
|
||||||
mirrorCastTabId = tab.id;
|
await loadMirrorCastSender(tab.id, frameId, info.pageUrl
|
||||||
mirrorCastFrameId = frameId;
|
? ReceiverSelectorMediaType.Tab
|
||||||
|
: ReceiverSelectorMediaType.Screen);
|
||||||
await browser.tabs.executeScript(tab.id, {
|
|
||||||
code: `
|
|
||||||
window.selectedMedia = ${info.pageUrl
|
|
||||||
? ReceiverSelectorMediaType.Tab
|
|
||||||
: ReceiverSelectorMediaType.Screen};
|
|
||||||
`
|
|
||||||
, frameId
|
|
||||||
});
|
|
||||||
|
|
||||||
// Load mirroring sender app
|
|
||||||
await browser.tabs.executeScript(tab.id, {
|
|
||||||
file: "senders/mirroringCast.js"
|
|
||||||
, frameId
|
|
||||||
});
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case mediaCastMenuId: {
|
case mediaCastMenuId: {
|
||||||
@@ -621,6 +627,16 @@ async function onConnectShim (port: browser.runtime.Port) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const tabId = port.sender.tab.id;
|
||||||
|
const frameId = port.sender.frameId;
|
||||||
|
const shimId = `${tabId}:${frameId}`;
|
||||||
|
|
||||||
|
// Disconnect existing shim
|
||||||
|
if (shimMap.has(shimId)) {
|
||||||
|
shimMap.get(shimId).port.disconnect();
|
||||||
|
shimMap.delete(shimId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const { os } = await browser.runtime.getPlatformInfo();
|
const { os } = await browser.runtime.getPlatformInfo();
|
||||||
|
|
||||||
@@ -628,9 +644,38 @@ async function onConnectShim (port: browser.runtime.Port) {
|
|||||||
? ReceiverSelectorType.NativeMac
|
? ReceiverSelectorType.NativeMac
|
||||||
: ReceiverSelectorType.Popup);
|
: ReceiverSelectorType.Popup);
|
||||||
|
|
||||||
|
|
||||||
|
// Media type for initial opener sender
|
||||||
|
let openerMediaType: ReceiverSelectorMediaType;
|
||||||
|
|
||||||
function onReceiverSelectorSelected (
|
function onReceiverSelectorSelected (
|
||||||
ev: ReceiverSelectorSelectedEvent) {
|
ev: ReceiverSelectorSelectedEvent) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the media type returned from the selector has been
|
||||||
|
* changed, we need to cancel the current sender and switch
|
||||||
|
* it out for the right one.
|
||||||
|
*
|
||||||
|
* TODO: Seamlessly connect selector to the new sender
|
||||||
|
*/
|
||||||
|
if (ev.detail.mediaType !== openerMediaType) {
|
||||||
|
onReceiverSelectorCancelled();
|
||||||
|
|
||||||
|
switch (ev.detail.mediaType) {
|
||||||
|
case ReceiverSelectorMediaType.App: {
|
||||||
|
// TODO: Keep track of page apps
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case ReceiverSelectorMediaType.Screen:
|
||||||
|
case ReceiverSelectorMediaType.Tab: {
|
||||||
|
loadMirrorCastSender(tabId, frameId, ev.detail.mediaType);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
port.postMessage({
|
port.postMessage({
|
||||||
subject: "shim:/selectReceiverEnd"
|
subject: "shim:/selectReceiverEnd"
|
||||||
, data: ev.detail
|
, data: ev.detail
|
||||||
@@ -667,17 +712,6 @@ async function onConnectShim (port: browser.runtime.Port) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
const tabId = port.sender.tab.id;
|
|
||||||
const frameId = port.sender.frameId;
|
|
||||||
const shimId = `${tabId}:${frameId}`;
|
|
||||||
|
|
||||||
// Disconnect existing shim
|
|
||||||
if (shimMap.has(shimId)) {
|
|
||||||
shimMap.get(shimId).port.disconnect();
|
|
||||||
shimMap.delete(shimId);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const applicationName = await options.get("bridgeApplicationName");
|
const applicationName = await options.get("bridgeApplicationName");
|
||||||
|
|
||||||
// Spawn bridge app instance
|
// Spawn bridge app instance
|
||||||
@@ -744,9 +778,10 @@ async function onConnectShim (port: browser.runtime.Port) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case "main:/selectReceiverBegin": {
|
case "main:/selectReceiverBegin": {
|
||||||
|
openerMediaType = message.data.defaultMediaType;
|
||||||
receiverSelector.open(
|
receiverSelector.open(
|
||||||
Array.from(statusBridgeReceivers.values())
|
Array.from(statusBridgeReceivers.values())
|
||||||
, message.data.defaultMediaType);
|
, openerMediaType);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user