jellyfin-web/dashboard-ui/bower_components/emby-webcomponents/input/api.js
2016-04-12 13:37:58 -04:00

187 lines
6.0 KiB
JavaScript

define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focusManager'], function (connectionManager, playbackManager, events, inputManager, focusManager) {
function displayMessage(cmd) {
var args = cmd.Arguments;
if (args.TimeoutMs) {
require(['toast'], function (toast) {
toast({ title: args.Header, text: args.Text });
});
}
else {
require(['alert'], function (alert) {
alert({ title: args.Header, text: args.Text });
});
}
}
function processGeneralCommand(cmd) {
// Full list
// https://github.com/MediaBrowser/MediaBrowser/blob/master/MediaBrowser.Model/Session/GeneralCommand.cs#L23
console.log('Received command: ' + cmd.Name);
switch (cmd.Name) {
case 'Select':
inputManager.trigger('select');
break;
case 'Back':
inputManager.trigger('back');
break;
case 'MoveUp':
inputManager.trigger('up');
break;
case 'MoveDown':
inputManager.trigger('down');
break;
case 'MoveLeft':
inputManager.trigger('left');
break;
case 'MoveRight':
inputManager.trigger('right');
break;
case 'PageUp':
inputManager.trigger('pageup');
break;
case 'PageDown':
inputManager.trigger('pagedown');
break;
case 'SetRepeatMode':
playbackManager.setRepeatMode(cmd.Arguments.RepeatMode);
break;
case 'VolumeUp':
inputManager.trigger('volumeup');
break;
case 'VolumeDown':
inputManager.trigger('volumedown');
break;
case 'ChannelUp':
inputManager.trigger('channelup');
break;
case 'ChannelDown':
inputManager.trigger('channeldown');
break;
case 'Mute':
inputManager.trigger('mute');
break;
case 'Unmute':
inputManager.trigger('unmute');
break;
case 'ToggleMute':
inputManager.trigger('togglemute');
break;
case 'SetVolume':
playbackManager.volume(cmd.Arguments.Volume);
break;
case 'SetAudioStreamIndex':
playbackManager.setAudioStreamIndex(parseInt(cmd.Arguments.Index));
break;
case 'SetSubtitleStreamIndex':
playbackManager.setSubtitleStreamIndex(parseInt(cmd.Arguments.Index));
break;
case 'ToggleFullscreen':
inputManager.trigger('togglefullscreen');
break;
case 'GoHome':
inputManager.trigger('home');
break;
case 'GoToSettings':
inputManager.trigger('settings');
break;
case 'DisplayContent':
//Dashboard.onBrowseCommand(cmd.Arguments);
break;
case 'GoToSearch':
inputManager.trigger('search');
break;
case 'DisplayMessage':
displayMessage(cmd);
break;
case 'ToggleOsd':
// todo
break;
case 'ToggleContextMenu':
// todo
break;
case 'TakeScreenShot':
// todo
break;
case 'SendKey':
// todo
break;
case 'SendString':
// todo
focusManager.sendText(cmd.Arguments.String);
break;
default:
console.log('processGeneralCommand does not recognize: ' + cmd.Name);
break;
}
}
function onWebSocketMessageReceived(e, msg) {
var apiClient = this;
if (msg.MessageType === "Play") {
var serverId = apiClient.serverInfo().Id;
if (msg.Data.PlayCommand == "PlayNext") {
playbackManager.queueNext({ ids: msg.Data.ItemIds, serverId: serverId });
}
else if (msg.Data.PlayCommand == "PlayLast") {
playbackManager.queue({ ids: msg.Data.ItemIds, serverId: serverId });
}
else {
playbackManager.play({ ids: msg.Data.ItemIds, startPositionTicks: msg.Data.StartPositionTicks, serverId: serverId });
}
}
else if (msg.MessageType === "Playstate") {
if (msg.Data.Command === 'Stop') {
inputManager.trigger('stop');
}
else if (msg.Data.Command === 'Pause') {
inputManager.trigger('pause');
}
else if (msg.Data.Command === 'Unpause') {
inputManager.trigger('play');
}
else if (msg.Data.Command === 'Seek') {
playbackManager.seek(msg.Data.SeekPositionTicks);
}
else if (msg.Data.Command === 'NextTrack') {
inputManager.trigger('next');
}
else if (msg.Data.Command === 'PreviousTrack') {
inputManager.trigger('previous');
}
}
else if (msg.MessageType === "GeneralCommand") {
var cmd = msg.Data;
processGeneralCommand(cmd);
}
}
function bindEvents(apiClient) {
events.off(apiClient, "websocketmessage", onWebSocketMessageReceived);
events.on(apiClient, "websocketmessage", onWebSocketMessageReceived);
}
//var current = connectionManager.currentApiClient();
//if (current) {
// bindEvents(current);
//}
events.on(connectionManager, 'apiclientcreated', function (e, newApiClient) {
bindEvents(newApiClient);
});
});