EmbyCrackedClient/web/modules/common/inputmanager.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
6.8 KiB
JavaScript

import dom from"./../dom.js";import appRouter from"./../approuter.js";import playbackManager from"./playback/playbackmanager.js";import focusManager from"./../focusmanager.js";import{appHost}from"./servicelocator.js";import events from"./../emby-apiclient/events.js";let lastInputTime=Date.now();function notify(triggerCommand,evt){lastInputTime=Date.now(),!1!==triggerCommand&&handleCommand("unknown",{originalEvent:evt})}function idleTime(){return Date.now()-lastInputTime}function onFunctionalEvent(){lastInputTime=Date.now()}function select(sourceElement){sourceElement.click()}function on(scope,fn,options){dom.addEventListener(scope,"command",fn,options=options||{})}function off(scope,fn,options){dom.removeEventListener(scope,"command",fn,options=options||{})}events.on(appHost,"pause",onFunctionalEvent),events.on(appHost,"resume",onFunctionalEvent),events.on(appRouter,"navigate",onFunctionalEvent);let commandTimes={};function checkCommandTime(command){var last=commandTimes[command]||0,now=Date.now();return!(now-last<1e3||(commandTimes[command]=now,0))}function normalizeSourceElement(sourceElement){var focusScope=focusManager.getCurrentScope();return sourceElement=sourceElement&&focusScope.contains(sourceElement)?sourceElement:focusScope}function isTextEditable(elem){var readOnly=elem.readOnly;if(!readOnly&&!1===readOnly){if("TEXTAREA"===elem.tagName)return!0;switch(elem.type){case"checkbox":case"radio":case"file":case"hidden":case"range":return!1;default:return!0}}return!1}function allowNavAtStart(elem){return 0===elem.selectionStart}function allowNavAtEnd(elem){var text=elem.value||"";return elem.selectionEnd>=text.length}function allowNavInSelectionRange(elem,command){return("left"===command?"rtl"===document.dir?allowNavAtEnd:allowNavAtStart:"rtl"===document.dir?allowNavAtStart:allowNavAtEnd)(elem)}function allowLeftOrRightNav(elem,command){if(!isTextEditable(elem))return!0;switch(elem.tagName){case"TEXTAREA":return allowNavInSelectionRange(elem,command);case"INPUT":switch(elem.type){case"text":case"tel":case"url":case"password":case"search":return allowNavInSelectionRange(elem,command);case"number":return!1;default:return elem.classList.contains("emby-input-tv")}default:return!0}}function showChannelChanger(currentItem,offset){return Emby.importModule("./modules/channelchanger/channelchanger.js").then(function(ChannelChanger){return ChannelChanger.onChannelChangeRequest({currentItem:currentItem,offset:offset})})}function handleChannelChangeCommand(offset){if(playbackManager.isPlayingVideo()){var item=playbackManager.currentItem();if(item&&"TvChannel"===item.Type)return void showChannelChanger(item,offset)}0<offset?playbackManager.channelUp():playbackManager.channelDown()}function handleCommand(name,options){lastInputTime=Date.now();let sourceElement=options?options.sourceElement:null;sourceElement=normalizeSourceElement(sourceElement=sourceElement||document.activeElement);var eventInfo={detail:{command:name},bubbles:!0,cancelable:!0},eventResult=(options&&(eventInfo.detail.repeat=options.repeat,eventInfo.detail.originalEvent=options.originalEvent,eventInfo.detail.commandOptions=options),sourceElement.dispatchEvent(new CustomEvent("command",eventInfo)));if(!eventResult)return!0;switch(name){case"up":return sourceElement=normalizeSourceElement(sourceElement=document.activeElement||sourceElement),focusManager.moveUp(sourceElement),!0;case"down":return sourceElement=normalizeSourceElement(sourceElement=document.activeElement||sourceElement),focusManager.moveDown(sourceElement),!0;case"left":return allowLeftOrRightNav(sourceElement=normalizeSourceElement(sourceElement=document.activeElement||sourceElement),name)?(focusManager.moveLeft(sourceElement)||options?.originalEvent?.repeat||handleCommand("moveleftedge",{sourceElement:sourceElement,originalEvent:eventInfo.detail.originalEvent}),!0):!1;case"right":return allowLeftOrRightNav(sourceElement=normalizeSourceElement(sourceElement=document.activeElement||sourceElement),name)?(focusManager.moveRight(sourceElement)||options?.originalEvent?.repeat||handleCommand("moverightedge",{sourceElement:sourceElement,originalEvent:eventInfo.detail.originalEvent}),!0):!1;case"home":return appRouter.goHome(),!0;case"settings":return appRouter.showSettings(),!0;case"back":return appRouter.back(),!0;case"forward":return appRouter.forward(),!0;case"select":return select(sourceElement=normalizeSourceElement(sourceElement=document.activeElement||sourceElement)),!0;case"menu":case"info":return!0;case"nextchapter":return playbackManager.nextChapter(),!0;case"next":case"nexttrack":return playbackManager.nextTrack(),!0;case"previous":case"previoustrack":return playbackManager.previousTrack(),!0;case"previouschapter":return playbackManager.previousChapter(),!0;case"guide":return appRouter.showGuide(),!0;case"recordedtv":return appRouter.showRecordedTV(),!0;case"record":return!0;case"livetv":return appRouter.showLiveTV(),!0;case"mute":return playbackManager.setMute(!0),!0;case"unmute":return playbackManager.setMute(!1),!0;case"togglemute":return playbackManager.toggleMute(),!0;case"channelup":return handleChannelChangeCommand(1),!0;case"channeldown":return handleChannelChangeCommand(-1),!0;case"volumedown":return playbackManager.volumeDown(),!0;case"volumeup":return playbackManager.volumeUp(),!0;case"play":return playbackManager.unpause(),!0;case"pause":return playbackManager.pause(),!0;case"playpause":return playbackManager.playPause(),!0;case"stop":return checkCommandTime("stop")&&playbackManager.stop(),!0;case"changezoom":return playbackManager.toggleAspectRatio(),!0;case"changeaudiotrack":return playbackManager.changeAudioStream(),!0;case"changesubtitletrack":return playbackManager.changeSubtitleStream(),!0;case"search":return appRouter.showSearch(),!0;case"favorites":return appRouter.showFavorites(),!0;case"fastforward":return playbackManager.fastForward(),!0;case"rewind":return playbackManager.rewind(),!0;case"togglefullscreen":return playbackManager.toggleFullscreen(),!0;case"disabledisplaymirror":return playbackManager.enableDisplayMirroring(!1),!0;case"enabledisplaymirror":return playbackManager.enableDisplayMirroring(!0),!0;case"toggledisplaymirror":return playbackManager.toggleDisplayMirroring(),!0;case"togglestats":return!0;case"movies":case"music":case"tv":return appRouter.goHome(),!0;case"nowplaying":return appRouter.showNowPlaying(),!0;case"save":case"screensaver":case"refresh":case"changebrightness":case"red":case"green":case"yellow":case"blue":case"grey":case"brown":return!0;case"repeatnone":return playbackManager.setRepeatMode("RepeatNone"),!0;case"repeatall":return playbackManager.setRepeatMode("RepeatAll"),!0;case"repeatone":return playbackManager.setRepeatMode("RepeatOne"),!0;default:return!1}}let InputManager={trigger:handleCommand,handle:handleCommand,notify:notify,idleTime:idleTime,on:on,off:off,allowLeftOrRightNav:allowLeftOrRightNav};globalThis.Emby&&(Emby.InputManager=InputManager);export default InputManager;