First separation commit.

Added LICENSE, README.md, CONTRIBUTORS.md
This commit is contained in:
Erwin de Haan
2019-01-09 12:36:54 +01:00
parent 09513af31b
commit 4678528d00
657 changed files with 422 additions and 0 deletions
+145
View File
@@ -0,0 +1,145 @@
define(["connectionManager", "playbackManager", "events", "inputManager", "focusManager", "appRouter"], function(connectionManager, playbackManager, events, inputManager, focusManager, appRouter) {
"use strict";
function notifyApp() {
inputManager.notify()
}
function displayMessage(cmd) {
var args = cmd.Arguments;
args.TimeoutMs ? require(["toast"], function(toast) {
toast({
title: args.Header,
text: args.Text
})
}) : require(["alert"], function(alert) {
alert({
title: args.Header,
text: args.Text
})
})
}
function displayContent(cmd, apiClient) {
playbackManager.isPlayingLocally(["Video", "Book", "Game"]) || appRouter.showItem(cmd.Arguments.ItemId, apiClient.serverId())
}
function playTrailers(apiClient, itemId) {
apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function(item) {
playbackManager.playTrailers(item)
})
}
function processGeneralCommand(cmd, apiClient) {
switch (cmd.Name) {
case "Select":
return void inputManager.trigger("select");
case "Back":
return void inputManager.trigger("back");
case "MoveUp":
return void inputManager.trigger("up");
case "MoveDown":
return void inputManager.trigger("down");
case "MoveLeft":
return void inputManager.trigger("left");
case "MoveRight":
return void inputManager.trigger("right");
case "PageUp":
return void inputManager.trigger("pageup");
case "PageDown":
return void inputManager.trigger("pagedown");
case "PlayTrailers":
playTrailers(apiClient, cmd.Arguments.ItemId);
break;
case "SetRepeatMode":
playbackManager.setRepeatMode(cmd.Arguments.RepeatMode);
break;
case "VolumeUp":
return void inputManager.trigger("volumeup");
case "VolumeDown":
return void inputManager.trigger("volumedown");
case "ChannelUp":
return void inputManager.trigger("channelup");
case "ChannelDown":
return void inputManager.trigger("channeldown");
case "Mute":
return void inputManager.trigger("mute");
case "Unmute":
return void inputManager.trigger("unmute");
case "ToggleMute":
return void inputManager.trigger("togglemute");
case "SetVolume":
notifyApp(), playbackManager.setVolume(cmd.Arguments.Volume);
break;
case "SetAudioStreamIndex":
notifyApp(), playbackManager.setAudioStreamIndex(parseInt(cmd.Arguments.Index));
break;
case "SetSubtitleStreamIndex":
notifyApp(), playbackManager.setSubtitleStreamIndex(parseInt(cmd.Arguments.Index));
break;
case "ToggleFullscreen":
return void inputManager.trigger("togglefullscreen");
case "GoHome":
return void inputManager.trigger("home");
case "GoToSettings":
return void inputManager.trigger("settings");
case "DisplayContent":
displayContent(cmd, apiClient);
break;
case "GoToSearch":
return void inputManager.trigger("search");
case "DisplayMessage":
displayMessage(cmd);
break;
case "ToggleOsd":
case "ToggleContextMenu":
case "TakeScreenShot":
case "SendKey":
break;
case "SendString":
focusManager.sendText(cmd.Arguments.String);
break;
default:
console.log("processGeneralCommand does not recognize: " + cmd.Name)
}
notifyApp()
}
function onMessageReceived(e, msg) {
var apiClient = this;
if ("Play" === msg.MessageType) {
notifyApp();
var serverId = apiClient.serverInfo().Id;
"PlayNext" === msg.Data.PlayCommand ? playbackManager.queueNext({
ids: msg.Data.ItemIds,
serverId: serverId
}) : "PlayLast" === msg.Data.PlayCommand ? playbackManager.queue({
ids: msg.Data.ItemIds,
serverId: serverId
}) : playbackManager.play({
ids: msg.Data.ItemIds,
startPositionTicks: msg.Data.StartPositionTicks,
mediaSourceId: msg.Data.MediaSourceId,
audioStreamIndex: msg.Data.AudioStreamIndex,
subtitleStreamIndex: msg.Data.SubtitleStreamIndex,
startIndex: msg.Data.StartIndex,
serverId: serverId
})
} else if ("Playstate" === msg.MessageType) "Stop" === msg.Data.Command ? inputManager.trigger("stop") : "Pause" === msg.Data.Command ? inputManager.trigger("pause") : "Unpause" === msg.Data.Command ? inputManager.trigger("play") : "PlayPause" === msg.Data.Command ? inputManager.trigger("playpause") : "Seek" === msg.Data.Command ? playbackManager.seek(msg.Data.SeekPositionTicks) : "NextTrack" === msg.Data.Command ? inputManager.trigger("next") : "PreviousTrack" === msg.Data.Command ? inputManager.trigger("previous") : notifyApp();
else if ("GeneralCommand" === msg.MessageType) {
var cmd = msg.Data;
processGeneralCommand(cmd, apiClient)
} else if ("UserDataChanged" === msg.MessageType) {
if (msg.Data.UserId === apiClient.getCurrentUserId())
for (var i = 0, length = msg.Data.UserDataList.length; i < length; i++) events.trigger(serverNotifications, "UserDataChanged", [apiClient, msg.Data.UserDataList[i]])
} else events.trigger(serverNotifications, msg.MessageType, [apiClient, msg.Data])
}
function bindEvents(apiClient) {
events.off(apiClient, "message", onMessageReceived), events.on(apiClient, "message", onMessageReceived)
}
var serverNotifications = {};
return connectionManager.getApiClients().forEach(bindEvents), events.on(connectionManager, "apiclientcreated", function(e, newApiClient) {
bindEvents(newApiClient)
}), serverNotifications
});
@@ -0,0 +1,153 @@
require(["apphost"], function(appHost) {
"use strict";
function throttle(key) {
var time = times[key] || 0;
return (new Date).getTime() - time >= 200
}
function resetThrottle(key) {
times[key] = (new Date).getTime()
}
function allowInput() {
return !(!isElectron && document.hidden) && "Minimized" !== appHost.getWindowState()
}
function raiseEvent(name, key, keyCode) {
if (allowInput()) {
var event = document.createEvent("Event");
event.initEvent(name, !0, !0), event.key = key, event.keyCode = keyCode, (document.activeElement || document.body).dispatchEvent(event)
}
}
function clickElement(elem) {
allowInput() && elem.click()
}
function raiseKeyEvent(oldPressedState, newPressedState, key, keyCode, enableRepeatKeyDown, clickonKeyUp) {
if (!0 === newPressedState) {
var fire = !1;
!1 === oldPressedState ? (fire = !0, resetThrottle(key)) : enableRepeatKeyDown && (fire = throttle(key)), fire && keyCode && raiseEvent("keydown", key, keyCode)
} else !1 === newPressedState && !0 === oldPressedState && (resetThrottle(key), keyCode && raiseEvent("keyup", key, keyCode), clickonKeyUp && clickElement(document.activeElement || window))
}
function runInputLoop() {
var gamepads;
navigator.getGamepads ? gamepads = navigator.getGamepads() : navigator.webkitGetGamepads && (gamepads = navigator.webkitGetGamepads()), gamepads = gamepads || [];
var i, j, len;
for (i = 0, len = gamepads.length; i < len; i++) {
var gamepad = gamepads[i];
if (gamepad) {
var axes = gamepad.axes,
leftStickX = axes[0],
leftStickY = axes[1];
leftStickX > _THUMB_STICK_THRESHOLD ? _ButtonPressedState.setleftThumbstickRight(!0) : leftStickX < -_THUMB_STICK_THRESHOLD ? _ButtonPressedState.setleftThumbstickLeft(!0) : leftStickY < -_THUMB_STICK_THRESHOLD ? _ButtonPressedState.setleftThumbstickUp(!0) : leftStickY > _THUMB_STICK_THRESHOLD ? _ButtonPressedState.setleftThumbstickDown(!0) : (_ButtonPressedState.setleftThumbstickLeft(!1), _ButtonPressedState.setleftThumbstickRight(!1), _ButtonPressedState.setleftThumbstickUp(!1), _ButtonPressedState.setleftThumbstickDown(!1));
var buttons = gamepad.buttons;
for (j = 0, len = buttons.length; j < len; j++)
if (-1 !== ProcessedButtons.indexOf(j))
if (buttons[j].pressed) switch (j) {
case _GAMEPAD_DPAD_UP_BUTTON_INDEX:
_ButtonPressedState.setdPadUp(!0);
break;
case _GAMEPAD_DPAD_DOWN_BUTTON_INDEX:
_ButtonPressedState.setdPadDown(!0);
break;
case _GAMEPAD_DPAD_LEFT_BUTTON_INDEX:
_ButtonPressedState.setdPadLeft(!0);
break;
case _GAMEPAD_DPAD_RIGHT_BUTTON_INDEX:
_ButtonPressedState.setdPadRight(!0);
break;
case _GAMEPAD_A_BUTTON_INDEX:
_ButtonPressedState.setgamepadA(!0);
break;
case _GAMEPAD_B_BUTTON_INDEX:
_ButtonPressedState.setgamepadB(!0)
} else switch (j) {
case _GAMEPAD_DPAD_UP_BUTTON_INDEX:
_ButtonPressedState.getdPadUp() && _ButtonPressedState.setdPadUp(!1);
break;
case _GAMEPAD_DPAD_DOWN_BUTTON_INDEX:
_ButtonPressedState.getdPadDown() && _ButtonPressedState.setdPadDown(!1);
break;
case _GAMEPAD_DPAD_LEFT_BUTTON_INDEX:
_ButtonPressedState.getdPadLeft() && _ButtonPressedState.setdPadLeft(!1);
break;
case _GAMEPAD_DPAD_RIGHT_BUTTON_INDEX:
_ButtonPressedState.getdPadRight() && _ButtonPressedState.setdPadRight(!1);
break;
case _GAMEPAD_A_BUTTON_INDEX:
_ButtonPressedState.getgamepadA() && _ButtonPressedState.setgamepadA(!1);
break;
case _GAMEPAD_B_BUTTON_INDEX:
_ButtonPressedState.getgamepadB() && _ButtonPressedState.setgamepadB(!1)
}
}
}
requestAnimationFrame(runInputLoop)
}
var _GAMEPAD_A_BUTTON_INDEX = 0,
_GAMEPAD_B_BUTTON_INDEX = 1,
_GAMEPAD_DPAD_UP_BUTTON_INDEX = 12,
_GAMEPAD_DPAD_DOWN_BUTTON_INDEX = 13,
_GAMEPAD_DPAD_LEFT_BUTTON_INDEX = 14,
_GAMEPAD_DPAD_RIGHT_BUTTON_INDEX = 15,
_THUMB_STICK_THRESHOLD = .75,
_leftThumbstickUpPressed = !1,
_leftThumbstickDownPressed = !1,
_leftThumbstickLeftPressed = !1,
_leftThumbstickRightPressed = !1,
_dPadUpPressed = !1,
_dPadDownPressed = !1,
_dPadLeftPressed = !1,
_dPadRightPressed = !1,
_gamepadAPressed = !1,
_gamepadBPressed = !1,
ProcessedButtons = [_GAMEPAD_DPAD_UP_BUTTON_INDEX, _GAMEPAD_DPAD_DOWN_BUTTON_INDEX, _GAMEPAD_DPAD_LEFT_BUTTON_INDEX, _GAMEPAD_DPAD_RIGHT_BUTTON_INDEX, _GAMEPAD_A_BUTTON_INDEX, _GAMEPAD_B_BUTTON_INDEX],
_ButtonPressedState = {};
_ButtonPressedState.getgamepadA = function() {
return _gamepadAPressed
}, _ButtonPressedState.setgamepadA = function(newPressedState) {
raiseKeyEvent(_gamepadAPressed, newPressedState, "GamepadA", 0, !1, !0), _gamepadAPressed = newPressedState
}, _ButtonPressedState.getgamepadB = function() {
return _gamepadBPressed
}, _ButtonPressedState.setgamepadB = function(newPressedState) {
raiseKeyEvent(_gamepadBPressed, newPressedState, "GamepadB", 27), _gamepadBPressed = newPressedState
}, _ButtonPressedState.getleftThumbstickUp = function() {
return _leftThumbstickUpPressed
}, _ButtonPressedState.setleftThumbstickUp = function(newPressedState) {
raiseKeyEvent(_leftThumbstickUpPressed, newPressedState, "GamepadLeftThumbStickUp", 38, !0), _leftThumbstickUpPressed = newPressedState
}, _ButtonPressedState.getleftThumbstickDown = function() {
return _leftThumbstickDownPressed
}, _ButtonPressedState.setleftThumbstickDown = function(newPressedState) {
raiseKeyEvent(_leftThumbstickDownPressed, newPressedState, "GamepadLeftThumbStickDown", 40, !0), _leftThumbstickDownPressed = newPressedState
}, _ButtonPressedState.getleftThumbstickLeft = function() {
return _leftThumbstickLeftPressed
}, _ButtonPressedState.setleftThumbstickLeft = function(newPressedState) {
raiseKeyEvent(_leftThumbstickLeftPressed, newPressedState, "GamepadLeftThumbStickLeft", 37, !0), _leftThumbstickLeftPressed = newPressedState
}, _ButtonPressedState.getleftThumbstickRight = function() {
return _leftThumbstickRightPressed
}, _ButtonPressedState.setleftThumbstickRight = function(newPressedState) {
raiseKeyEvent(_leftThumbstickRightPressed, newPressedState, "GamepadLeftThumbStickRight", 39, !0), _leftThumbstickRightPressed = newPressedState
}, _ButtonPressedState.getdPadUp = function() {
return _dPadUpPressed
}, _ButtonPressedState.setdPadUp = function(newPressedState) {
raiseKeyEvent(_dPadUpPressed, newPressedState, "GamepadDPadUp", 38, !0), _dPadUpPressed = newPressedState
}, _ButtonPressedState.getdPadDown = function() {
return _dPadDownPressed
}, _ButtonPressedState.setdPadDown = function(newPressedState) {
raiseKeyEvent(_dPadDownPressed, newPressedState, "GamepadDPadDown", 40, !0), _dPadDownPressed = newPressedState
}, _ButtonPressedState.getdPadLeft = function() {
return _dPadLeftPressed
}, _ButtonPressedState.setdPadLeft = function(newPressedState) {
raiseKeyEvent(_dPadLeftPressed, newPressedState, "GamepadDPadLeft", 37, !0), _dPadLeftPressed = newPressedState
}, _ButtonPressedState.getdPadRight = function() {
return _dPadRightPressed
}, _ButtonPressedState.setdPadRight = function(newPressedState) {
raiseKeyEvent(_dPadRightPressed, newPressedState, "GamepadDPadRight", 39, !0), _dPadRightPressed = newPressedState
};
var times = {},
isElectron = -1 !== navigator.userAgent.toLowerCase().indexOf("electron");
runInputLoop(), window.navigator && "string" == typeof window.navigator.gamepadInputEmulation && (window.navigator.gamepadInputEmulation = "gamepad")
});
+75
View File
@@ -0,0 +1,75 @@
define(["inputManager", "focusManager", "browser", "layoutManager", "events", "dom"], function(inputmanager, focusManager, browser, layoutManager, events, dom) {
"use strict";
function mouseIdleTime() {
return (new Date).getTime() - lastMouseInputTime
}
function notifyApp() {
inputmanager.notifyMouseMove()
}
function removeIdleClasses() {
var classList = document.body.classList;
classList.remove("mouseIdle"), classList.remove("mouseIdle-tv")
}
function addIdleClasses() {
var classList = document.body.classList;
classList.add("mouseIdle"), layoutManager.tv && classList.add("mouseIdle-tv")
}
function onPointerMove(e) {
var eventX = e.screenX,
eventY = e.screenY;
if (void 0 !== eventX || void 0 !== eventY) {
var obj = lastPointerMoveData;
if (!obj) return void(lastPointerMoveData = {
x: eventX,
y: eventY
});
Math.abs(eventX - obj.x) < 10 && Math.abs(eventY - obj.y) < 10 || (obj.x = eventX, obj.y = eventY, lastMouseInputTime = (new Date).getTime(), notifyApp(), isMouseIdle && (isMouseIdle = !1, removeIdleClasses(), events.trigger(self, "mouseactive")))
}
}
function onPointerEnter(e) {
if ("mouse" === (e.pointerType || (layoutManager.mobile ? "touch" : "mouse")) && !isMouseIdle) {
var parent = focusManager.focusableParent(e.target);
parent && focusManager.focus(parent)
}
}
function enableFocusWithMouse() {
return !!layoutManager.tv && (!browser.web0s && !!browser.tv)
}
function onMouseInterval() {
!isMouseIdle && mouseIdleTime() >= 5e3 && (isMouseIdle = !0, addIdleClasses(), events.trigger(self, "mouseidle"))
}
function startMouseInterval() {
mouseInterval || (mouseInterval = setInterval(onMouseInterval, 5e3))
}
function stopMouseInterval() {
var interval = mouseInterval;
interval && (clearInterval(interval), mouseInterval = null), removeIdleClasses()
}
function initMouse() {
stopMouseInterval(), dom.removeEventListener(document, window.PointerEvent ? "pointermove" : "mousemove", onPointerMove, {
passive: !0
}), layoutManager.mobile || (startMouseInterval(), dom.addEventListener(document, window.PointerEvent ? "pointermove" : "mousemove", onPointerMove, {
passive: !0
})), dom.removeEventListener(document, window.PointerEvent ? "pointerenter" : "mouseenter", onPointerEnter, {
capture: !0,
passive: !0
}), enableFocusWithMouse() && dom.addEventListener(document, window.PointerEvent ? "pointerenter" : "mouseenter", onPointerEnter, {
capture: !0,
passive: !0
})
}
var isMouseIdle, lastPointerMoveData, mouseInterval, self = {},
lastMouseInputTime = (new Date).getTime();
return initMouse(), events.on(layoutManager, "modechange", initMouse), self
});