mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-08 08:39:59 +00:00
Improve media object updates
This commit is contained in:
@@ -20,6 +20,7 @@ import {
|
|||||||
SenderApplication
|
SenderApplication
|
||||||
} from "./classes";
|
} from "./classes";
|
||||||
|
|
||||||
|
import { PlayerState } from "./media/enums";
|
||||||
import type { LoadRequest, QueueLoadRequest, QueueItem } from "./media/classes";
|
import type { LoadRequest, QueueLoadRequest, QueueItem } from "./media/classes";
|
||||||
import Media, {
|
import Media, {
|
||||||
createMedia,
|
createMedia,
|
||||||
@@ -35,28 +36,53 @@ const logger = new Logger("fx_cast [sdk :: cast.Session]");
|
|||||||
* with the existing media object, updating it with new properties.
|
* with the existing media object, updating it with new properties.
|
||||||
*/
|
*/
|
||||||
export function updateMedia(media: Media, status: MediaStatus) {
|
export function updateMedia(media: Media, status: MediaStatus) {
|
||||||
if (status.currentTime) {
|
media.currentItemId = null;
|
||||||
|
media.loadingItemId = null;
|
||||||
|
media.preloadedItemId = null;
|
||||||
|
|
||||||
|
// Copy status properties to media
|
||||||
|
for (const prop in status) {
|
||||||
|
if (prop === "items") continue;
|
||||||
|
|
||||||
|
switch (prop) {
|
||||||
|
case "volume":
|
||||||
|
media.volume.level = status.volume.level;
|
||||||
|
media.volume.muted = status.volume.muted;
|
||||||
|
break;
|
||||||
|
case "supportedMediaCommands":
|
||||||
|
media.supportedMediaCommands =
|
||||||
|
convertSupportedMediaCommandsFlags(
|
||||||
|
status.supportedMediaCommands
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
(media as any)[prop] = (status as any)[prop];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!("idleReason" in status)) {
|
||||||
|
media.idleReason = null;
|
||||||
|
}
|
||||||
|
if (!("extendedStatus" in status)) {
|
||||||
|
// FIXME: Add extendedStatus types
|
||||||
|
(media as any).extendedStatus = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set last update time on currentTime change
|
||||||
|
if ("currentTime" in status) {
|
||||||
mediaLastUpdateTimes.set(media, Date.now());
|
mediaLastUpdateTimes.set(media, Date.now());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy basic props
|
if (
|
||||||
if (status.breakStatus) media.breakStatus = status.breakStatus;
|
media.playerState === PlayerState.IDLE &&
|
||||||
if (status.currentTime) media.currentTime = status.currentTime;
|
media.loadingItemId === null
|
||||||
if (status.customData) media.customData = status.customData;
|
) {
|
||||||
if (status.idleReason) media.idleReason = status.idleReason;
|
media.currentItemId = null;
|
||||||
if (status.media) media.media = status.media;
|
media.loadingItemId = null;
|
||||||
if (status.mediaSessionId) media.mediaSessionId = status.mediaSessionId;
|
media.preloadedItemId = null;
|
||||||
if (status.playbackRate) media.playbackRate = status.playbackRate;
|
media.items = null;
|
||||||
if (status.playerState) media.playerState = status.playerState;
|
} else if (status.items) {
|
||||||
if (status.repeatMode) media.repeatMode = status.repeatMode;
|
|
||||||
if (status.volume) media.volume = status.volume;
|
|
||||||
|
|
||||||
media.supportedMediaCommands = convertSupportedMediaCommandsFlags(
|
|
||||||
status.supportedMediaCommands
|
|
||||||
);
|
|
||||||
|
|
||||||
// Update queue state
|
|
||||||
if (status.items) {
|
|
||||||
const newItems: QueueItem[] = [];
|
const newItems: QueueItem[] = [];
|
||||||
|
|
||||||
for (const newItem of status.items) {
|
for (const newItem of status.items) {
|
||||||
@@ -251,8 +277,8 @@ export default class Session {
|
|||||||
[this.sessionId, status.mediaSessionId],
|
[this.sessionId, status.mediaSessionId],
|
||||||
this.#sendMediaMessage
|
this.#sendMediaMessage
|
||||||
);
|
);
|
||||||
updateMedia(media, status);
|
|
||||||
this.media.push(media);
|
this.media.push(media);
|
||||||
|
updateMedia(media, status);
|
||||||
} else {
|
} else {
|
||||||
updateMedia(media, status);
|
updateMedia(media, status);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user