start fixing KbmHandler (formerly: action handler) some more
This commit is contained in:
parent
ad87dbdcb9
commit
e84f8ee541
@ -175,6 +175,16 @@ interface SettingsInterface {
|
|||||||
crop: {
|
crop: {
|
||||||
default: any;
|
default: any;
|
||||||
},
|
},
|
||||||
|
stretch: {
|
||||||
|
default: any;
|
||||||
|
conditionalDifferencePercent: number // black bars less than this wide will trigger stretch
|
||||||
|
// if mode is set to '1'. 1.0=100%
|
||||||
|
},
|
||||||
|
kbmHandler: {
|
||||||
|
enabled: boolean, // if keyboard/mouse handler service will run
|
||||||
|
keyboardEnabled: boolean, // if keyboard shortcuts are processed
|
||||||
|
mouseEnabled: boolean, // if mouse movement is processed
|
||||||
|
}
|
||||||
|
|
||||||
zoom: {
|
zoom: {
|
||||||
minLogZoom: number,
|
minLogZoom: number,
|
||||||
@ -189,11 +199,7 @@ interface SettingsInterface {
|
|||||||
mousePanReverseMouse: boolean,
|
mousePanReverseMouse: boolean,
|
||||||
defaultAr?: any
|
defaultAr?: any
|
||||||
},
|
},
|
||||||
stretch: {
|
|
||||||
default: any;
|
|
||||||
conditionalDifferencePercent: number // black bars less than this wide will trigger stretch
|
|
||||||
// if mode is set to '1'. 1.0=100%
|
|
||||||
},
|
|
||||||
resizer: {
|
resizer: {
|
||||||
setStyleString: {
|
setStyleString: {
|
||||||
maxRetries: number,
|
maxRetries: number,
|
||||||
|
@ -5,27 +5,46 @@ import Logger from './Logger';
|
|||||||
import PageInfo from './video-data/PageInfo';
|
import PageInfo from './video-data/PageInfo';
|
||||||
import Settings from './Settings';
|
import Settings from './Settings';
|
||||||
import VideoData from './video-data/VideoData';
|
import VideoData from './video-data/VideoData';
|
||||||
import EventBus from './EventBus';
|
import EventBus, { EventBusCommand } from './EventBus';
|
||||||
|
|
||||||
if(process.env.CHANNEL !== 'stable'){
|
if(process.env.CHANNEL !== 'stable'){
|
||||||
console.info("Loading ActionHandler");
|
console.info("Loading ActionHandler");
|
||||||
}
|
}
|
||||||
|
|
||||||
class ActionHandler {
|
/**
|
||||||
|
* Handles keypresses and mouse movement
|
||||||
|
*/
|
||||||
|
class KbmHandler {
|
||||||
logger: Logger;
|
logger: Logger;
|
||||||
settings: Settings;
|
settings: Settings;
|
||||||
eventBus: EventBus;
|
eventBus: EventBus;
|
||||||
|
|
||||||
|
allowShortcuts: boolean = true;
|
||||||
|
|
||||||
|
|
||||||
inputs: string[] = ['input', 'select', 'button', 'textarea'];
|
inputs: string[] = ['input', 'select', 'button', 'textarea'];
|
||||||
keyboardLocalDisabled: boolean = false;
|
keyboardLocalDisabled: boolean = false;
|
||||||
|
|
||||||
|
keyboardEnabled: boolean = false;
|
||||||
|
mouseEnabled: boolean = false;
|
||||||
|
|
||||||
mouseMoveActions: any[] = [];
|
mouseMoveActions: any[] = [];
|
||||||
|
keypressActions: any[] = [];
|
||||||
|
|
||||||
commands: any[] = [];
|
eventBusCommands: { [x: string]: EventBusCommand } = {
|
||||||
|
'kbm-enable': {
|
||||||
|
function: () => this.enable()
|
||||||
|
},
|
||||||
|
'kbm-disable': {
|
||||||
|
function: () => this.disable()
|
||||||
|
},
|
||||||
|
'kbm-set-config': {
|
||||||
|
function: (data: {config: any, temporary?: boolean}) => this.setConfig(data.config, data.temporary),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
//#region lifecycle
|
||||||
constructor(eventBus: EventBus, settings, logger) {
|
constructor(eventBus: EventBus, settings: Settings, logger: Logger) {
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.eventBus = eventBus;
|
this.eventBus = eventBus;
|
||||||
@ -40,18 +59,44 @@ class ActionHandler {
|
|||||||
for (const key in this.settings.active.commands) {
|
for (const key in this.settings.active.commands) {
|
||||||
for (const command of this.settings.active.commands[key]) {
|
for (const command of this.settings.active.commands[key]) {
|
||||||
if (command.shortcut) {
|
if (command.shortcut) {
|
||||||
this.commands.push(command);
|
this.keypressActions.push(command);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
load() {
|
||||||
|
this.settings.active.kbmHandler.enabled ? this.addListener() : this.removeListener();
|
||||||
|
this.keyboardEnabled = this.settings.active.kbmHandler.keyboardEnabled;
|
||||||
|
this.mouseEnabled = this.settings.active.kbmHandler.mouseEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
destroy() {
|
||||||
|
this.removeListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
// convenience methods
|
||||||
|
addListener() {
|
||||||
// events should be handled in handleEvent function. We need to do things this
|
// events should be handled in handleEvent function. We need to do things this
|
||||||
// way, otherwise we can't remove event listener
|
// way, otherwise we can't remove event listener
|
||||||
// https://stackoverflow.com/a/19507086
|
// https://stackoverflow.com/a/19507086
|
||||||
|
|
||||||
document.addEventListener('keyup', this );
|
document.addEventListener('keyup', this );
|
||||||
}
|
}
|
||||||
|
removeListener() {
|
||||||
|
document.removeEventListener('keyup', this);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
enable() {
|
||||||
|
this.addListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
this.removeListener();
|
||||||
|
}
|
||||||
|
|
||||||
handleEvent(event) {
|
handleEvent(event) {
|
||||||
switch(event.type) {
|
switch(event.type) {
|
||||||
@ -64,10 +109,37 @@ class ActionHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
/**
|
||||||
document.removeEventListener('keyup', this);
|
* Sets configuration parameter for KbmHandler
|
||||||
|
* @param config
|
||||||
|
*/
|
||||||
|
setConfig(config, temporary = false) {
|
||||||
|
if (temporary) {
|
||||||
|
for (const confKey in config) {
|
||||||
|
switch (confKey) {
|
||||||
|
case 'enabled':
|
||||||
|
config[confKey] ? this.enable() : this.disable();
|
||||||
|
break;
|
||||||
|
case 'keyboardEnabled':
|
||||||
|
this.keyboardEnabled = config[confKey];
|
||||||
|
break;
|
||||||
|
case 'mouseEnabled':
|
||||||
|
this.mouseEnabled = config[confKey];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const confKey in config) {
|
||||||
|
this.settings.active.kbmHandler[confKey] = config[confKey];
|
||||||
|
}
|
||||||
|
|
||||||
|
this.settings.save();
|
||||||
|
this.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
registerHandleMouse(videoData) {
|
registerHandleMouse(videoData) {
|
||||||
this.logger.log('info', ['actionHandler', 'mousemove'], "[ActionHandler::registerHandleMouse] registering handle mouse for videodata:", videoData.id)
|
this.logger.log('info', ['actionHandler', 'mousemove'], "[ActionHandler::registerHandleMouse] registering handle mouse for videodata:", videoData.id)
|
||||||
|
|
||||||
@ -190,6 +262,10 @@ class ActionHandler {
|
|||||||
|
|
||||||
|
|
||||||
handleKeyup(event) {
|
handleKeyup(event) {
|
||||||
|
if (!this.keyboardEnabled) {
|
||||||
|
this.logger.log('info', 'keyboard', "%c[ActionHandler::handleKeyup] kbmHandler.keyboardEnabled is set to false. Doing nothing.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.logger.log('info', 'keyboard', "%c[ActionHandler::handleKeyup] we pressed a key: ", "color: #ff0", event.key , " | keyup: ", event.keyup, "event:", event);
|
this.logger.log('info', 'keyboard', "%c[ActionHandler::handleKeyup] we pressed a key: ", "color: #ff0", event.key , " | keyup: ", event.keyup, "event:", event);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -198,11 +274,11 @@ class ActionHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.logger.log('info', 'keyboard', "%c[ActionHandler::handleKeyup] Trying to find and execute action for event. Actions/event: ", "color: #ff0", this.commands, event);
|
this.logger.log('info', 'keyboard', "%c[ActionHandler::handleKeyup] Trying to find and execute action for event. Actions/event: ", "color: #ff0", this.keypressActions, event);
|
||||||
|
|
||||||
const isLatin = this.isLatin(event.key);
|
const isLatin = this.isLatin(event.key);
|
||||||
|
|
||||||
for (const command of this.commands) {
|
for (const command of this.keypressActions) {
|
||||||
if (this.isActionMatch(command.shortcut, event, isLatin)) {
|
if (this.isActionMatch(command.shortcut, event, isLatin)) {
|
||||||
this.eventBus.send(command.action, command.arguments);
|
this.eventBus.send(command.action, command.arguments);
|
||||||
}
|
}
|
||||||
@ -214,6 +290,11 @@ class ActionHandler {
|
|||||||
|
|
||||||
|
|
||||||
handleMouseMove(event, videoData?: VideoData) {
|
handleMouseMove(event, videoData?: VideoData) {
|
||||||
|
if (!this.mouseEnabled) {
|
||||||
|
this.logger.log('info', 'keyboard', "%c[ActionHandler::handleKeyup] kbmHandler.keyboardEnabled is set to false. Doing nothing.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.logger.log('info', 'keyboard', "[ActionHandler::handleMouseMove] mouse move is being handled.\nevent:", event, "\nvideo data:", videoData);
|
this.logger.log('info', 'keyboard', "[ActionHandler::handleMouseMove] mouse move is being handled.\nevent:", event, "\nvideo data:", videoData);
|
||||||
console.info('mousemove must be migrated!');
|
console.info('mousemove must be migrated!');
|
||||||
// videoData?.panHandler(event);
|
// videoData?.panHandler(event);
|
||||||
@ -226,4 +307,4 @@ if(process.env.CHANNEL !== 'stable'){
|
|||||||
console.info("ActionHandler loaded");
|
console.info("ActionHandler loaded");
|
||||||
}
|
}
|
||||||
|
|
||||||
export default ActionHandler;
|
export default KbmHandler;
|
@ -99,6 +99,7 @@ class UI {
|
|||||||
* like current zoom levels & current aspect ratio & stuff. Some of these things are
|
* like current zoom levels & current aspect ratio & stuff. Some of these things are
|
||||||
* necessary for UI display in the popup.
|
* necessary for UI display in the popup.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
this.eventBus.subscribe(
|
this.eventBus.subscribe(
|
||||||
'uw-config-broadcast',
|
'uw-config-broadcast',
|
||||||
{
|
{
|
||||||
|
@ -132,14 +132,6 @@ class PageInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setActionHandler(actionHandler) {
|
|
||||||
this.actionHandler = actionHandler;
|
|
||||||
for (let item of this.actionHandlerInitQueue) {
|
|
||||||
this.actionHandler.registerHandleMouse(item);
|
|
||||||
}
|
|
||||||
this.actionHandlerInitQueue = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
getVideos(host) {
|
getVideos(host) {
|
||||||
if (this.settings.active.sites[host]?.DOM?.video?.manual
|
if (this.settings.active.sites[host]?.DOM?.video?.manual
|
||||||
&& this.settings.active.sites[host]?.DOM?.video?.querySelectors){
|
&& this.settings.active.sites[host]?.DOM?.video?.querySelectors){
|
||||||
@ -335,42 +327,6 @@ class PageInfo {
|
|||||||
this.scheduleUrlCheck();
|
this.scheduleUrlCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// these need to be called on tab switch
|
|
||||||
pauseProcessing(playingOnly){
|
|
||||||
if (playingOnly) {
|
|
||||||
for(let vd of this.videos){
|
|
||||||
if (vd.videoData.isPlaying()) {
|
|
||||||
vd.videoData.disable();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(let vd of this.videos){
|
|
||||||
vd.videoData.disable();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
resumeProcessing(resumeAutoar = false, playingOnly = false){
|
|
||||||
if (playingOnly) {
|
|
||||||
for(let vd of this.videos){
|
|
||||||
if (vd.videoData.isPlaying()) {
|
|
||||||
vd.videoData.enable();
|
|
||||||
if(resumeAutoar){
|
|
||||||
vd.videoData.resumeAutoAr();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for(let vd of this.videos){
|
|
||||||
vd.videoData.enable();
|
|
||||||
if(resumeAutoar){
|
|
||||||
vd.videoData.resumeAutoAr();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setArPersistence(persistenceMode) {
|
setArPersistence(persistenceMode) {
|
||||||
// name of this function is mildly misleading — we don't really _set_ ar persistence. (Ar persistence
|
// name of this function is mildly misleading — we don't really _set_ ar persistence. (Ar persistence
|
||||||
// mode is set and saved via popup or keyboard shortcuts, if user defined them) We just save the current
|
// mode is set and saved via popup or keyboard shortcuts, if user defined them) We just save the current
|
||||||
|
Loading…
Reference in New Issue
Block a user