mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-09 17:19:59 +00:00
Store/disconnect media extension message listener
This commit is contained in:
@@ -40,6 +40,61 @@ export default class Media {
|
|||||||
#sendMediaMessageCallbacks = new Map<string, Callbacks>();
|
#sendMediaMessageCallbacks = new Map<string, Callbacks>();
|
||||||
#lastCurrentTime?: number;
|
#lastCurrentTime?: number;
|
||||||
|
|
||||||
|
#listener = onMessage(message => {
|
||||||
|
if ((message as any)._id !== this.#id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (message.subject) {
|
||||||
|
case "shim:/media/update": {
|
||||||
|
const status = message.data;
|
||||||
|
|
||||||
|
this.currentTime = status.currentTime;
|
||||||
|
this.#lastCurrentTime = status._lastCurrentTime;
|
||||||
|
this.customData = status.customData;
|
||||||
|
this.playbackRate = status.playbackRate;
|
||||||
|
this.playerState = status.playerState;
|
||||||
|
this.repeatMode = status.repeatMode;
|
||||||
|
|
||||||
|
if (status._volumeLevel && status._volumeMuted) {
|
||||||
|
this.volume = new Volume(
|
||||||
|
status._volumeLevel
|
||||||
|
, status._volumeMuted);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status.media) {
|
||||||
|
this.media = status.media;
|
||||||
|
}
|
||||||
|
if (status.mediaSessionId) {
|
||||||
|
this.mediaSessionId = status.mediaSessionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call update listeners
|
||||||
|
for (const listener of this.#updateListeners) {
|
||||||
|
listener(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case "shim:/media/sendMediaMessageResponse": {
|
||||||
|
const { messageId, error } = message.data;
|
||||||
|
const [ successCallback, errorCallback ]
|
||||||
|
= this.#sendMediaMessageCallbacks
|
||||||
|
.get(messageId) ?? [];
|
||||||
|
|
||||||
|
if (error && errorCallback) {
|
||||||
|
errorCallback(new _Error(ErrorCode.SESSION_ERROR));
|
||||||
|
} else if (successCallback) {
|
||||||
|
successCallback();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
public activeTrackIds: (number[] | null) = null;
|
public activeTrackIds: (number[] | null) = null;
|
||||||
public currentItemId: (number | null) = null;
|
public currentItemId: (number | null) = null;
|
||||||
public customData: any = null;
|
public customData: any = null;
|
||||||
@@ -70,61 +125,6 @@ export default class Media {
|
|||||||
}
|
}
|
||||||
, _id: this.#id
|
, _id: this.#id
|
||||||
});
|
});
|
||||||
|
|
||||||
onMessage(message => {
|
|
||||||
if ((message as any)._id !== this.#id) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (message.subject) {
|
|
||||||
case "shim:/media/update": {
|
|
||||||
const status = message.data;
|
|
||||||
|
|
||||||
this.currentTime = status.currentTime;
|
|
||||||
this.#lastCurrentTime = status._lastCurrentTime;
|
|
||||||
this.customData = status.customData;
|
|
||||||
this.playbackRate = status.playbackRate;
|
|
||||||
this.playerState = status.playerState;
|
|
||||||
this.repeatMode = status.repeatMode;
|
|
||||||
|
|
||||||
if (status._volumeLevel && status._volumeMuted) {
|
|
||||||
this.volume = new Volume(
|
|
||||||
status._volumeLevel
|
|
||||||
, status._volumeMuted);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (status.media) {
|
|
||||||
this.media = status.media;
|
|
||||||
}
|
|
||||||
if (status.mediaSessionId) {
|
|
||||||
this.mediaSessionId = status.mediaSessionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call update listeners
|
|
||||||
for (const listener of this.#updateListeners) {
|
|
||||||
listener(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case "shim:/media/sendMediaMessageResponse": {
|
|
||||||
const { messageId, error } = message.data;
|
|
||||||
const [ successCallback, errorCallback ]
|
|
||||||
= this.#sendMediaMessageCallbacks
|
|
||||||
.get(messageId) ?? [];
|
|
||||||
|
|
||||||
if (error && errorCallback) {
|
|
||||||
errorCallback(new _Error(ErrorCode.SESSION_ERROR));
|
|
||||||
} else if (successCallback) {
|
|
||||||
successCallback();
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public addUpdateListener (listener: UpdateListener): void {
|
public addUpdateListener (listener: UpdateListener): void {
|
||||||
@@ -279,6 +279,8 @@ export default class Media {
|
|||||||
{ type: "STOP" }
|
{ type: "STOP" }
|
||||||
, () => {
|
, () => {
|
||||||
this.#isActive = false;
|
this.#isActive = false;
|
||||||
|
this.#listener.disconnect();
|
||||||
|
|
||||||
if (successCallback) {
|
if (successCallback) {
|
||||||
successCallback();
|
successCallback();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user