mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-11 01:59:58 +00:00
Initial commit
This commit is contained in:
8
ext/src/shim/media/classes/EditTracksInfoRequest.js
Normal file
8
ext/src/shim/media/classes/EditTracksInfoRequest.js
Normal file
@@ -0,0 +1,8 @@
|
||||
"use strict";
|
||||
|
||||
export default class EditTracksInfoRequest {
|
||||
constructor (opt_activeTrackIds = null, opt_textTrackStyle = null) {
|
||||
this.activeTrackIds = opt_activeTrackIds;
|
||||
this.textTrackStyle = opt_textTrackStyle;
|
||||
}
|
||||
}
|
||||
11
ext/src/shim/media/classes/GenericMediaMetadata.js
Normal file
11
ext/src/shim/media/classes/GenericMediaMetadata.js
Normal file
@@ -0,0 +1,11 @@
|
||||
"use strict";
|
||||
|
||||
export default class GenericMediaMetadata {
|
||||
constructor () {
|
||||
this.images = [];
|
||||
this.metadataType = null;
|
||||
this.releaseDate = null;
|
||||
this.subtitle = null;
|
||||
this.title = null;
|
||||
}
|
||||
}
|
||||
8
ext/src/shim/media/classes/GetStatusRequest.js
Normal file
8
ext/src/shim/media/classes/GetStatusRequest.js
Normal file
@@ -0,0 +1,8 @@
|
||||
"use strict";
|
||||
|
||||
export default class GetStatusRequest {
|
||||
constructor () {
|
||||
castConsole.info('GetStatusRequest');
|
||||
this.customData = {};
|
||||
}
|
||||
}
|
||||
11
ext/src/shim/media/classes/LoadRequest.js
Normal file
11
ext/src/shim/media/classes/LoadRequest.js
Normal file
@@ -0,0 +1,11 @@
|
||||
"use strict";
|
||||
|
||||
export default class LoadRequest {
|
||||
constructor (mediaInfo) {
|
||||
this.activeTrackIds = [];
|
||||
this.autoplay = false;
|
||||
this.currentTime = 0;
|
||||
this.customData = {};
|
||||
this.media = mediaInfo;
|
||||
}
|
||||
}
|
||||
202
ext/src/shim/media/classes/Media.js
Normal file
202
ext/src/shim/media/classes/Media.js
Normal file
@@ -0,0 +1,202 @@
|
||||
"use strict";
|
||||
|
||||
|
||||
import Volume from "../../cast/classes/Volume";
|
||||
|
||||
import { PlayerState
|
||||
, RepeatMode
|
||||
, MediaCommand } from "../enums";
|
||||
|
||||
import _Error from "../../cast/classes/Error";
|
||||
import { ErrorCode } from "../../cast/enums";
|
||||
|
||||
import { onMessage, sendMessage } from "../../messageBridge";
|
||||
|
||||
import uuid from "uuid/v1";
|
||||
|
||||
|
||||
export default class Media {
|
||||
constructor (sessionId, mediaSessionId, _internalSessionId) {
|
||||
this._id = uuid();
|
||||
|
||||
this.activeTrackIds = [];
|
||||
this.currentItemId = 1;
|
||||
this.customData = {};
|
||||
this.currentTime = 0;
|
||||
this.idleReason = null;
|
||||
this.items = [];
|
||||
this.loadingItemId = null;
|
||||
this.media = null;
|
||||
this.mediaSessionId = mediaSessionId;
|
||||
this.playbackRate = 1;
|
||||
this.playerState = PlayerState.PAUSED;
|
||||
this.preloadedItemId = null;
|
||||
this.RepeatMode = RepeatMode.OFF;
|
||||
this.sessionId = sessionId;
|
||||
this.supportedMediaCommands = [
|
||||
MediaCommand.PAUSE
|
||||
, MediaCommand.SEEK
|
||||
, MediaCommand.STREAM_VOLUME
|
||||
, MediaCommand.STREAM_MUTE
|
||||
];
|
||||
this.volume = new Volume();
|
||||
|
||||
this._sendMessage("bridge:bridgemedia/initialize", {
|
||||
sessionId
|
||||
, mediaSessionId
|
||||
, _internalSessionId
|
||||
});
|
||||
|
||||
onMessage(message => {
|
||||
if (!message._id || message._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.volume = new Volume(
|
||||
status._volumeLevel
|
||||
, status._volumeMuted);
|
||||
this.playbackRate = status.playbackRate;
|
||||
this.playerState = status.playerState;
|
||||
this.repeatMode = status.repeatMode;
|
||||
|
||||
if (status.media) {
|
||||
this.media = status.media;
|
||||
}
|
||||
if (status.mediaSessionId) {
|
||||
this.mediaSessionId = status.mediaSessionId;
|
||||
}
|
||||
|
||||
// Call update listeners
|
||||
this._updateListeners.forEach(listener => 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;
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
this._updateListeners = new Set();
|
||||
this._sendMediaMessageCallbacks = new Map();
|
||||
}
|
||||
|
||||
_sendMessage (subject, data) {
|
||||
sendMessage({
|
||||
subject
|
||||
, data
|
||||
, _id: this._id
|
||||
});
|
||||
}
|
||||
|
||||
_sendMediaMessage (message, successCallback, errorCallback) {
|
||||
message.mediaSessionId = this.mediaSessionId;
|
||||
message.requestId = 0;
|
||||
message.sessionId = this.sessionId;
|
||||
message.customData = null;
|
||||
|
||||
const messageId = uuid();
|
||||
|
||||
this._sendMediaMessageCallbacks.set(messageId, [
|
||||
successCallback
|
||||
, errorCallback
|
||||
]);
|
||||
|
||||
this._sendMessage("bridge:bridgemedia/sendMediaMessage", {
|
||||
message
|
||||
, messageId
|
||||
});
|
||||
}
|
||||
|
||||
addUpdateListener (listener) {
|
||||
this._updateListeners.add(listener);
|
||||
}
|
||||
editTracksInfo (editTracksInfoRequest, successCallback, errorCallback) {
|
||||
console.log("STUB :: Media#editTracksInfo");
|
||||
}
|
||||
getEstimatedTime () {
|
||||
if (!this.currentTime) return 0;
|
||||
return this.currentTime + ((Date.now() / 1000) - this._lastCurrentTime);
|
||||
}
|
||||
getStatus (getStatusRequest, successCallback, errorCallback) {
|
||||
this._sendMediaMessage({ type: "MEDIA_GET_STATUS" }
|
||||
, successCallback, errorCallback);
|
||||
}
|
||||
pause (pauseRequest, successCallback, errorCallback) {
|
||||
this._sendMediaMessage({ type: "PAUSE" }
|
||||
, successCallback, errorCallback);
|
||||
}
|
||||
play (playRequest, successCallback, errorCallback) {
|
||||
this._sendMediaMessage({ type: "PLAY" }
|
||||
, successCallback, errorCallback);
|
||||
}
|
||||
queueAppendItem (item, successCallback, errorCallback) {
|
||||
console.log("STUB :: Media#queueAppendItem");
|
||||
}
|
||||
queueInsertItems (queueInsertItemsRequest, successCallback, errorCallback) {
|
||||
console.log("STUB :: Media#queueInsertItems");
|
||||
}
|
||||
queueJumpToItem (itemId, successCallback, errorCallback) {
|
||||
console.log("STUB :: Media#queueJumpToItem");
|
||||
}
|
||||
queueMoveItemToNewIndex (itemId, newIndex, successCallback, errorCallback) {
|
||||
console.log("STUB :: Media#queueMoveItemToNewIndex");
|
||||
}
|
||||
queueNext (successCallback, errorCallback) {
|
||||
console.log("STUB :: Media#queueNext");
|
||||
}
|
||||
queuePrev (successCallback, errorCallback) {
|
||||
console.log("STUB :: Media#queuePrev");
|
||||
}
|
||||
queueRemoveItem(itemId, successCallback, errorCallback) {
|
||||
console.log("STUB :: Media#queueRemoveItem");
|
||||
}
|
||||
queueReorderItems (queueReorderItemsRequest, successCallback, errorCallback) {
|
||||
console.log("STUB :: Media#queueReorderItems");
|
||||
}
|
||||
queueSetRepeatMode (repeatMode, successCallback, errorCallback) {
|
||||
console.log("STUB :: Media#queueSetRepeatMode");
|
||||
}
|
||||
queueUpdateItems (queueUpdateItemsRequest, successCallback, errorCallback) {
|
||||
console.log("STUB :: Media#queueUpdateItems");
|
||||
}
|
||||
removeUpdateListener (listener) {
|
||||
this._updateListeners.delete(listener);
|
||||
}
|
||||
seek (seekRequest, successCallback, errorCallback) {
|
||||
console.log(seekRequest);
|
||||
this._sendMediaMessage({
|
||||
type: "SEEK"
|
||||
, currentTime: seekRequest.currentTime
|
||||
}, successCallback, errorCallback);
|
||||
}
|
||||
setVolume (volumeRequest, successCallback, errorCallback) {
|
||||
this._sendMediaMessage({
|
||||
type: "SET_VOLUME"
|
||||
, volume: volumeRequest.volume
|
||||
}, successCallback, errorCallback);
|
||||
}
|
||||
stop (stopRequest, successCallback, errorCallback) {
|
||||
this._sendMediaMessage({ type: "STOP" }
|
||||
, successCallback, errorCallback);
|
||||
}
|
||||
supportsCommand (command) {
|
||||
console.log("STUB :: Media#supportsCommand");
|
||||
}
|
||||
}
|
||||
16
ext/src/shim/media/classes/MediaInfo.js
Normal file
16
ext/src/shim/media/classes/MediaInfo.js
Normal file
@@ -0,0 +1,16 @@
|
||||
"use strict";
|
||||
|
||||
import { StreamType } from "../enums";
|
||||
|
||||
export default class MediaInfo {
|
||||
constructor (contentId, contentType) {
|
||||
this.contentId = contentId;
|
||||
this.contentType = contentType;
|
||||
this.customData = {};
|
||||
this.duration = null;
|
||||
this.metadata = null;
|
||||
this.streamType = StreamType.BUFFERED;
|
||||
this.textTrackStyle = null;
|
||||
this.tracks = [];
|
||||
}
|
||||
}
|
||||
12
ext/src/shim/media/classes/MovieMediaMetadata.js
Normal file
12
ext/src/shim/media/classes/MovieMediaMetadata.js
Normal file
@@ -0,0 +1,12 @@
|
||||
"use strict";
|
||||
|
||||
export default class MovieMediaMetadata {
|
||||
constructor () {
|
||||
this.images = [];
|
||||
this.metadataType = null;
|
||||
this.releaseDate = null;
|
||||
this.studio = null;
|
||||
this.subtitle = null;
|
||||
this.title = null;
|
||||
}
|
||||
}
|
||||
17
ext/src/shim/media/classes/MusicTrackMediaMetadata.js
Normal file
17
ext/src/shim/media/classes/MusicTrackMediaMetadata.js
Normal file
@@ -0,0 +1,17 @@
|
||||
"use strict";
|
||||
|
||||
export default class MusicTrackMediaMetadata {
|
||||
constructor () {
|
||||
this.albumArtist = null;
|
||||
this.albumName = null;
|
||||
this.artist = null;
|
||||
this.composer = null;
|
||||
this.discNumber = null;
|
||||
this.images = [];
|
||||
this.metadataType = this.type = 3;
|
||||
this.releaseDate = null;
|
||||
this.songName = null;
|
||||
this.title = null;
|
||||
this.trackNumber = null;
|
||||
}
|
||||
}
|
||||
7
ext/src/shim/media/classes/PauseRequest.js
Normal file
7
ext/src/shim/media/classes/PauseRequest.js
Normal file
@@ -0,0 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
export default class PauseRequest {
|
||||
constructor () {
|
||||
this.customData = {};
|
||||
}
|
||||
}
|
||||
16
ext/src/shim/media/classes/PhotoMediaMetadata.js
Normal file
16
ext/src/shim/media/classes/PhotoMediaMetadata.js
Normal file
@@ -0,0 +1,16 @@
|
||||
"use strict";
|
||||
|
||||
export default class PhotoMediaMetadata {
|
||||
constructor () {
|
||||
this.artist = null;
|
||||
this.creationDateTime = null;
|
||||
this.height = null;
|
||||
this.images = [];
|
||||
this.latitude = null;
|
||||
this.location = null;
|
||||
this.longitude = null;
|
||||
this.metadataType = null;
|
||||
this.title = null;
|
||||
this.width = null;
|
||||
}
|
||||
}
|
||||
7
ext/src/shim/media/classes/PlayRequest.js
Normal file
7
ext/src/shim/media/classes/PlayRequest.js
Normal file
@@ -0,0 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
export default class PlayRequest {
|
||||
constructor () {
|
||||
this.customData = {};
|
||||
}
|
||||
}
|
||||
9
ext/src/shim/media/classes/QueueInsertItemsRequest.js
Normal file
9
ext/src/shim/media/classes/QueueInsertItemsRequest.js
Normal file
@@ -0,0 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
export default class QueueInsertItemsRequest {
|
||||
constructor (itemsToInsert) {
|
||||
this.customData = {};
|
||||
this.insertBefore = null;
|
||||
this.items = itemsToInsert;
|
||||
}
|
||||
}
|
||||
13
ext/src/shim/media/classes/QueueItem.js
Normal file
13
ext/src/shim/media/classes/QueueItem.js
Normal file
@@ -0,0 +1,13 @@
|
||||
"use strict";
|
||||
|
||||
export default class QueueItem {
|
||||
constructor (mediaInfo) {
|
||||
this.activeTrackIds = [];
|
||||
this.autoplay = false;
|
||||
this.customData = {};
|
||||
this.itemId = null;
|
||||
this.media = mediaInfo;
|
||||
this.preloadTime = 10;
|
||||
this.startTime = 0;
|
||||
}
|
||||
}
|
||||
12
ext/src/shim/media/classes/QueueLoadRequest.js
Normal file
12
ext/src/shim/media/classes/QueueLoadRequest.js
Normal file
@@ -0,0 +1,12 @@
|
||||
"use strict";
|
||||
|
||||
import { RepeatMode } from "../enums";
|
||||
|
||||
export default class QueueLoadRequest {
|
||||
constructor (items) {
|
||||
this.customData = {};
|
||||
this.items = items;
|
||||
this.repeatMode = RepeatMode.OFF;
|
||||
this.startIndex = 0;
|
||||
}
|
||||
}
|
||||
8
ext/src/shim/media/classes/QueueRemoveItemsRequest.js
Normal file
8
ext/src/shim/media/classes/QueueRemoveItemsRequest.js
Normal file
@@ -0,0 +1,8 @@
|
||||
"use strict";
|
||||
|
||||
export default class QueueRemoveItemsRequest {
|
||||
constructor (itemIdsToRemove) {
|
||||
this.customData = {};
|
||||
this.itemIds = itemIdsToRemove;
|
||||
}
|
||||
}
|
||||
10
ext/src/shim/media/classes/QueueReorderItemsRequest.js
Normal file
10
ext/src/shim/media/classes/QueueReorderItemsRequest.js
Normal file
@@ -0,0 +1,10 @@
|
||||
"use strict";
|
||||
|
||||
export default class QueueReorderItemsRequest {
|
||||
constructor (itemIdsToReorder) {
|
||||
this.customData = {};
|
||||
this.type = "QUEUE_REORDER";
|
||||
this.insertBefore = null;
|
||||
this.itemIds = itemIdsToReorder;
|
||||
}
|
||||
}
|
||||
11
ext/src/shim/media/classes/QueueSetPropertiesRequest.js
Normal file
11
ext/src/shim/media/classes/QueueSetPropertiesRequest.js
Normal file
@@ -0,0 +1,11 @@
|
||||
"use strict";
|
||||
|
||||
export default class QueueSetPropertiesRequest {
|
||||
constructor () {
|
||||
this.type = "QUEUE_UPDATE";
|
||||
this.customData = {};
|
||||
this.repeatMode = null;
|
||||
this.sessionId = null;
|
||||
this.requestId = null;
|
||||
}
|
||||
}
|
||||
8
ext/src/shim/media/classes/QueueUpdateItemsRequest.js
Normal file
8
ext/src/shim/media/classes/QueueUpdateItemsRequest.js
Normal file
@@ -0,0 +1,8 @@
|
||||
"use strict";
|
||||
|
||||
export default class QueueUpdateItemsRequest {
|
||||
constructor () {
|
||||
this.customData = {};
|
||||
this.items = [];
|
||||
}
|
||||
}
|
||||
9
ext/src/shim/media/classes/SeekRequest.js
Normal file
9
ext/src/shim/media/classes/SeekRequest.js
Normal file
@@ -0,0 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
export default class SeekRequest {
|
||||
constructor () {
|
||||
this.currentTime = null;
|
||||
this.customData = {};
|
||||
this.resumeState = null;
|
||||
}
|
||||
}
|
||||
7
ext/src/shim/media/classes/StopRequest.js
Normal file
7
ext/src/shim/media/classes/StopRequest.js
Normal file
@@ -0,0 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
export default class StopRequest {
|
||||
constructor () {
|
||||
this.customData = {};
|
||||
}
|
||||
}
|
||||
18
ext/src/shim/media/classes/TextTrackStyle.js
Normal file
18
ext/src/shim/media/classes/TextTrackStyle.js
Normal file
@@ -0,0 +1,18 @@
|
||||
"use strict";
|
||||
|
||||
export default class TextTrackStyle {
|
||||
constructor () {
|
||||
this.backgroundColor = null;
|
||||
this.customData = {};
|
||||
this.edgeColor = null;
|
||||
this.edgeType = null;
|
||||
this.fontFamily = null;
|
||||
this.fontGenericFamily = null;
|
||||
this.fontScale = null;
|
||||
this.fontStyle = null;
|
||||
this.foregroundColor = null;
|
||||
this.windowColor = null;
|
||||
this.windowRoundedCornerRadius = null;
|
||||
this.windowType = null;
|
||||
}
|
||||
}
|
||||
14
ext/src/shim/media/classes/Track.js
Normal file
14
ext/src/shim/media/classes/Track.js
Normal file
@@ -0,0 +1,14 @@
|
||||
"use strict";
|
||||
|
||||
export default class Track {
|
||||
constructor (trackId, trackType) {
|
||||
this.customData = {};
|
||||
this.language = null;
|
||||
this.name = null;
|
||||
this.subtype = null;
|
||||
this.trackContentId = null;
|
||||
this.trackContentType = null;
|
||||
this.trackId = trackId;
|
||||
this.type = trackType;
|
||||
}
|
||||
}
|
||||
13
ext/src/shim/media/classes/TvShowMediaMetadata.js
Normal file
13
ext/src/shim/media/classes/TvShowMediaMetadata.js
Normal file
@@ -0,0 +1,13 @@
|
||||
"use strict";
|
||||
|
||||
export default class TvShowMediaMetadata {
|
||||
constructor () {
|
||||
this.episode = null;
|
||||
this.images = [];
|
||||
this.metadataType = null;
|
||||
this.originalAirdate = null;
|
||||
this.season = null;
|
||||
this.seriesTitle = null;
|
||||
this.title = null;
|
||||
}
|
||||
}
|
||||
8
ext/src/shim/media/classes/VolumeRequest.js
Normal file
8
ext/src/shim/media/classes/VolumeRequest.js
Normal file
@@ -0,0 +1,8 @@
|
||||
"use strict";
|
||||
|
||||
export default class VolumeRequest {
|
||||
constructor (volume) {
|
||||
this.volume = volume;
|
||||
this.customData = {};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user