mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-10 17:49:58 +00:00
Fix existing media not set for auto join sessions
This commit is contained in:
@@ -34,7 +34,7 @@ const logger = new Logger("fx_cast [sdk :: cast.Session]");
|
||||
* Takes a media object and a media status object and merges the status
|
||||
* with the existing media object, updating it with new properties.
|
||||
*/
|
||||
function updateMedia(media: Media, status: MediaStatus) {
|
||||
export function updateMedia(media: Media, status: MediaStatus) {
|
||||
if (status.currentTime) {
|
||||
MediaLastUpdateTimes.set(media, Date.now());
|
||||
}
|
||||
@@ -105,6 +105,11 @@ export const SessionLeaveSuccessCallback = new WeakMap<
|
||||
Optional<() => void>
|
||||
>();
|
||||
|
||||
type SendMediaMessage = (
|
||||
message: DistributiveOmit<SenderMediaMessage, "requestId">
|
||||
) => Promise<void>;
|
||||
export const SessionSendMediaMessage = new WeakMap<Session, SendMediaMessage>();
|
||||
|
||||
/** Creates a Session object and initializes private data. */
|
||||
export function createSession(
|
||||
sessionArgs: ConstructorParameters<typeof Session>
|
||||
@@ -113,6 +118,17 @@ export function createSession(
|
||||
SessionUpdateListeners.set(session, new Set());
|
||||
SessionSendMessageCallbacks.set(session, new Map());
|
||||
|
||||
SessionSendMediaMessage.set(session, message => {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
session.sendMessage(
|
||||
NS_MEDIA,
|
||||
{ ...message, requestId: 0 },
|
||||
resolve,
|
||||
reject
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
return session;
|
||||
}
|
||||
|
||||
@@ -144,6 +160,13 @@ export default class Session {
|
||||
return sendMessageCallback;
|
||||
}
|
||||
|
||||
get #sendMediaMessage() {
|
||||
const sendMediaMessage = SessionSendMediaMessage.get(this);
|
||||
if (!sendMediaMessage)
|
||||
throw logger.error("Missing send media message function!");
|
||||
return sendMediaMessage;
|
||||
}
|
||||
|
||||
get #leaveSuccessCallback() {
|
||||
return SessionLeaveSuccessCallback.get(this);
|
||||
}
|
||||
@@ -208,22 +231,6 @@ export default class Session {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sends a media message to the app receiver.
|
||||
*/
|
||||
#sendMediaMessage = (
|
||||
message: DistributiveOmit<SenderMediaMessage, "requestId">
|
||||
) => {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
this.sendMessage(
|
||||
NS_MEDIA,
|
||||
{ ...message, requestId: 0 },
|
||||
resolve,
|
||||
reject
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
#sendReceiverMessage = (
|
||||
message: DistributiveOmit<SenderMessage, "requestId">
|
||||
) => {
|
||||
|
||||
@@ -35,11 +35,14 @@ import Session, {
|
||||
createSession,
|
||||
SessionLeaveSuccessCallback,
|
||||
SessionMessageListeners,
|
||||
SessionSendMediaMessage,
|
||||
SessionSendMessageCallbacks,
|
||||
SessionUpdateListeners
|
||||
SessionUpdateListeners,
|
||||
updateMedia
|
||||
} from "./Session";
|
||||
|
||||
import * as media from "./media";
|
||||
import { createMedia } from "./media/Media";
|
||||
|
||||
const logger = new Logger("fx_cast [sdk]");
|
||||
|
||||
@@ -179,6 +182,16 @@ export default class {
|
||||
session.statusText = status.statusText;
|
||||
session.transportId = status.transportId;
|
||||
|
||||
if (status.media) {
|
||||
const media = createMedia(
|
||||
[status.sessionId, status.media.mediaSessionId],
|
||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||
SessionSendMediaMessage.get(session)!
|
||||
);
|
||||
updateMedia(media, status.media);
|
||||
session.media = [media];
|
||||
}
|
||||
|
||||
this.#sessions.set(session.sessionId, session);
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user