Fix existing media not set for auto join sessions

This commit is contained in:
hensm
2022-09-11 14:39:33 +01:00
parent 16d11651da
commit bd777e80ea
4 changed files with 49 additions and 22 deletions

View File

@@ -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">
) => {

View File

@@ -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);
/**