diff --git a/app/src/bridge/Media.ts b/app/src/bridge/Media.ts index 80deda7..8246269 100644 --- a/app/src/bridge/Media.ts +++ b/app/src/bridge/Media.ts @@ -25,25 +25,14 @@ export interface UpdateMessageData { export default class Media { - private sessionId: number; - private mediaSessionId: number; - private referenceId: string; - private session: Session; private channel: Channel; - private sendMessageCallback: SendMessageCallback; constructor ( sessionId: number , mediaSessionId: number - , referenceId: string - , session: Session - , sendMessageCallback: SendMessageCallback) { - - this.sessionId = sessionId; - this.mediaSessionId = mediaSessionId; - this.referenceId = referenceId; - this.session = session; - this.sendMessageCallback = sendMessageCallback; + , private referenceId: string + , private session: Session + , private sendMessageCallback: SendMessageCallback) { this.session.createChannel(MEDIA_NAMESPACE); this.channel = this.session.channelMap.get(MEDIA_NAMESPACE)!; @@ -77,11 +66,6 @@ export default class Media { } this.sendMessage("shim:/media/update", messageData); - - // Update ID - if (status.mediaSessionId) { - this.mediaSessionId = status.mediaSessionId; - } } }); } diff --git a/app/src/bridge/Session.ts b/app/src/bridge/Session.ts index 8f67383..6dc7703 100644 --- a/app/src/bridge/Session.ts +++ b/app/src/bridge/Session.ts @@ -1,7 +1,5 @@ "use strict"; -import uuid from "uuid"; - import { Channel, Client } from "castv2"; import { Message diff --git a/app/src/bridge/StatusListener.ts b/app/src/bridge/StatusListener.ts index b0e3363..b924ea5 100644 --- a/app/src/bridge/StatusListener.ts +++ b/app/src/bridge/StatusListener.ts @@ -17,10 +17,7 @@ export default class StatusListener extends EventEmitter { private clientReceiver?: Channel; private clientHeartbeatIntervalId?: NodeJS.Timeout; - constructor ( - private host: string - , private port: number) { - + constructor (host: string, port: number) { super(); this.client = new Client(); diff --git a/app/src/bridge/index.ts b/app/src/bridge/index.ts index 58afafb..a2cd2a0 100755 --- a/app/src/bridge/index.ts +++ b/app/src/bridge/index.ts @@ -12,11 +12,9 @@ import Session from "./Session"; import StatusListener from "./StatusListener"; import { DecodeTransform - , EncodeTransform - , ResponseTransform } from "../transforms"; + , EncodeTransform } from "../transforms"; -import { MediaStatus - , ReceiverStatus } from "./castTypes"; +import { ReceiverStatus } from "./castTypes"; import { Message } from "./types"; @@ -146,7 +144,6 @@ async function handleMessage (message: Message) { switch (message.subject) { case "bridge:/getInfo": { - const extensionVersion = message.data; encodeTransform.write(__applicationVersion); } diff --git a/app/src/daemon/index.ts b/app/src/daemon/index.ts index d53e4ab..585ed23 100644 --- a/app/src/daemon/index.ts +++ b/app/src/daemon/index.ts @@ -3,7 +3,6 @@ import { spawn } from "child_process"; import { Readable } from "stream"; -import path from "path"; import WebSocket from "ws"; import { DecodeTransform diff --git a/common/tsconfig.json b/common/tsconfig.json index 4300ab1..8f8078e 100644 --- a/common/tsconfig.json +++ b/common/tsconfig.json @@ -3,6 +3,7 @@ "esModuleInterop": true , "module": "commonjs" , "noImplicitAny": true + , "noUnusedLocals": true , "removeComments": true , "resolveJsonModule": true , "target": "es6" diff --git a/ext/src/background/ShimManager.ts b/ext/src/background/ShimManager.ts index 3a55efc..960f868 100644 --- a/ext/src/background/ShimManager.ts +++ b/ext/src/background/ShimManager.ts @@ -4,9 +4,9 @@ import bridge from "../lib/bridge"; import loadSender from "../lib/loadSender"; import options from "../lib/options"; -import { TypedEventTarget } from "../lib/typedEvents"; import { Message } from "../types"; +import { getMediaTypesForPageUrl } from "../lib/utils"; import { ReceiverSelectorMediaType } from "./receiverSelector"; import ReceiverSelectorManager @@ -140,17 +140,15 @@ export default new class ShimManager { } case "main:/selectReceiverBegin": { - const allMediaTypes = - ReceiverSelectorMediaType.App - | ReceiverSelectorMediaType.Tab - | ReceiverSelectorMediaType.Screen - | ReceiverSelectorMediaType.File; + const contentTab = await browser.tabs.get(shim.contentTabId); + const availableMediaTypes = getMediaTypesForPageUrl( + contentTab.url); try { const selection = await ReceiverSelectorManager .getSelection( ReceiverSelectorMediaType.App - , allMediaTypes); + , availableMediaTypes); // Handle cancellation if (!selection) { diff --git a/ext/src/background/StatusManager.ts b/ext/src/background/StatusManager.ts index 9f816c3..5a4eaa0 100644 --- a/ext/src/background/StatusManager.ts +++ b/ext/src/background/StatusManager.ts @@ -1,7 +1,6 @@ "use strict"; import bridge from "../lib/bridge"; -import options from "../lib/options"; import { TypedEventTarget } from "../lib/typedEvents"; import { Message, Receiver, ReceiverStatus } from "../types"; diff --git a/ext/src/background/background.ts b/ext/src/background/background.ts index d478a66..ba995aa 100755 --- a/ext/src/background/background.ts +++ b/ext/src/background/background.ts @@ -2,12 +2,10 @@ import defaultOptions from "../defaultOptions"; import loadSender from "../lib/loadSender"; -import options, { Options } from "../lib/options"; +import options from "../lib/options"; import { getChromeUserAgent } from "../lib/userAgents"; -import { stringify } from "../lib/utils"; - -import { Message } from "../types"; +import { getMediaTypesForPageUrl, stringify } from "../lib/utils"; import { CAST_FRAMEWORK_LOADER_SCRIPT_URL , CAST_LOADER_SCRIPT_URL } from "../lib/endpoints"; @@ -45,7 +43,6 @@ browser.runtime.onInstalled.addListener(async details => { }); - function initBrowserAction () { browser.browserAction.disable(); @@ -68,7 +65,10 @@ function initBrowserAction () { * top-level frame. */ browser.browserAction.onClicked.addListener(async tab => { - const selection = await ReceiverSelectorManager.getSelection(); + const selection = await ReceiverSelectorManager.getSelection( + ReceiverSelectorMediaType.Tab + , getMediaTypesForPageUrl(tab.url) + & ~ReceiverSelectorMediaType.App); if (selection) { loadSender({ @@ -154,17 +154,14 @@ async function initMenus () { return; } + + const availableMediaTypes = getMediaTypesForPageUrl(info.pageUrl); + switch (info.menuItemId) { case menuIdMediaCast: { - const allMediaTypes = - ReceiverSelectorMediaType.App - | ReceiverSelectorMediaType.Tab - | ReceiverSelectorMediaType.Screen - | ReceiverSelectorMediaType.File; - const selection = await ReceiverSelectorManager.getSelection( ReceiverSelectorMediaType.App - , allMediaTypes); + , availableMediaTypes); // Selection cancelled if (!selection) { @@ -203,7 +200,9 @@ async function initMenus () { } case menuIdMirroringCast: { - const selection = await ReceiverSelectorManager.getSelection(); + const selection = await ReceiverSelectorManager.getSelection( + ReceiverSelectorMediaType.Tab + , availableMediaTypes & ~ReceiverSelectorMediaType.App); loadSender({ tabId: tab.id @@ -319,11 +318,9 @@ async function initMenus () { .reverse(); if (pathSegments.length) { - let index = 0; - - for (const pathSegment of pathSegments) { + for (let i = 0; i < pathSegments.length; i++) { const partialPath = pathSegments - .slice(index) + .slice(i) .reverse() .join("/"); @@ -336,8 +333,6 @@ async function initMenus () { whitelistChildMenuPatterns.set( partialPathMenuId, pattern); - - index++; } } } diff --git a/ext/src/background/receiverSelector/PopupReceiverSelector.ts b/ext/src/background/receiverSelector/PopupReceiverSelector.ts index b7a3590..1b6dd04 100644 --- a/ext/src/background/receiverSelector/PopupReceiverSelector.ts +++ b/ext/src/background/receiverSelector/PopupReceiverSelector.ts @@ -16,7 +16,6 @@ export default class PopupReceiverSelector implements ReceiverSelector { private windowId: number; - private openerWindowId: number; private messagePort: browser.runtime.Port; private messagePortDisconnected: boolean; @@ -102,7 +101,6 @@ export default class PopupReceiverSelector this._isOpen = true; this.windowId = popup.id; - this.openerWindowId = openerWindow.id; // Size/position not set correctly on creation (bug?) await browser.windows.update(this.windowId, { @@ -168,7 +166,6 @@ export default class PopupReceiverSelector // Cleanup this.windowId = null; - this.openerWindowId = null; this.messagePort = null; this.receivers = null; this.defaultMediaType = null; diff --git a/ext/src/background/receiverSelector/ReceiverSelectorManager.ts b/ext/src/background/receiverSelector/ReceiverSelectorManager.ts index c88ff8f..77cb951 100644 --- a/ext/src/background/receiverSelector/ReceiverSelectorManager.ts +++ b/ext/src/background/receiverSelector/ReceiverSelectorManager.ts @@ -83,6 +83,29 @@ async function getSelection ( }); + const opts = await options.getAll(); + + // Remove mirroring media types if mirroring is not enabled. + if (!opts.mirroringEnabled) { + availableMediaTypes &= ~( + ReceiverSelectorMediaType.Tab + | ReceiverSelectorMediaType.Screen); + } + + // Remove file media type if local media is not enabled + if (!opts.mediaEnabled || !opts.localMediaEnabled) { + availableMediaTypes &= ~ReceiverSelectorMediaType.File; + } + + if (!availableMediaTypes || availableMediaTypes + === ReceiverSelectorMediaType.File) { + console.error("fx_cast (Debug): No available media types"); + resolve(null); + + return; + } + + // Ensure status manager is initialized await StatusManager.init(); diff --git a/ext/src/lib/nativeMessaging.ts b/ext/src/lib/nativeMessaging.ts index 33ef4f7..c9a5efa 100644 --- a/ext/src/lib/nativeMessaging.ts +++ b/ext/src/lib/nativeMessaging.ts @@ -1,8 +1,5 @@ "use strict"; -import { Message } from "../types"; - - const WEBSOCKET_DAEMON_URL = "ws://localhost:9556"; diff --git a/ext/src/lib/options.ts b/ext/src/lib/options.ts index aea83d4..6c7da21 100644 --- a/ext/src/lib/options.ts +++ b/ext/src/lib/options.ts @@ -3,7 +3,6 @@ import defaultOptions from "../defaultOptions"; import { ReceiverSelectorType } from "../background/receiverSelector"; -import { Message } from "../types"; import { TypedEventTarget } from "./typedEvents"; diff --git a/ext/src/lib/utils.ts b/ext/src/lib/utils.ts index e9b40c5..810584d 100644 --- a/ext/src/lib/utils.ts +++ b/ext/src/lib/utils.ts @@ -1,5 +1,8 @@ "use strict"; +import { ReceiverSelectorMediaType } from "../background/receiverSelector"; + + export function getNextEllipsis (ellipsis: string): string { /* tslint:disable:curly */ if (ellipsis === "") return "."; @@ -29,6 +32,28 @@ export function stringify ( return formattedString; } +export function getMediaTypesForPageUrl ( + pageUrl: string): ReceiverSelectorMediaType { + + let availableMediaTypes = + ReceiverSelectorMediaType.App + | ReceiverSelectorMediaType.Tab + | ReceiverSelectorMediaType.Screen + | ReceiverSelectorMediaType.File; + + /** + * Remove "Screen" option when on an insecure origin as + * MediaDevices.getDisplayMedia will not exist (and legacy + * MediaDevices.getUserMedia mediaSource constraint will + * fail). + */ + if (!pageUrl.startsWith("https://")) { + availableMediaTypes &= ~ReceiverSelectorMediaType.Screen; + } + + return availableMediaTypes; +} + interface WindowCenteredProps { width: number; diff --git a/ext/src/senders/mirroringCast.ts b/ext/src/senders/mirroringCast.ts index a581d98..baa015d 100644 --- a/ext/src/senders/mirroringCast.ts +++ b/ext/src/senders/mirroringCast.ts @@ -21,22 +21,6 @@ let session: cast.Session; let wasSessionRequested = false; let peerConnection: RTCPeerConnection; -let drawWindowIntervalId: number; - - -let availableMediaTypes = - ReceiverSelectorMediaType.Screen - | ReceiverSelectorMediaType.Tab; - -/** - * Remove "Screen" option when on an insecure origin as - * MediaDevices.getDisplayMedia will not exist (and legacy - * MediaDevices.getUserMedia mediaSource constraint will - * fail). - */ -if (typeof navigator.mediaDevices.getDisplayMedia === "undefined") { - availableMediaTypes &= ~ReceiverSelectorMediaType.Screen; -} /** @@ -124,7 +108,7 @@ async function onRequestSessionSuccess (newSession: cast.Session) { } - drawWindowIntervalId = window.setInterval(drawWindow, 1000 / 30); + window.setInterval(drawWindow, 1000 / 30); /** * Capture video stream from canvas and feed into the RTC diff --git a/ext/src/shim/cast/classes/Session.ts b/ext/src/shim/cast/classes/Session.ts index 5c8132d..9c2c0b4 100755 --- a/ext/src/shim/cast/classes/Session.ts +++ b/ext/src/shim/cast/classes/Session.ts @@ -13,8 +13,7 @@ import Media from "../media/classes/Media"; import QueueLoadRequest from "../media/classes/QueueLoadRequest"; import { ErrorCode - , SessionStatus - , VolumeControlType } from "../enums"; + , SessionStatus } from "../enums"; import { RepeatMode } from "../media/enums"; @@ -22,8 +21,7 @@ import { ListenerObject , onMessage , sendMessageResponse } from "../../eventMessageChannel"; -import { Callbacks - , CallbacksMap +import { CallbacksMap , ErrorCallback , LoadSuccessCallback , MediaListener @@ -51,7 +49,7 @@ export default class Session { public media: Media[]; public namespaces: Array<{ name: "string" }>; public senderApps: SenderApplication[]; - public status: string; + public status: SessionStatus; public statusText: string; public transportId: string; diff --git a/ext/src/shim/cast/classes/Volume.ts b/ext/src/shim/cast/classes/Volume.ts index a5f8b0c..00e67cb 100755 --- a/ext/src/shim/cast/classes/Volume.ts +++ b/ext/src/shim/cast/classes/Volume.ts @@ -5,7 +5,7 @@ import { VolumeControlType } from "../enums"; // https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Volume export default class Volume { - public controlType: string; + public controlType: VolumeControlType; public stepInterval: number; constructor ( diff --git a/ext/src/shim/cast/enums.ts b/ext/src/shim/cast/enums.ts index 7a3c24b..e19e826 100755 --- a/ext/src/shim/cast/enums.ts +++ b/ext/src/shim/cast/enums.ts @@ -1,75 +1,75 @@ "use strict"; -export const AutoJoinPolicy = { - TAB_AND_ORIGIN_SCOPED: "tab_and_origin_scoped" - , ORIGIN_SCOPED: "origin_scoped" - , PAGE_SCOPED: "page_scoped" - , CUSTOM_CONTROLLER_SCOPED: "custom_controller_scoped" -}; +export enum AutoJoinPolicy { + TAB_AND_ORIGIN_SCOPED = "tab_and_origin_scoped" + , ORIGIN_SCOPED = "origin_scoped" + , PAGE_SCOPED = "page_scoped" + , CUSTOM_CONTROLLER_SCOPED = "custom_controller_scoped" +} -export const Capability = { - VIDEO_OUT: "video_out" - , AUDIO_OUT: "audio_out" - , VIDEO_IN: "video_in" - , AUDIO_IN: "audio_in" - , MULTIZONE_GROUP: "multizone_group" -}; +export enum Capability { + VIDEO_OUT = "video_out" + , AUDIO_OUT = "audio_out" + , VIDEO_IN = "video_in" + , AUDIO_IN = "audio_in" + , MULTIZONE_GROUP = "multizone_group" +} -export const DefaultActionPolicy = { - CREATE_SESSION: "create_session" - , CAST_THIS_TAB: "cast_this_tab" -}; +export enum DefaultActionPolicy { + CREATE_SESSION = "create_session" + , CAST_THIS_TAB = "cast_this_tab" +} -export const DialAppState = { - RUNNING: "running" - , STOPPED: "stopped" - , ERROR: "error" -}; +export enum DialAppState { + RUNNING = "running" + , STOPPED = "stopped" + , ERROR = "error" +} -export const ErrorCode = { - CANCEL: "cancel" - , TIMEOUT: "timeout" - , API_NOT_INITIALIZED: "api_not_initialized" - , INVALID_PARAMETER: "invalid_parameter" - , EXTENSION_NOT_COMPATIBLE: "extension_not_compatible" - , EXTENSION_MISSING: "extension_missing" - , RECEIVER_UNAVAILABLE: "receiver_unavailable" - , SESSION_ERROR: "session_error" - , CHANNEL_ERROR: "channel_error" - , LOAD_MEDIA_FAILED: "load_media_failed" -}; +export enum ErrorCode { + CANCEL = "cancel" + , TIMEOUT = "timeout" + , API_NOT_INITIALIZED = "api_not_initialized" + , INVALID_PARAMETER = "invalid_parameter" + , EXTENSION_NOT_COMPATIBLE = "extension_not_compatible" + , EXTENSION_MISSING = "extension_missing" + , RECEIVER_UNAVAILABLE = "receiver_unavailable" + , SESSION_ERROR = "session_error" + , CHANNEL_ERROR = "channel_error" + , LOAD_MEDIA_FAILED = "load_media_failed" +} -export const ReceiverAction = { - CAST: "cast" - , STOP: "stop" -}; +export enum ReceiverAction { + CAST = "cast" + , STOP = "stop" +} -export const ReceiverAvailability = { - AVAILABLE: "available" - , UNAVAILABLE: "unavailable" -}; +export enum ReceiverAvailability { + AVAILABLE = "available" + , UNAVAILABLE = "unavailable" +} -export const ReceiverType = { - CAST: "cast" - , DIAL: "dial" - , HANGOUT: "hangout" - , CUSTOM: "custom" -}; +export enum ReceiverType { + CAST = "cast" + , DIAL = "dial" + , HANGOUT = "hangout" + , CUSTOM = "custom" +} -export const SenderPlatform = { - CHROME: "chrome" - , IOS: "ios" - , ANDROID: "android" -}; +export enum SenderPlatform { + CHROME = "chrome" + , IOS = "ios" + , ANDROID = "android" +} -export const SessionStatus = { - CONNECTED: "connected" - , DISCONNECTED: "disconnected" - , STOPPED: "stopped" -}; +export enum SessionStatus { + CONNECTED = "connected" + , DISCONNECTED = "disconnected" + , STOPPED = "stopped" +} -export const VolumeControlType = { - ATTENUATION: "attenuation" - , FIXED: "fixed" - , MASTER: "master" -}; +export enum VolumeControlType { + ATTENUATION = "attenuation" + , FIXED = "fixed" + , MASTER = "master" +} diff --git a/ext/src/shim/cast/index.ts b/ext/src/shim/cast/index.ts index 1197347..49ba2ef 100755 --- a/ext/src/shim/cast/index.ts +++ b/ext/src/shim/cast/index.ts @@ -26,8 +26,6 @@ import { AutoJoinPolicy import * as media from "./media"; - -import { ReceiverSelectorMediaType } from "../../background/receiverSelector"; import { Receiver } from "../../types"; import { onMessage, sendMessageResponse } from "../eventMessageChannel"; diff --git a/ext/src/shim/cast/media/classes/Media.ts b/ext/src/shim/cast/media/classes/Media.ts index 56b9d3f..071f883 100644 --- a/ext/src/shim/cast/media/classes/Media.ts +++ b/ext/src/shim/cast/media/classes/Media.ts @@ -25,8 +25,7 @@ import { ErrorCode } from "../../enums"; import { onMessage, sendMessageResponse } from "../../../eventMessageChannel"; -import { Callbacks - , CallbacksMap +import { CallbacksMap , ErrorCallback , SuccessCallback , UpdateListener } from "../../../types"; diff --git a/ext/src/shim/cast/media/enums.ts b/ext/src/shim/cast/media/enums.ts index dd07412..bc5219d 100755 --- a/ext/src/shim/cast/media/enums.ts +++ b/ext/src/shim/cast/media/enums.ts @@ -1,93 +1,93 @@ "use strict"; -export const IdleReason = { - CANCELLED: "CANCELLED" - , INTERRUPTED: "INTERRUPTED" - , FINISHED: "FINISHED" - , ERROR: "ERROR" -}; +export enum IdleReason { + CANCELLED = "CANCELLED" + , INTERRUPTED = "INTERRUPTED" + , FINISHED = "FINISHED" + , ERROR = "ERROR" +} -export const MediaCommand = { - PAUSE: "pause" - , SEEK: "seek" - , STREAM_VOLUME: "stream_volume" - , STREAM_MUTE: "stream_mute" -}; +export enum MediaCommand { + PAUSE = "pause" + , SEEK = "seek" + , STREAM_VOLUME = "stream_volume" + , STREAM_MUTE = "stream_mute" +} -export const MetadataType = { - GENERIC: 0 - , MOVIE: 1 - , TV_SHOW: 2 - , MUSIC_TRACK: 3 - , PHOTO: 4 -}; +export enum MetadataType { + GENERIC + , MOVIE + , TV_SHOW + , MUSIC_TRACK + , PHOTO +} -export const PlayerState = { - IDLE: "IDLE" - , PLAYING: "PLAYING" - , PAUSED: "PAUSED" - , BUFFERING: "BUFFERING" -}; +export enum PlayerState { + IDLE = "IDLE" + , PLAYING = "PLAYING" + , PAUSED = "PAUSED" + , BUFFERING = "BUFFERING" +} -export const RepeatMode = { - OFF: "REPEAT_OFF" - , ALL: "REPEAT_ALL" - , SINGLE: "REPEAT_SINGLE" - , ALL_AND_SHUFFLE: "REPEAT_ALL_AND_SHUFFLE" -}; +export enum RepeatMode { + OFF = "REPEAT_OFF" + , ALL = "REPEAT_ALL" + , SINGLE = "REPEAT_SINGLE" + , ALL_AND_SHUFFLE = "REPEAT_ALL_AND_SHUFFLE" +} -export const ResumeState = { - PLAYBACK_START: "PLAYBACK_START" - , PLAYBACK_PAUSE: "PLAYBACK_PAUSE" -}; +export enum ResumeState { + PLAYBACK_START = "PLAYBACK_START" + , PLAYBACK_PAUSE = "PLAYBACK_PAUSE" +} -export const StreamType = { - BUFFERED: "BUFFERED" - , LIVE: "LIVE" - , OTHER: "OTHER" -}; +export enum StreamType { + BUFFERED = "BUFFERED" + , LIVE = "LIVE" + , OTHER = "OTHER" +} -export const TextTrackEdgeType = { - NONE: "NONE" - , OUTLINE: "OUTLINE" - , DROP_SHADOW: "DROP_SHADOW" - , RAISED: "RAISED" - , DEPRESSED: "DEPRESSED" -}; +export enum TextTrackEdgeType { + NONE = "NONE" + , OUTLINE = "OUTLINE" + , DROP_SHADOW = "DROP_SHADOW" + , RAISED = "RAISED" + , DEPRESSED = "DEPRESSED" +} -export const TextTrackFontGenericFamily = { - SANS_SERIF: "SANS_SERIF" - , MONOSPACED_SANS_SERIF: "MONOSPACED_SANS_SERIF" - , SERIF: "SERIF" - , MONOSPACED_SERIF: "MONOSPACED_SERIF" - , CASUAL: "CASUAL" - , CURSIVE: "CURSIVE" - , SMALL_CAPITALS: "SMALL_CAPITALS" -}; +export enum TextTrackFontGenericFamily { + SANS_SERIF = "SANS_SERIF" + , MONOSPACED_SANS_SERIF = "MONOSPACED_SANS_SERIF" + , SERIF = "SERIF" + , MONOSPACED_SERIF = "MONOSPACED_SERIF" + , CASUAL = "CASUAL" + , CURSIVE = "CURSIVE" + , SMALL_CAPITALS = "SMALL_CAPITALS" +} -export const TextTrackFontStyle = { - NORMAL: "NORMAL" - , BOLD: "BOLD" - , BOLD_ITALIC: "BOLD_ITALIC" - , ITALIC: "ITALIC" -}; +export enum TextTrackFontStyle { + NORMAL = "NORMAL" + , BOLD = "BOLD" + , BOLD_ITALIC = "BOLD_ITALIC" + , ITALIC = "ITALIC" +} -export const TextTrackType = { - SUBTITLES: "SUBTITLES" - , CAPTIONS: "CAPTIONS" - , DESCRIPTIONS: "DESCRIPTIONS" - , CHAPTERS: "CHAPTERS" - , METADATA: "METADATA" -}; +export enum TextTrackType { + SUBTITLES = "SUBTITLES" + , CAPTIONS = "CAPTIONS" + , DESCRIPTIONS = "DESCRIPTIONS" + , CHAPTERS = "CHAPTERS" + , METADATA = "METADATA" +} -export const TextTrackWindowType = { - NONE: "NONE" - , NORMAL: "NORMAL" - , ROUNDED_CORNERS: "ROUNDED_CORNERS" -}; +export enum TextTrackWindowType { + NONE = "NONE" + , NORMAL = "NORMAL" + , ROUNDED_CORNERS = "ROUNDED_CORNERS" +} -export const TrackType = { - TEXT: "TEXT" - , AUDIO: "AUDIO" - , VIDEO: "VIDEO" -}; +export enum TrackType { + TEXT = "TEXT" + , AUDIO = "AUDIO" + , VIDEO = "VIDEO" +} diff --git a/ext/src/shim/framework/classes/CastContext.ts b/ext/src/shim/framework/classes/CastContext.ts index 674a28a..8abf7a5 100644 --- a/ext/src/shim/framework/classes/CastContext.ts +++ b/ext/src/shim/framework/classes/CastContext.ts @@ -1,11 +1,7 @@ "use strict"; -import * as cast from "../../cast"; - import CastOptions from "./CastOptions"; import CastSession from "./CastSession"; -import CastStateEventData from "./CastStateEventData"; -import SessionStateEventData from "./SessionStateEventData"; export default class CastContext extends EventTarget { diff --git a/ext/src/shim/framework/classes/CastSession.ts b/ext/src/shim/framework/classes/CastSession.ts index 2ff35ad..4a1e1a9 100644 --- a/ext/src/shim/framework/classes/CastSession.ts +++ b/ext/src/shim/framework/classes/CastSession.ts @@ -2,12 +2,7 @@ import * as cast from "../../cast"; -import ActiveInputStateEventData from "./ActiveInputStateEventData"; import ApplicationMetadata from "./ApplicationMetadata"; -import ApplicationMetadataEventData from "./ApplicationMetadataEventData"; -import ApplicationStatusEventData from "./ApplicationStatusEventData"; -import MediaSessionEventData from "./MediaSessionEventData"; -import VolumeEventData from "./VolumeEventData"; type MessageListener = (namespace: string, message: string) => void; diff --git a/ext/src/shim/framework/classes/RemotePlayerController.ts b/ext/src/shim/framework/classes/RemotePlayerController.ts index b8314de..ee321a4 100644 --- a/ext/src/shim/framework/classes/RemotePlayerController.ts +++ b/ext/src/shim/framework/classes/RemotePlayerController.ts @@ -1,7 +1,6 @@ "use strict"; import RemotePlayer from "./RemotePlayer"; -import RemotePlayerChangedEvent from "./RemotePlayerChangedEvent"; export default class RemotePlayerController extends EventTarget { diff --git a/ext/src/shim/framework/enums.ts b/ext/src/shim/framework/enums.ts index c5ee334..2989cb3 100644 --- a/ext/src/shim/framework/enums.ts +++ b/ext/src/shim/framework/enums.ts @@ -1,64 +1,64 @@ "use strict"; -export const ActiveInputState = { - ACTIVE_INPUT_STATE_UNKNOWN: -1 - , ACTIVE_INPUT_STATE_NO: 0 - , ACTIVE_INPUT_YES: 1 -}; +export enum ActiveInputState { + ACTIVE_INPUT_STATE_UNKNOWN = -1 + , ACTIVE_INPUT_STATE_NO = 0 + , ACTIVE_INPUT_YES = 1 +} -export const CastContextEventType = { - CAST_STATE_CHANGED: "caststatechanged" - , SESSION_STATE_CHANGED: "sessionstatechanged" -}; +export enum CastContextEventType { + CAST_STATE_CHANGED = "caststatechanged" + , SESSION_STATE_CHANGED = "sessionstatechanged" +} -export const CastState = { - NO_DEVICES_AVAILABLE: "NO_DEVICES_AVAILABLE" - , NOT_CONNECTED: "NOT_CONNECTED" - , CONNECTING: "CONNECTING" - , CONNECTED: "CONNECTED" -}; +export enum CastState { + NO_DEVICES_AVAILABLE = "NO_DEVICES_AVAILABLE" + , NOT_CONNECTED = "NOT_CONNECTED" + , CONNECTING = "CONNECTING" + , CONNECTED = "CONNECTED" +} -export const LoggerLevel = { - DEBUG: 0 - , INFO: 800 - , WARNING: 900 - , ERROR: 1000 - , NONE: 1500 -}; +export enum LoggerLevel { + DEBUG = 0 + , INFO = 800 + , WARNING = 900 + , ERROR = 1000 + , NONE = 1500 +} -export const RemotePlayerEventType = { - ANY_CHANGE: "anyChanged" - , IS_CONNECTED_CHANGE: "isConnectedChanged" - , IS_MEDIA_LOADED_CHANGED: "isMediaLoadedChanged" - , DURATION_CHANGED: "durationChanged" - , CURRENT_TIME_CHANGED: "currentTimeChanged" - , IS_PAUSED_CHANGED: "isPausedChanged" - , VOLUME_LEVEL_CHANGED: "volumeLevelChanged" - , CAN_CONTROL_VOLUME_CHANGED: "canControlVolumeChanged" - , IS_MUTED_CHANGED: "isMutedChanged" - , CAN_PAUSE_CHANGED: "canPauseChanged" - , CAN_SEEK_CHANGED: "canSeekChanged" - , DISPLAY_NAME_CHANGED: "displayNameChanged" - , STATUS_TEXT_CHANGED: "statusTextChanged" - , MEDIA_INFO_CHANGED: "mediaInfoChanged" - , IMAGE_URL_CHANGED: "imageUrlChanged" - , PLAYER_STATE_CHANGED: "playerStateChanged" -}; +export enum RemotePlayerEventType { + ANY_CHANGE = "anyChanged" + , IS_CONNECTED_CHANGE = "isConnectedChanged" + , IS_MEDIA_LOADED_CHANGED = "isMediaLoadedChanged" + , DURATION_CHANGED = "durationChanged" + , CURRENT_TIME_CHANGED = "currentTimeChanged" + , IS_PAUSED_CHANGED = "isPausedChanged" + , VOLUME_LEVEL_CHANGED = "volumeLevelChanged" + , CAN_CONTROL_VOLUME_CHANGED = "canControlVolumeChanged" + , IS_MUTED_CHANGED = "isMutedChanged" + , CAN_PAUSE_CHANGED = "canPauseChanged" + , CAN_SEEK_CHANGED = "canSeekChanged" + , DISPLAY_NAME_CHANGED = "displayNameChanged" + , STATUS_TEXT_CHANGED = "statusTextChanged" + , MEDIA_INFO_CHANGED = "mediaInfoChanged" + , IMAGE_URL_CHANGED = "imageUrlChanged" + , PLAYER_STATE_CHANGED = "playerStateChanged" +} -export const SessionEventType = { - APPLICATION_STATUS_CHANGED: "applicationstatuschanged" - , APPLICATION_METADATA_CHANGED: "applicationmetadatachanged" - , ACTIVE_INPUT_STATE_CHANGED: "activeinputstatechanged" - , VOLUME_CHANGED: "volumechanged" - , MEDIA_SESSION: "mediasession" -}; +export enum SessionEventType { + APPLICATION_STATUS_CHANGED = "applicationstatuschanged" + , APPLICATION_METADATA_CHANGED = "applicationmetadatachanged" + , ACTIVE_INPUT_STATE_CHANGED = "activeinputstatechanged" + , VOLUME_CHANGED = "volumechanged" + , MEDIA_SESSION = "mediasession" +} -export const SessionState = { - NO_SESSION: "NO_SESSION" - , SESSION_STARTING: "SESSION_STARTING" - , SESSION_STARTED: "SESSION_STARTED" - , SESSION_START_FAILED: "SESSION_START_FAILED" - , SESSION_ENDING: "SESSION_ENDING" - , SESSION_ENDED: "SESSION_ENDED" - , SESSION_RESUMED: "SESSION_RESUMED" -}; +export enum SessionState { + NO_SESSION = "NO_SESSION" + , SESSION_STARTING = "SESSION_STARTING" + , SESSION_STARTED = "SESSION_STARTED" + , SESSION_START_FAILED = "SESSION_START_FAILED" + , SESSION_ENDING = "SESSION_ENDING" + , SESSION_ENDED = "SESSION_ENDED" + , SESSION_RESUMED = "SESSION_RESUMED" +} diff --git a/ext/src/shim/framework/index.ts b/ext/src/shim/framework/index.ts index e50a2ed..fc13b3f 100644 --- a/ext/src/shim/framework/index.ts +++ b/ext/src/shim/framework/index.ts @@ -1,6 +1,5 @@ "use strict"; -import * as cast from "../cast"; import ActiveInputStateEventData from "./classes/ActiveInputStateEventData"; import ApplicationMetadata from "./classes/ApplicationMetadata"; @@ -28,8 +27,6 @@ import { ActiveInputState import GoogleCastLauncher from "./GoogleCastLauncher"; -import { onMessage } from "../eventMessageChannel"; - export default { // Enums diff --git a/ext/src/ui/options/Bridge.tsx b/ext/src/ui/options/Bridge.tsx index e37d5c4..245476d 100644 --- a/ext/src/ui/options/Bridge.tsx +++ b/ext/src/ui/options/Bridge.tsx @@ -4,55 +4,12 @@ import React, { Component } from "react"; import semver from "semver"; -import { getNextEllipsis - , getWindowCenteredProps } from "../../lib/utils"; - import { BridgeInfo } from "../../lib/bridge"; +import { getNextEllipsis } from "../../lib/utils"; + const _ = browser.i18n.getMessage; -const ENDPOINT_URL = "https://api.github.com/repos/hensm/fx_cast/releases/latest"; - - -async function downloadApp (info: any, platform: string) { - const download = browser.downloads.download({ - filename: info[platform].name - , url: info[platform].url - }); -} - - -interface BridgeDownloadsProps { - info: any; -} - -const BridgeDownloads = (props: BridgeDownloadsProps) => ( -
- - - -
- - -
-
-); - interface BridgeStatsProps { info: BridgeInfo; @@ -236,7 +193,7 @@ export default class Bridge extends Component { })); }, 500); - fetch(ENDPOINT_URL) + fetch("https://api.github.com/repos/hensm/fx_cast/releases/latest") .then(res => { window.clearTimeout(timeout); return res.json(); diff --git a/ext/src/ui/options/index.tsx b/ext/src/ui/options/index.tsx index 7dc3c5e..6bf09a1 100644 --- a/ext/src/ui/options/index.tsx +++ b/ext/src/ui/options/index.tsx @@ -400,19 +400,6 @@ class OptionsApp extends Component<{}, OptionsAppState> { private getWhitelistItemPatternError (info: string): string { return _("optionsUserAgentWhitelistInvalidMatchPattern", info); } - - private async updateBridgeInfo () { - this.setState({ - bridgeLoading: true - }); - - const bridgeInfo = await bridge.getInfo(); - - this.setState({ - bridgeInfo - , bridgeLoading: false - }); - } }