1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/components/inputManager.js

238 lines
6.8 KiB
JavaScript
Raw Normal View History

define(['playbackManager', 'focusManager', 'appRouter', 'dom'], function (playbackManager, focusManager, appRouter, dom) {
'use strict';
var lastInputTime = new Date().getTime();
2018-10-23 01:05:09 +03:00
function notify() {
lastInputTime = new Date().getTime();
handleCommand('unknown');
2018-10-23 01:05:09 +03:00
}
function notifyMouseMove() {
lastInputTime = new Date().getTime();
2018-10-23 01:05:09 +03:00
}
function idleTime() {
return new Date().getTime() - lastInputTime;
2018-10-23 01:05:09 +03:00
}
function select(sourceElement) {
sourceElement.click();
2018-10-23 01:05:09 +03:00
}
var eventListenerCount = 0;
2018-10-23 01:05:09 +03:00
function on(scope, fn) {
2019-09-24 23:23:43 +09:00
if (eventListenerCount) eventListenerCount++;
2019-09-11 04:00:07 -07:00
dom.addEventListener(scope, 'command', fn, {});
2018-10-23 01:05:09 +03:00
}
function off(scope, fn) {
2019-09-24 23:23:43 +09:00
if (eventListenerCount) eventListenerCount--;
2019-09-11 04:00:07 -07:00
dom.removeEventListener(scope, 'command', fn, {});
2018-10-23 01:05:09 +03:00
}
var commandTimes = {};
2018-10-23 01:05:09 +03:00
function checkCommandTime(command) {
var last = commandTimes[command] || 0;
var now = new Date().getTime();
if ((now - last) < 1000) {
return false;
}
commandTimes[command] = now;
return true;
2018-10-23 01:05:09 +03:00
}
function handleCommand(name, options) {
lastInputTime = new Date().getTime();
var sourceElement = (options ? options.sourceElement : null);
if (sourceElement) {
sourceElement = focusManager.focusableParent(sourceElement);
}
sourceElement = sourceElement || document.activeElement || window;
if (eventListenerCount) {
2018-10-23 01:05:09 +03:00
var customEvent = new CustomEvent("command", {
detail: {
command: name
},
bubbles: true,
cancelable: true
2018-10-23 01:05:09 +03:00
});
var eventResult = sourceElement.dispatchEvent(customEvent);
if (!eventResult) {
// event cancelled
return;
}
2018-10-23 01:05:09 +03:00
}
2018-10-23 01:05:09 +03:00
switch (name) {
case 'up':
2018-10-23 01:05:09 +03:00
focusManager.moveUp(sourceElement);
break;
case 'down':
2018-10-23 01:05:09 +03:00
focusManager.moveDown(sourceElement);
break;
case 'left':
2018-10-23 01:05:09 +03:00
focusManager.moveLeft(sourceElement);
break;
case 'right':
2018-10-23 01:05:09 +03:00
focusManager.moveRight(sourceElement);
break;
case 'home':
2018-10-23 01:05:09 +03:00
appRouter.goHome();
break;
case 'settings':
2018-10-23 01:05:09 +03:00
appRouter.showSettings();
break;
case 'back':
2018-10-23 01:05:09 +03:00
appRouter.back();
break;
case 'forward':
2018-10-23 01:05:09 +03:00
break;
case 'select':
2018-10-23 01:05:09 +03:00
select(sourceElement);
break;
case 'pageup':
break;
case 'pagedown':
2018-10-23 01:05:09 +03:00
break;
case 'end':
2018-10-23 01:05:09 +03:00
break;
case 'menu':
2019-09-11 04:00:07 -07:00
break;
case 'info':
break;
case 'nextchapter':
2018-10-23 01:05:09 +03:00
playbackManager.nextChapter();
break;
case 'next':
case 'nexttrack':
2018-10-23 01:05:09 +03:00
playbackManager.nextTrack();
break;
case 'previous':
case 'previoustrack':
2018-10-23 01:05:09 +03:00
playbackManager.previousTrack();
break;
case 'previouschapter':
2018-10-23 01:05:09 +03:00
playbackManager.previousChapter();
break;
case 'guide':
2018-10-23 01:05:09 +03:00
appRouter.showGuide();
break;
case 'recordedtv':
2018-10-23 01:05:09 +03:00
appRouter.showRecordedTV();
break;
case 'record':
2018-10-23 01:05:09 +03:00
break;
case 'livetv':
2018-10-23 01:05:09 +03:00
appRouter.showLiveTV();
break;
case 'mute':
playbackManager.setMute(true);
2018-10-23 01:05:09 +03:00
break;
case 'unmute':
playbackManager.setMute(false);
2018-10-23 01:05:09 +03:00
break;
case 'togglemute':
2018-10-23 01:05:09 +03:00
playbackManager.toggleMute();
break;
case 'channelup':
2018-10-23 01:05:09 +03:00
playbackManager.channelUp();
break;
case 'channeldown':
2018-10-23 01:05:09 +03:00
playbackManager.channelDown();
break;
case 'volumedown':
2018-10-23 01:05:09 +03:00
playbackManager.volumeDown();
break;
case 'volumeup':
2018-10-23 01:05:09 +03:00
playbackManager.volumeUp();
break;
case 'play':
2018-10-23 01:05:09 +03:00
playbackManager.unpause();
break;
case 'pause':
2018-10-23 01:05:09 +03:00
playbackManager.pause();
break;
case 'playpause':
2018-10-23 01:05:09 +03:00
playbackManager.playPause();
break;
case 'stop':
if (checkCommandTime('stop')) {
playbackManager.stop();
}
2018-10-23 01:05:09 +03:00
break;
case 'changezoom':
2018-10-23 01:05:09 +03:00
playbackManager.toggleAspectRatio();
break;
case 'changeaudiotrack':
2018-10-23 01:05:09 +03:00
playbackManager.changeAudioStream();
break;
case 'changesubtitletrack':
2018-10-23 01:05:09 +03:00
playbackManager.changeSubtitleStream();
break;
case 'search':
2018-10-23 01:05:09 +03:00
appRouter.showSearch();
break;
case 'favorites':
2018-10-23 01:05:09 +03:00
appRouter.showFavorites();
break;
case 'fastforward':
2018-10-23 01:05:09 +03:00
playbackManager.fastForward();
break;
case 'rewind':
2018-10-23 01:05:09 +03:00
playbackManager.rewind();
break;
case 'togglefullscreen':
2018-10-23 01:05:09 +03:00
playbackManager.toggleFullscreen();
break;
case 'disabledisplaymirror':
playbackManager.enableDisplayMirroring(false);
2018-10-23 01:05:09 +03:00
break;
case 'enabledisplaymirror':
playbackManager.enableDisplayMirroring(true);
2018-10-23 01:05:09 +03:00
break;
case 'toggledisplaymirror':
2018-10-23 01:05:09 +03:00
playbackManager.toggleDisplayMirroring();
break;
case 'nowplaying':
2018-10-23 01:05:09 +03:00
appRouter.showNowPlaying();
break;
case 'repeatnone':
playbackManager.setRepeatMode('RepeatNone');
break;
case 'repeatall':
playbackManager.setRepeatMode('RepeatAll');
break;
case 'repeatone':
playbackManager.setRepeatMode('RepeatOne');
break;
default:
break;
2018-10-23 01:05:09 +03:00
}
}
dom.addEventListener(document, 'click', notify, {
passive: true
});
return {
2018-10-23 01:05:09 +03:00
trigger: handleCommand,
handle: handleCommand,
notify: notify,
notifyMouseMove: notifyMouseMove,
idleTime: idleTime,
on: on,
off: off
};
2019-09-24 23:23:43 +09:00
});