mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-11 01:59:58 +00:00
Add stop action to receiver selectors
This commit is contained in:
@@ -65,6 +65,12 @@ export default class NativeReceiverSelector
|
||||
this.onBridgePortMessageClose();
|
||||
break;
|
||||
}
|
||||
case "main:/receiverSelector/stop": {
|
||||
this.dispatchEvent(new CustomEvent("stop", {
|
||||
detail: message.data
|
||||
}));
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -96,6 +102,7 @@ export default class NativeReceiverSelector
|
||||
|
||||
, i18n_extensionName: _("extensionName")
|
||||
, i18n_castButtonTitle: _("popupCastButtonTitle")
|
||||
, i18n_stopButtonTitle: _("popupStopButtonTitle")
|
||||
, i18n_mediaTypeApp:
|
||||
knownApps[requestedAppId] ?? _("popupMediaTypeApp")
|
||||
, i18n_mediaTypeTab: _("popupMediaTypeTab")
|
||||
|
||||
@@ -154,6 +154,14 @@ export default class PopupReceiverSelector
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "receiverSelector:/stop": {
|
||||
this.dispatchEvent(new CustomEvent("stop", {
|
||||
detail: message.data
|
||||
}));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ export interface ReceiverSelectorEvents {
|
||||
"selected": ReceiverSelection;
|
||||
"error": string;
|
||||
"cancelled": void;
|
||||
"stop": { receiver: Receiver };
|
||||
}
|
||||
|
||||
export default interface ReceiverSelector
|
||||
|
||||
@@ -17,6 +17,8 @@ import { ReceiverSelection
|
||||
import NativeReceiverSelector from "./NativeReceiverSelector";
|
||||
import PopupReceiverSelector from "./PopupReceiverSelector";
|
||||
|
||||
import { Receiver } from "../../types";
|
||||
|
||||
|
||||
async function createSelector () {
|
||||
const type = await options.get("receiverSelectorType");
|
||||
@@ -60,9 +62,18 @@ async function getSelection (
|
||||
: Promise<ReceiverSelection> {
|
||||
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const currentShim = ShimManager.getShim(
|
||||
let currentShim = ShimManager.getShim(
|
||||
contextTabId, contextFrameId);
|
||||
|
||||
/**
|
||||
* If the current context is running the mirroring app, pretend
|
||||
* it doesn't exist because it shouldn't be launched like this.
|
||||
*/
|
||||
if (currentShim?.requestedAppId ===
|
||||
await options.get("mirroringAppId")) {
|
||||
currentShim = null;
|
||||
}
|
||||
|
||||
let defaultMediaType = ReceiverSelectorMediaType.Tab;
|
||||
let availableMediaTypes;
|
||||
|
||||
@@ -107,20 +118,43 @@ async function getSelection (
|
||||
// Get a new selector for each selection
|
||||
sharedSelector = await createSelector();
|
||||
|
||||
sharedSelector.addEventListener("selected", ev => {
|
||||
sharedSelector.addEventListener("selected", onSelected);
|
||||
sharedSelector.addEventListener("cancelled", onCancelled);
|
||||
sharedSelector.addEventListener("error", onError);
|
||||
sharedSelector.addEventListener("stop", onStop);
|
||||
|
||||
function removeListeners () {
|
||||
sharedSelector.removeEventListener("selected", onSelected);
|
||||
sharedSelector.removeEventListener("cancelled", onCancelled);
|
||||
sharedSelector.removeEventListener("error", onError);
|
||||
sharedSelector.removeEventListener("stop", onStop);
|
||||
}
|
||||
|
||||
function onSelected (ev: any) {
|
||||
console.info("fx_cast (Debug): Selected receiver", ev.detail);
|
||||
resolve(ev.detail);
|
||||
});
|
||||
removeListeners();
|
||||
}
|
||||
|
||||
sharedSelector.addEventListener("cancelled", () => {
|
||||
function onCancelled () {
|
||||
console.info("fx_cast (Debug): Cancelled receiver selection");
|
||||
resolve(null);
|
||||
});
|
||||
removeListeners();
|
||||
}
|
||||
|
||||
sharedSelector.addEventListener("error", () => {
|
||||
function onError () {
|
||||
console.error("fx_cast (Debug): Failed to select receiver");
|
||||
reject();
|
||||
});
|
||||
removeListeners();
|
||||
}
|
||||
|
||||
function onStop (ev: any) {
|
||||
console.info("fx_cast (Debug): Stopped receiver app", ev.detail);
|
||||
|
||||
StatusManager.init().then(() => {
|
||||
StatusManager.stopReceiverApp(ev.detail.receiver);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// Ensure status manager is initialized
|
||||
|
||||
Reference in New Issue
Block a user