mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-12 02:29:59 +00:00
Push updates to open receiver selectors
This commit is contained in:
@@ -80,11 +80,9 @@ export default new class StatusManager
|
|||||||
const { data: receiver } = message;
|
const { data: receiver } = message;
|
||||||
this.receivers.set(receiver.id, receiver);
|
this.receivers.set(receiver.id, receiver);
|
||||||
|
|
||||||
const serviceUpEvent = new CustomEvent("serviceUp", {
|
this.dispatchEvent(new CustomEvent("serviceUp", {
|
||||||
detail: receiver
|
detail: receiver
|
||||||
});
|
}));
|
||||||
|
|
||||||
this.dispatchEvent(serviceUpEvent);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -96,11 +94,9 @@ export default new class StatusManager
|
|||||||
this.receivers.delete(id);
|
this.receivers.delete(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const serviceDownEvent = new CustomEvent("serviceDown", {
|
this.dispatchEvent(new CustomEvent("serviceDown", {
|
||||||
detail: { id }
|
detail: { id }
|
||||||
});
|
}));
|
||||||
|
|
||||||
this.dispatchEvent(serviceDownEvent);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -121,6 +117,10 @@ export default new class StatusManager
|
|||||||
, ...status
|
, ...status
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.dispatchEvent(new CustomEvent("statusUpdate", {
|
||||||
|
detail: { id, status }
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,6 +85,8 @@ export default class NativeReceiverSelector extends ReceiverSelector {
|
|||||||
this._isOpen = true;
|
this._isOpen = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public update (): void {}
|
||||||
|
|
||||||
public close (): void {
|
public close (): void {
|
||||||
if (this.bridgePort) {
|
if (this.bridgePort) {
|
||||||
this.bridgePort.postMessage({
|
this.bridgePort.postMessage({
|
||||||
|
|||||||
@@ -115,6 +115,16 @@ export default class PopupReceiverSelector extends ReceiverSelector {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public update (receivers: Receiver[]) {
|
||||||
|
this.receivers = receivers;
|
||||||
|
this.messagePort?.postMessage({
|
||||||
|
subject: "popup:/populateReceiverList"
|
||||||
|
, data: {
|
||||||
|
receivers: this.receivers
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public async close (): Promise<void> {
|
public async close (): Promise<void> {
|
||||||
if (this.windowId) {
|
if (this.windowId) {
|
||||||
await browser.windows.remove(this.windowId);
|
await browser.windows.remove(this.windowId);
|
||||||
|
|||||||
@@ -42,10 +42,13 @@ export default abstract class ReceiverSelector
|
|||||||
|
|
||||||
abstract readonly isOpen: boolean;
|
abstract readonly isOpen: boolean;
|
||||||
|
|
||||||
abstract open (receivers: Receiver[]
|
abstract open (
|
||||||
, defaultMediaType: ReceiverSelectorMediaType
|
receivers: Receiver[]
|
||||||
, availableMediaTypes: ReceiverSelectorMediaType
|
, defaultMediaType: ReceiverSelectorMediaType
|
||||||
, requestedAppId?: string): void;
|
, availableMediaTypes: ReceiverSelectorMediaType
|
||||||
|
, requestedAppId?: string): void;
|
||||||
|
|
||||||
|
abstract update (receivers: Receiver[]): void;
|
||||||
|
|
||||||
abstract close (): void;
|
abstract close (): void;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,6 +124,15 @@ async function getSelection (
|
|||||||
sharedSelector = await createSelector();
|
sharedSelector = await createSelector();
|
||||||
|
|
||||||
|
|
||||||
|
function onReceiverChange () {
|
||||||
|
sharedSelector.update(Array.from(StatusManager.getReceivers()));
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusManager.addEventListener("serviceUp", onReceiverChange);
|
||||||
|
StatusManager.addEventListener("serviceDown", onReceiverChange);
|
||||||
|
StatusManager.addEventListener("statusUpdate", onReceiverChange);
|
||||||
|
|
||||||
|
|
||||||
let onSelected: any;
|
let onSelected: any;
|
||||||
let onCancelled: any;
|
let onCancelled: any;
|
||||||
let onError: any;
|
let onError: any;
|
||||||
@@ -151,6 +160,10 @@ async function getSelection (
|
|||||||
sharedSelector.removeEventListener("cancelled", onCancelled);
|
sharedSelector.removeEventListener("cancelled", onCancelled);
|
||||||
sharedSelector.removeEventListener("error", onError);
|
sharedSelector.removeEventListener("error", onError);
|
||||||
sharedSelector.removeEventListener("stop", onStop);
|
sharedSelector.removeEventListener("stop", onStop);
|
||||||
|
|
||||||
|
StatusManager.removeEventListener("serviceUp", onReceiverChange);
|
||||||
|
StatusManager.removeEventListener("serviceDown", onReceiverChange);
|
||||||
|
StatusManager.removeEventListener("statusUpdate", onReceiverChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
sharedSelector.addEventListener("selected"
|
sharedSelector.addEventListener("selected"
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ export type Messages = [
|
|||||||
subject: "popup:/populateReceiverList"
|
subject: "popup:/populateReceiverList"
|
||||||
, data: {
|
, data: {
|
||||||
receivers: Receiver[]
|
receivers: Receiver[]
|
||||||
, defaultMediaType: ReceiverSelectorMediaType
|
, defaultMediaType?: ReceiverSelectorMediaType
|
||||||
, availableMediaTypes: ReceiverSelectorMediaType
|
, availableMediaTypes?: ReceiverSelectorMediaType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
, {
|
, {
|
||||||
|
|||||||
@@ -84,11 +84,14 @@ class PopupApp extends Component<{}, PopupAppState> {
|
|||||||
|
|
||||||
this.defaultMediaType = defaultMediaType;
|
this.defaultMediaType = defaultMediaType;
|
||||||
|
|
||||||
this.setState({
|
this.setState({ receivers });
|
||||||
receivers: message.data.receivers
|
|
||||||
, mediaType: this.defaultMediaType
|
if (availableMediaTypes && defaultMediaType) {
|
||||||
, availableMediaTypes: message.data.availableMediaTypes
|
this.setState({
|
||||||
});
|
availableMediaTypes: availableMediaTypes
|
||||||
|
, mediaType: defaultMediaType
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user