nativescript-cast-ns6-beta
Version:
NativeScript Chromecast Plugin.
344 lines • 16.9 kB
JavaScript
;
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