UNPKG

nativescript-cast-ns6-beta

Version:

NativeScript Chromecast Plugin.

344 lines 16.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var utils_1 = require("tns-core-modules/utils/utils"); var color_1 = require("tns-core-modules/color"); var cast_common_1 = require("./cast.common"); var cast_types_1 = require("./cast.types"); var camelCase = require('lodash/fp/camelCase'); var upperFirst = require('lodash/fp/upperFirst'); var SessionManagerListenerImpl = (function (_super) { __extends(SessionManagerListenerImpl, _super); function SessionManagerListenerImpl() { var _this = _super.call(this) || this; return global.__native(_this); } SessionManagerListenerImpl.prototype.sessionManagerWillStartSession = function (sessionManager, session) { this.owner.sendEvent(cast_common_1.CastButtonBase.castEvent, { eventName: cast_types_1.CastEvent.onSessionStarting, session: session, ios: this.owner.nativeView }); }; SessionManagerListenerImpl.prototype.sessionManagerDidStartSession = function (sessionManager, session) { this.owner.sendEvent(cast_common_1.CastButtonBase.castEvent, { eventName: cast_types_1.CastEvent.onSessionStarted, session: session, ios: this.owner.nativeView }); }; SessionManagerListenerImpl.prototype.sessionManagerWillStartCastSession = function (sessionManager, session) { }; SessionManagerListenerImpl.prototype.sessionManagerDidStartCastSession = function (sessionManager, session) { }; SessionManagerListenerImpl.prototype.sessionManagerWillEndSession = function (sessionManager, session) { this.owner.sendEvent(cast_common_1.CastButtonBase.castEvent, { eventName: cast_types_1.CastEvent.onSessionEnding, session: session, ios: this.owner.nativeView }); }; SessionManagerListenerImpl.prototype.sessionManagerDidEndSessionWithError = function (sessionManager, session, error) { this.owner.sendEvent(cast_common_1.CastButtonBase.castEvent, { eventName: cast_types_1.CastEvent.onSessionEnded, session: session, error: error, ios: this.owner.nativeView }); }; SessionManagerListenerImpl.prototype.sessionManagerWillEndCastSession = function (sessionManager, session) { }; SessionManagerListenerImpl.prototype.sessionManagerDidEndCastSessionWithError = function (sessionManager, session, error) { console.log('didEndCastSession'); }; SessionManagerListenerImpl.prototype.sessionManagerDidFailToStartSessionWithError = function (sessionManager, session, error) { this.owner.sendEvent(cast_common_1.CastButtonBase.castEvent, { eventName: cast_types_1.CastEvent.onSessionStartFailed, session: session, error: error, ios: this.owner.nativeView }); }; SessionManagerListenerImpl.prototype.sessionManagerDidFailToStartCastSessionWithError = function (sessionManager, session, error) { }; SessionManagerListenerImpl.prototype.sessionManagerDidSuspendSessionWithReason = function (sessionManager, session, reason) { this.owner.sendEvent(cast_common_1.CastButtonBase.castEvent, { eventName: cast_types_1.CastEvent.onSessionSuspended, session: session, reason: reason, ios: this.owner.nativeView }); }; SessionManagerListenerImpl.prototype.sessionManagerDidSuspendCastSessionWithReason = function (sessionManager, session, reason) { }; SessionManagerListenerImpl.prototype.sessionManagerWillResumeSession = function (sessionManager, session) { this.owner.sendEvent(cast_common_1.CastButtonBase.castEvent, { eventName: cast_types_1.CastEvent.onSessionResuming, session: session, ios: this.owner.nativeView }); }; SessionManagerListenerImpl.prototype.sessionManagerDidResumeSession = function (sessionManager, session) { this.owner.sendEvent(cast_common_1.CastButtonBase.castEvent, { eventName: cast_types_1.CastEvent.onSessionResumed, session: session, ios: this.owner.nativeView }); }; SessionManagerListenerImpl.prototype.sessionManagerWillResumeCastSession = function (sessionManager, session) { }; SessionManagerListenerImpl.prototype.sessionManagerDidResumeCastSession = function (sessionManager, session) { }; SessionManagerListenerImpl.prototype.sessionManagerSessionDidUpdateDevice = function (sessionManager, session, device) { this.owner.sendEvent(cast_common_1.CastButtonBase.castEvent, { eventName: cast_types_1.CastEvent.onDeviceChanged, session: session, device: device, ios: this.owner.nativeView }); }; SessionManagerListenerImpl.prototype.sessionManagerSessionDidReceiveDeviceVolumeMuted = function (sessionManager, session, volume) { this.owner.sendEvent(cast_common_1.CastButtonBase.castEvent, { eventName: cast_types_1.CastEvent.onDeviceVolumeChanged, session: session, volume: volume, ios: this.owner.nativeView }); }; SessionManagerListenerImpl.prototype.sessionManagerCastSessionDidReceiveDeviceVolumeMuted = function (sessionManager, session, volume) { }; SessionManagerListenerImpl.prototype.sessionManagerSessionDidReceiveDeviceStatus = function (sessionManager, session, statusText) { }; SessionManagerListenerImpl.prototype.sessionManagerCastSessionDidReceiveDeviceStatus = function (sessionManager, session, statusText) { }; SessionManagerListenerImpl.prototype.sessionManagerDidUpdateDefaultSessionOptionsForDeviceCategory = function (sessionManager, category) { }; SessionManagerListenerImpl.ObjCProtocols = [GCKSessionManagerListener]; return SessionManagerListenerImpl; }(NSObject)); var RemoteMediaClientListenerImpl = (function (_super) { __extends(RemoteMediaClientListenerImpl, _super); function RemoteMediaClientListenerImpl() { var _this = _super.call(this) || this; return global.__native(_this); } RemoteMediaClientListenerImpl.prototype.remoteMediaClientDidStartMediaSessionWithID = function (client, sessionId) { }; RemoteMediaClientListenerImpl.prototype.remoteMediaClientDidUpdateMediaStatus = function (client, mediaStatus) { var info = null; var status = null; if (mediaStatus) { status = this.toCastMediaStatus(mediaStatus); var mediaInfo = mediaStatus.mediaInformation; if (mediaInfo) { info = this.owner.convertMediaInfo(mediaInfo); } } this.owner.sendEvent(cast_common_1.CastButtonBase.castEvent, { eventName: cast_types_1.CastEvent.onMediaStatusChanged, status: status, info: info, ios: this.owner.nativeView }); }; RemoteMediaClientListenerImpl.prototype.remoteMediaClientDidUpdateMediaMetadata = function (client, mediaMetaData) { }; RemoteMediaClientListenerImpl.prototype.remoteMediaClientDidUpdateQueue = function (client) { }; RemoteMediaClientListenerImpl.prototype.remoteMediaClientDidUpdatePreloadStatus = function (client) { }; RemoteMediaClientListenerImpl.prototype.didReceiveQueueItemIDs = function (queueItems) { }; RemoteMediaClientListenerImpl.prototype.didInsertQueueItemsWithIDs = function (queueItems) { }; RemoteMediaClientListenerImpl.prototype.didUpdateQueueItemsWithIDs = function (queueItems) { }; RemoteMediaClientListenerImpl.prototype.didRemoveQueueItemsWithIDs = function (queueItems) { }; RemoteMediaClientListenerImpl.prototype.didReceiveQueueItems = function (items) { }; RemoteMediaClientListenerImpl.prototype.toCastMediaStatus = function (mediaStatus) { var playerState = cast_types_1.PlayerState.UNKNOWN; switch (mediaStatus.playerState) { case GCKMediaPlayerStateIdle: playerState = cast_types_1.PlayerState.IDLE; break; case GCKMediaPlayerStatePlaying: playerState = cast_types_1.PlayerState.PLAYING; break; case GCKMediaPlayerStatePaused: playerState = cast_types_1.PlayerState.PAUSED; break; case GCKMediaPlayerStateBuffering: playerState = cast_types_1.PlayerState.BUFFERING; break; case GCKMediaPlayerStateLoading: playerState = cast_types_1.PlayerState.LOADING; break; } var activeTrackIds = mediaStatus.activeTrackIDs ? utils_1.ios.collections.nsArrayToJSArray(mediaStatus.activeTrackIDs).map(function (trackId) { return +trackId; }) : []; return { activeTrackIds: activeTrackIds, playerState: playerState, }; }; RemoteMediaClientListenerImpl.ObjCProtocols = [GCKRemoteMediaClientListener]; return RemoteMediaClientListenerImpl; }(NSObject)); var CastButton = (function (_super) { __extends(CastButton, _super); function CastButton() { return _super.call(this) || this; } CastButton.prototype.createNativeView = function () { var button = GCKUICastButton.alloc().initWithFrame(CGRectMake(0, 0, 24, 24)); this.mCastContext = GCKCastContext.sharedInstance(); this.mCastContext.useDefaultExpandedMediaControls = true; this.mSessionManager = this.mCastContext.sessionManager; this.mSessionManagerListener = new SessionManagerListenerImpl; this.mSessionManagerListener.owner = this; this.mRemoteMediaClientListener = new RemoteMediaClientListenerImpl; this.mRemoteMediaClientListener.owner = this; this.addSessionManagerListener(); this.CastDevice = GCKDevice; return button; }; CastButton.prototype.getNativeView = function () { return this.nativeView; }; CastButton.prototype.initNativeView = function () { this.nativeView.owner = this; _super.prototype.initNativeView.call(this); }; CastButton.prototype.disposeNativeView = function () { this.nativeView.owner = null; this.removeSessionManagerListener(); _super.prototype.disposeNativeView.call(this); }; CastButton.prototype.addSessionManagerListener = function () { this.mSessionManager.addListener(this.mSessionManagerListener); }; CastButton.prototype.removeSessionManagerListener = function () { this.mSessionManager.removeListener(this.mSessionManagerListener); }; CastButton.prototype.getRemoteMediaClient = function () { return this.mSessionManager.currentCastSession.remoteMediaClient; }; CastButton.prototype.loadMedia = function (mediaInfo, autoplay, position) { if (autoplay === void 0) { autoplay = true; } var metadataPrefix = 'kGCKMetadataKey'; var metadata; if (mediaInfo.metadata) { var metadataType = typeof mediaInfo.metadata.metadataType === 'string' ? this.metadataTypeStringToNumber(mediaInfo.metadata.metadataType) : mediaInfo.metadata.metadataType; metadata = GCKMediaMetadata.alloc().initWithMetadataType(metadataType); Object.keys(mediaInfo.metadata).forEach(function (key) { if (cast_common_1.CastButtonBase.validMetadataKeys.indexOf(key) > -1) { var fixedKey = metadataPrefix + upperFirst(key); var value = mediaInfo.metadata[key]; metadata.setStringForKey(value, fixedKey); } }); if (mediaInfo.metadata.images && mediaInfo.metadata.images.length) { mediaInfo.metadata.images.forEach(function (img) { var uri = NSURL.URLWithString(img.url); metadata.addImage(GCKImage.alloc().initWithURLWidthHeight(uri, img.width, img.height)); }); } } var textTrackStyle = null; var customData = mediaInfo.customData ? mediaInfo.customData : null; var mediaTracks = null; if (mediaInfo.textTracks && mediaInfo.textTracks.length > 0) { mediaTracks = NSMutableArray.arrayWithCapacity(mediaInfo.textTracks.length); mediaInfo.textTracks.forEach(function (track, index) { mediaTracks.addObject(GCKMediaTrack.alloc().initWithIdentifierContentIdentifierContentTypeTypeTextSubtypeNameLanguageCodeCustomData(index + 1, track.src, track.contentType, GCKMediaTrackTypeText, GCKMediaTextTrackSubtypeSubtitles, track.name, track.language, null)); }); } var streamType = typeof mediaInfo.streamType === 'string' ? this.streamTypeStringToNumber(mediaInfo.streamType) : mediaInfo.streamType; var builtMediaInfo = GCKMediaInformation.alloc().initWithContentIDStreamTypeContentTypeMetadataStreamDurationMediaTracksTextTrackStyleCustomData(mediaInfo.contentId, streamType, mediaInfo.contentType, metadata, mediaInfo.duration, mediaTracks, textTrackStyle, customData); var options = GCKMediaLoadOptions.alloc().init(); options.autoplay = autoplay; options.playPosition = position; var remoteMediaClient = this.getRemoteMediaClient(); remoteMediaClient.addListener(this.mRemoteMediaClientListener); remoteMediaClient.loadMediaWithOptions(builtMediaInfo, options); }; CastButton.prototype.showController = function () { this.mCastContext.presentDefaultExpandedMediaControls(); }; CastButton.prototype.getMediaInfo = function () { var remoteMediaClient = this.getRemoteMediaClient(); if (!remoteMediaClient) { return {}; } var mediaInfo = remoteMediaClient.mediaStatus.mediaInformation; return this.convertMediaInfo(mediaInfo); }; CastButton.prototype.pauseMedia = function (customData) { this.getRemoteMediaClient().pauseWithCustomData(customData); }; CastButton.prototype.playMedia = function (customData) { this.getRemoteMediaClient().playWithCustomData(customData); }; CastButton.prototype.seekMedia = function (position, resumeState, customData) { if (resumeState === void 0) { resumeState = 0; } this.getRemoteMediaClient().seekToTimeIntervalResumeStateCustomData(position, resumeState, customData); }; CastButton.prototype.stopMedia = function (customData) { this.getRemoteMediaClient().stopWithCustomData(customData); }; CastButton.prototype.setActiveTrackIds = function (trackIds) { this.getRemoteMediaClient().setActiveTrackIDs(trackIds); }; CastButton.prototype.setTintColor = function (color) { var mRouteButton = this.getNativeView(); mRouteButton.tintColor = new color_1.Color(color).ios; }; CastButton.prototype.convertMediaInfo = function (mediaInfo) { if (!mediaInfo) { return null; } var metadata = mediaInfo.metadata; var metaDataKeys = utils_1.ios.collections.nsArrayToJSArray(metadata.allKeys()); var images = utils_1.ios.collections.nsArrayToJSArray(metadata.images()); var tracks = utils_1.ios.collections.nsArrayToJSArray(mediaInfo.mediaTracks); var textTracks = tracks .filter(function (track) { return track.type === GCKMediaTrackTypeText; }) .map(function (track) { return { id: track.identifier, src: track.contentIdentifier, contentType: track.contentType, name: track.name, language: track.languageCode, }; }); var castMetadata = { metadataType: metadata.metadataType, images: [], }; metaDataKeys.forEach(function (key) { var fixedKey = camelCase(key.replace('com.google.cast.metadata.', '')); castMetadata[fixedKey] = metadata.objectForKey(key); }); images.forEach(function (img) { castMetadata.images.push({ url: img.URL.absoluteString, width: img.width, height: img.height }); }); return { contentId: mediaInfo.contentID, streamType: this.streamTypeNumberToString(mediaInfo.streamType), contentType: mediaInfo.contentType, metadata: castMetadata, duration: mediaInfo.streamDuration, textTracks: textTracks }; }; return CastButton; }(cast_common_1.CastButtonBase)); exports.CastButton = CastButton; //# sourceMappingURL=cast.ios.js.map