Convert shim to Typescript (#32)

This commit is contained in:
Matt Hensman
2019-03-12 05:51:43 +00:00
committed by GitHub
parent 4cf0f7264a
commit f1125061d5
89 changed files with 1643 additions and 1378 deletions

View File

@@ -1,28 +0,0 @@
"use strict";
import { AutoJoinPolicy
, DefaultActionPolicy } from "../enums";
export default class ApiConfig {
constructor (
sessionRequest
, sessionListener
, receiverListener
, opt_autoJoinPolicy = AutoJoinPolicy.TAB_AND_ORIGIN_SCOPED
, opt_defaultActionPolicy = DefaultActionPolicy.CREATE_SESSION
// TODO: Remove awful hack for mirror casting
, selectedMedia = "app") {
this.autoJoinPolicy = opt_autoJoinPolicy;
this.defaultActionPolicy = opt_defaultActionPolicy;
this.receiverListener = receiverListener;
this.sessionListener = sessionListener;
this.sessionRequest = sessionRequest;
this.additionalSessionRequests = [];
this.customDialLaunchCallback = null;
this.invisibleSender = false;
this._selectedMedia = selectedMedia;
}
};

View File

@@ -0,0 +1,25 @@
"use strict";
import Session from "./Session";
import SessionRequest from "./SessionRequest";
import { AutoJoinPolicy
, DefaultActionPolicy } from "../enums";
export default class ApiConfig {
public additionalSessionRequests: any[] = [];
public customDialLaunchCallback: any = null;
public invisibleSender = false;
constructor (
public sessionRequest: SessionRequest
, public sessionListener: (session: Session) => void
, public receiverListener: (availability: string) => void
, public autoJoinPolicy: string = AutoJoinPolicy.TAB_AND_ORIGIN_SCOPED
, public defaultActionPolicy: string = DefaultActionPolicy.CREATE_SESSION
// TODO: Remove awful hack for mirror casting
, public _selectedMedia: string = "app") {
}
};

View File

@@ -1,12 +1,9 @@
"use strict";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.DialRequest
export default class DialRequest {
constructor (
appName
, opt_launchParameter = null) {
this.appName = appName;
this.launchParameter = opt_launchParameter;
}
};
"use strict";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.DialRequest
export default class DialRequest {
constructor (
public appName: string
, public launchParameter: string = null) {
}
};

View File

@@ -1,14 +0,0 @@
"use strict";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Error
export default class Error {
constructor (
code
, opt_description = null
, opt_details = null) {
this.code = code;
this.description = opt_description;
this.details = opt_details;
}
};

View File

@@ -0,0 +1,10 @@
"use strict";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Error
export default class Error {
constructor (
public code: string
, public description: string = null
, public details: any = null) {
}
};

View File

@@ -1,11 +1,9 @@
"use strict";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Image
export default class Image {
width = null;
height = null;
constructor (url) {
this.url = url;
}
};
"use strict";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Image
export default class Image {
public width: number = null;
public height: number = null;
constructor (public url: string) {}
};

View File

@@ -1,22 +0,0 @@
"use strict";
import { Capability
, ReceiverType } from "../enums";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Receiver
export default class Receiver {
constructor (
label
, friendlyName
, opt_capabilities = []
, opt_volume = null) {
this.capabilities = opt_capabilities;
this.displayStatus = null;
this.friendlyName = friendlyName;
this.isActiveInput = null;
this.label = label;
this.receiverType = ReceiverType.CAST;
this.volume = opt_volume;
}
};

View File

@@ -0,0 +1,21 @@
"use strict";
import ReceiverDisplayStatus from "./ReceiverDisplayStatus";
import Volume from "./Volume";
import { ReceiverType } from "../enums";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Receiver
export default class Receiver {
public displayStatus: ReceiverDisplayStatus = null;
public isActiveInput: boolean = null;
public receiverType: string = ReceiverType.CAST;
constructor (
public label: string
, public friendlyName: string
, public capabilities: string[] = []
, public volume: Volume = null) {
}
};

View File

@@ -1,10 +0,0 @@
"use strict";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.ReceiverDisplayStatus
export default class ReceiverDisplayStatus {
constructor (statusText, appImages) {
this.appImages = appImages;
this.showStop = null;
this.statusText = statusText;
}
};

View File

@@ -0,0 +1,13 @@
"use strict";
import Image from "./Image";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.ReceiverDisplayStatus
export default class ReceiverDisplayStatus {
public showStop: boolean = null;
constructor (
public statusText: string
, public appImages: Image[]) {}
};

View File

@@ -1,10 +1,9 @@
"use strict";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.SenderApplication
export default class SenderApplication {
constructor (platform) {
this.packageId = null;
this.platform = platform;
this.url = null;
}
};
"use strict";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.SenderApplication
export default class SenderApplication {
public packageId: string = null;
public url: string = null;
constructor (public platform: string) {}
};

View File

@@ -1,8 +1,16 @@
"use strict";
import _Error from "./Error";
import Volume from "./Volume";
import Media from "../../media/classes/Media";
import uuid from "uuid/v1";
import _Error from "./Error";
import Image from "./Image";
import Receiver from "./Receiver";
import SenderApplication from "./SenderApplication";
import Volume from "./Volume";
import LoadRequest from "../../media/classes/LoadRequest";
import Media from "../../media/classes/Media";
import QueueLoadRequest from "../../media/classes/QueueLoadRequest";
import { SessionStatus
, ErrorCode
@@ -10,44 +18,53 @@ import { SessionStatus
import { onMessage, sendMessageResponse } from "../../messageBridge";
import uuid from "uuid/v1";
import { SuccessCallback
, ErrorCallback
, MediaListener
, MessageListener
, UpdateListener
, LoadSuccessCallback
, Callbacks
, CallbacksMap } from "../../types";
export default class Session {
private _id: string = uuid();
private _messageListeners = new Map<string, Set<MessageListener>>();
private _updateListeners = new Set<UpdateListener>();
private _leaveCallbacks: CallbacksMap = new Map();
private _sendMessageCallbacks: CallbacksMap = new Map();
private _setReceiverMutedCallbacks: CallbacksMap = new Map();
private _setReceiverVolumeLevelCallbacks: CallbacksMap = new Map();
private _stopCallbacks: CallbacksMap = new Map();
public media: Media[];
public namespaces: { name: "string" }[];
public senderApps: SenderApplication[];
public status: string;
public statusText: string;
public transportId: string;
constructor (
sessionId
, appId
, displayName
, appImages
, receiver
, successCallback) {
this._id = uuid();
this._messageListeners = new Map();
this._updateListeners = new Set();
this._sendMessageCallbacks = new Map();
this._setReceiverMutedCallbacks = new Map();
this._setReceiverVolumeLevelCallbacks = new Map();
this._stopCallbacks = new Map();
this.sessionId = sessionId;
this.transportId = sessionId || "";
this.appId = appId;
this.appImages = appImages;
this.displayName = displayName;
this.receiver = receiver;
public sessionId: string
, public appId: string
, public displayName: string
, public appImages: Image[]
, public receiver: Receiver
, successCallback: (session: Session) => void) {
this.media = [];
this.namespaces = [];
this.senderApps = [];
this.status = SessionStatus.CONNECTED;
this.statusText = null;
this.transportId = sessionId || "";
if (receiver) {
this._sendMessage("bridge:/session/initialize", {
address: receiver._address
, port: receiver._port
address: (receiver as any)._address
, port: (receiver as any)._port
, appId
, sessionId
});
@@ -62,7 +79,10 @@ export default class Session {
switch (message.subject) {
case "shim:/session/stopped": {
this.status = SessionStatus.STOPPED;
this._updateListeners.forEach(listener => listener());
for (const listener of this._updateListeners) {
listener(false);
}
break;
};
@@ -82,19 +102,21 @@ export default class Session {
};
case "shim:/session/updateStatus": {
if (message.data.volume) {
const volume: Volume = message.data.volume;
if (volume) {
if (!this.receiver.volume) {
const receiverVolume = new Volume(
message.data.volume.level
, message.data.volume.muted);
volume.level
, volume.muted);
receiverVolume.controlType = message.data.volume.controlType;
receiverVolume.stepInterval = message.data.volume.stepInterval;
receiverVolume.controlType = volume.controlType;
receiverVolume.stepInterval = volume.stepInterval;
this.receiver.volume = receiverVolume;
} else {
this.receiver.volume.level = message.data.volume.level;
this.receiver.volume.muted = message.data.volume.muted;
this.receiver.volume.level = volume.level;
this.receiver.volume.muted = volume.muted;
}
}
@@ -104,8 +126,10 @@ export default class Session {
case "shim:/session/impl_addMessageListener": {
const { namespace, data } = message.data;
this._messageListeners.get(namespace).forEach(
listener => listener(namespace, data));
for (const listener of this._messageListeners.get(namespace)) {
listener(namespace, data);
}
break;
};
@@ -166,7 +190,10 @@ export default class Session {
errorCallback(new _Error(ErrorCode.SESSION_ERROR));
} else {
this.status = SessionStatus.STOPPED;
this._updateListeners.forEach(listener => listener());
for (const listener of this._updateListeners) {
listener(false);
}
if (successCallback) {
successCallback();
@@ -181,20 +208,12 @@ export default class Session {
});
}
_sendMessage (subject, data = {}) {
sendMessageResponse({
subject
, data
, _id: this._id
});
}
addMediaListener (listener) {
public addMediaListener (listener: MediaListener) {
console.info("STUB :: Session#addMediaListener")
}
addMessageListener (namespace, listener) {
public addMessageListener (namespace: string, listener: MessageListener) {
if (!this._messageListeners.has(namespace)) {
this._messageListeners.set(namespace, new Set());
}
@@ -204,11 +223,14 @@ export default class Session {
});
}
addUpdateListener (listener) {
public addUpdateListener (listener: UpdateListener) {
this._updateListeners.add(listener);
}
leave (successCallback, errorCallback) {
public leave (
successCallback: SuccessCallback
, errorCallback: ErrorCallback): void {
const id = uuid();
this._sendMessage("bridge:/session/impl_leave", { id });
@@ -219,8 +241,12 @@ export default class Session {
]);
}
loadMedia (loadRequest, successCallback, errorCallback) {
this.sendMediaMessage({
public loadMedia (
loadRequest: LoadRequest
, successCallback: LoadSuccessCallback
, errorCallback: ErrorCallback): void {
this._sendMediaMessage({
type: "LOAD"
, requestId: 0
, media: loadRequest.media
@@ -233,8 +259,10 @@ export default class Session {
let hasResponded = false;
this.addMessageListener("urn:x-cast:com.google.cast.media"
this.addMessageListener(
"urn:x-cast:com.google.cast.media"
, (namespace, data) => {
if (hasResponded) return;
const mediaObject = JSON.parse(data);
@@ -258,28 +286,38 @@ export default class Session {
})
}
queueLoad () {
public queueLoad (
queueLoadRequest: QueueLoadRequest
, successCallback: LoadSuccessCallback
, errorCallback: ErrorCallback): void {
console.info("STUB :: Session#queueLoad");
}
removeMediaListener (listener) {
public removeMediaListener (listener: MediaListener): void {
console.info("STUB :: Session#removeMediaListener");
}
removeMessageListener (namespace, listener) {
public removeMessageListener (
namespace: string
, listener: MessageListener): void {
this._messageListeners.get(namespace).delete(listener);
}
removeUpdateListener (namespace, listener) {
public removeUpdateListener (
namespace: string
, listener: UpdateListener): void {
this._updateListeners.delete(listener);
}
sendMediaMessage (message) {
this.sendMessage(
"urn:x-cast:com.google.cast.media"
, message
, () => {}
, () => {});
}
public sendMessage (
namespace: string
, message: {} | string
, successCallback: SuccessCallback
, errorCallback: ErrorCallback): void {
sendMessage (namespace, message, successCallback, errorCallback) {
const messageId = uuid();
this._sendMessage("bridge:/session/impl_sendMessage", {
@@ -294,7 +332,11 @@ export default class Session {
]);
}
setReceiverMuted (muted, successCallback, errorCallback) {
public setReceiverMuted (
muted: boolean
, successCallback: SuccessCallback
, errorCallback: ErrorCallback) {
const volumeId = uuid();
this._sendMessage("bridge:/session/impl_setReceiverMuted", {
@@ -308,7 +350,11 @@ export default class Session {
]);
}
setReceiverVolumeLevel (newLevel, successCallback, errorCallback) {
public setReceiverVolumeLevel (
newLevel: number
, successCallback: SuccessCallback
, errorCallback: ErrorCallback): void {
const volumeId = uuid();
this._sendMessage("bridge:/session/impl_setReceiverVolumeLevel", {
newLevel
@@ -321,7 +367,10 @@ export default class Session {
]);
}
stop (successCallback, errorCallback) {
public stop (
successCallback: SuccessCallback
, errorCallback: ErrorCallback): void {
const stopId = uuid();
this._sendMessage("bridge:/session/impl_stop", { stopId });
@@ -330,4 +379,20 @@ export default class Session {
, errorCallback
]);
}
private _sendMessage (subject: string, data = {}) {
sendMessageResponse({
subject
, data
, _id: this._id
});
}
private _sendMediaMessage (message: string | {}) {
this.sendMessage(
"urn:x-cast:com.google.cast.media"
, message
, null, null);
}
}

View File

@@ -1,21 +0,0 @@
"use strict";
import { Capability } from "../enums";
import { requestSession as requestSessionTimeout } from "../../timeout.js";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.SessionRequest
export default class SessionRequest {
constructor (
appId
, opt_capabilities = [
Capability.VIDEO_OUT
, Capability.AUDIO_OUT ]
, opt_timeout = requestSessionTimeout) {
this.appId = appId;
this.capabilities = opt_capabilities;
this.dialRequest = null;
this.language = null;
this.requestSessionTimeout = opt_timeout;
}
};

View File

@@ -0,0 +1,17 @@
"use strict";
import { Capability } from "../enums";
import { requestSession } from "../../timeout";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.SessionRequest
export default class SessionRequest {
public language: string = null;
public dialRequest: any = null;
constructor (
public appId: string
, public capabilities = [
Capability.VIDEO_OUT
, Capability.AUDIO_OUT ]
, public requestSessionTimeout: number = requestSession) {}
};

View File

@@ -1,10 +1,10 @@
"use strict";
import * as timeouts from "../../timeout.js";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Timeout
export default class Timeout {
constructor () {
Object.assign(this, timeouts);
}
};
"use strict";
import * as timeouts from "../../timeout";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Timeout
export default class Timeout {
constructor () {
Object.assign(this, timeouts);
}
};

View File

@@ -1,13 +1,15 @@
"use strict";
import { VolumeControlType } from "../enums";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Volume
export default class Volume {
constructor (
opt_level = null
, opt_muted = null) {
this.level = opt_level;
this.muted = opt_muted;
}
};
"use strict";
import { VolumeControlType } from "../enums";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Volume
export default class Volume {
public controlType: string;
public stepInterval: number;
constructor (
public level: number = null
, public muted: boolean = null) {
}
};

View File

@@ -1,28 +0,0 @@
"use strict";
import ApiConfig from "./ApiConfig";
import DialRequest from "./DialRequest";
import Error_ from "./Error";
import Image_ from "./Image";
import Receiver from "./Receiver";
import ReceiverDisplayStatus from "./ReceiverDisplayStatus";
import SenderApplication from "./SenderApplication";
import Session from "./Session";
import SessionRequest from "./SessionRequest";
import Timeout from "./Timeout";
import Volume from "./Volume";
export default {
AutoJoinPolicy
, Capability
, DefaultActionPolicy
, DialAppState
, ErrorCode
, ReceiverAction
, ReceiverAvailability
, ReceiverType
, SenderPlatform
, SessionStatus
, VolumeControlType
};