From 627fab3bcb0dd3638c2266397f7194731b081fe9 Mon Sep 17 00:00:00 2001 From: Chrystian Huot Date: Wed, 6 Jan 2021 14:51:27 -0500 Subject: [PATCH] Version 4.9.2 --- CHANGELOG.md | 4 ++ client/package-lock.json | 2 +- client/package.json | 2 +- .../rdio-scanner/main/main.component.ts | 54 ++++++++++++++----- .../rdio-scanner/rdio-scanner.component.ts | 22 +++++++- .../rdio-scanner/rdio-scanner.service.ts | 2 + .../components/rdio-scanner/rdio-scanner.ts | 1 + docs/config.md | 4 ++ package.json | 2 +- server/lib/rdio-scanner/controller.js | 7 ++- server/package-lock.json | 2 +- server/package.json | 2 +- 12 files changed, 83 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39942b6..c8e44d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ _v4.9.1_ - dirWatch.type="trunk-recorder" now deletes the JSON file in case the audio file is missing. - Fix downstream sending wrong talkgroup id. +_v4.9.2_ + +- Add Config.options.disableKeyboardShortcuts to make everyone a happy camper. + # Version 4.8 - Add downstream.system.id_as property to allow export system with a different id. diff --git a/client/package-lock.json b/client/package-lock.json index 1c33c0f..28e1812 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "rdio-scanner-client", - "version": "4.9.1", + "version": "4.9.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/client/package.json b/client/package.json index 7af6d0f..785603f 100644 --- a/client/package.json +++ b/client/package.json @@ -32,5 +32,5 @@ "build": "ng build --base-href ./ --prod", "start": "ng serve" }, - "version": "4.9.1" + "version": "4.9.2" } diff --git a/client/src/app/components/rdio-scanner/main/main.component.ts b/client/src/app/components/rdio-scanner/main/main.component.ts index 970f03a..d31f79b 100644 --- a/client/src/app/components/rdio-scanner/main/main.component.ts +++ b/client/src/app/components/rdio-scanner/main/main.component.ts @@ -118,8 +118,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } - @HostListener('document:keydown.a') - avoid(options?: RdioScannerAvoidOptions): void { + @HostListener('document:keydown.a', ['$event']) + avoid(options?: RdioScannerAvoidOptions, event?: KeyboardEvent): void { + if (event && !this.config?.keyboardShortcuts) { + return; + } + if (this.auth) { this.authFocus(); @@ -144,8 +148,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } - @HostListener('document:keydown.s') - holdSystem(): void { + @HostListener('document:keydown.s', ['$event']) + holdSystem(event?: KeyboardEvent): void { + if (event && !this.config?.keyboardShortcuts) { + return; + } + if (this.auth) { this.authFocus(); @@ -163,8 +171,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } - @HostListener('document:keydown.t') - holdTalkgroup(): void { + @HostListener('document:keydown.t', ['$event']) + holdTalkgroup(event?: KeyboardEvent): void { + if (event && !this.config?.keyboardShortcuts) { + return; + } + if (this.auth) { this.authFocus(); @@ -182,8 +194,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } - @HostListener('document:keydown.l') - livefeed(): void { + @HostListener('document:keydown.l', ['$event']) + livefeed(event?: KeyboardEvent): void { + if (event && !this.config?.keyboardShortcuts) { + return; + } + if (this.auth) { this.authFocus(); @@ -207,8 +223,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } @HostListener('document:keydown.space', ['$event']) - @HostListener('document:keydown.p') + @HostListener('document:keydown.p', ['$event']) pause(event?: KeyboardEvent): void { + if (event && !this.config?.keyboardShortcuts) { + return; + } + event?.preventDefault(); if (this.auth) { @@ -228,8 +248,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } - @HostListener('document:keydown.r') - replay(): void { + @HostListener('document:keydown.r', ['$event']) + replay(event?: KeyboardEvent): void { + if (event && !this.config?.keyboardShortcuts) { + return; + } + if (this.auth) { this.authFocus(); @@ -277,8 +301,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit { } } - @HostListener('document:keydown.n') - skip(options?: { delay?: boolean }): void { + @HostListener('document:keydown.n', ['$event']) + skip(options?: { delay?: boolean }, event?: KeyboardEvent): void { + if (event && !this.config?.keyboardShortcuts) { + return; + } + if (this.auth) { this.authFocus(); diff --git a/client/src/app/components/rdio-scanner/rdio-scanner.component.ts b/client/src/app/components/rdio-scanner/rdio-scanner.component.ts index f49c392..8f76a20 100644 --- a/client/src/app/components/rdio-scanner/rdio-scanner.component.ts +++ b/client/src/app/components/rdio-scanner/rdio-scanner.component.ts @@ -19,7 +19,7 @@ import { Component, ElementRef, HostListener, OnDestroy, ViewChild } from '@angular/core'; import { MatSidenav } from '@angular/material/sidenav'; -import { RdioScannerEvent, RdioScannerLivefeedMode } from './rdio-scanner'; +import { RdioScannerConfig, RdioScannerEvent, RdioScannerLivefeedMode } from './rdio-scanner'; import { AppRdioScannerService } from './rdio-scanner.service'; @Component({ @@ -28,6 +28,8 @@ import { AppRdioScannerService } from './rdio-scanner.service'; templateUrl: './rdio-scanner.component.html', }) export class AppRdioScannerComponent implements OnDestroy { + private config: RdioScannerConfig | undefined; + private eventSubscription = this.appRdioScannerService.event.subscribe((event: RdioScannerEvent) => this.eventHandler(event)); private livefeedMode: RdioScannerLivefeedMode = RdioScannerLivefeedMode.Offline; @@ -65,9 +67,13 @@ export class AppRdioScannerComponent implements OnDestroy { this.eventSubscription.unsubscribe(); } - @HostListener('document:keydown.f') + @HostListener('document:keydown.f', ['$event']) @HostListener('document:keydown.tab', ['$event']) toggleFullscreen(event?: KeyboardEvent): void { + if (event && !this.config?.keyboardShortcuts) { + return; + } + event?.preventDefault(); if (document.fullscreenElement) { @@ -110,6 +116,10 @@ export class AppRdioScannerComponent implements OnDestroy { } private eventHandler(event: RdioScannerEvent): void { + if ('config' in event) { + this.config = event.config; + } + if (event.livefeedMode) { this.livefeedMode = event.livefeedMode; } @@ -117,6 +127,10 @@ export class AppRdioScannerComponent implements OnDestroy { @HostListener('document:keydown.arrowleft', ['$event']) private keyLeftArrow(event?: KeyboardEvent): void { + if (event && !this.config?.keyboardShortcuts) { + return; + } + event?.preventDefault(); if (this.selectPanel?.opened) { @@ -129,6 +143,10 @@ export class AppRdioScannerComponent implements OnDestroy { @HostListener('document:keydown.arrowright', ['$event']) private keyRightArrow(event?: KeyboardEvent): void { + if (event && !this.config?.keyboardShortcuts) { + return; + } + event?.preventDefault(); if (this.searchPanel?.opened) { diff --git a/client/src/app/components/rdio-scanner/rdio-scanner.service.ts b/client/src/app/components/rdio-scanner/rdio-scanner.service.ts index cb58d9a..f747270 100644 --- a/client/src/app/components/rdio-scanner/rdio-scanner.service.ts +++ b/client/src/app/components/rdio-scanner/rdio-scanner.service.ts @@ -74,6 +74,7 @@ export class AppRdioScannerService implements OnDestroy { private config: RdioScannerConfig = { dimmerDelay: false, groups: {}, + keyboardShortcuts: true, keypadBeeps: false, systems: [], tags: {}, @@ -784,6 +785,7 @@ export class AppRdioScannerService implements OnDestroy { this.config = { dimmerDelay: typeof config.dimmerDelay === 'number' ? config.dimmerDelay : 5000, groups: typeof config.groups !== null && typeof config.groups === 'object' ? config.groups : {}, + keyboardShortcuts: config.keyboardShortcuts, keypadBeeps: config.keypadBeeps !== null && typeof config.keypadBeeps === 'object' ? config.keypadBeeps : {}, systems: Array.isArray(config.systems) ? config.systems.slice() : [], tags: typeof config.tags !== null && typeof config.tags === 'object' ? config.tags : {}, diff --git a/client/src/app/components/rdio-scanner/rdio-scanner.ts b/client/src/app/components/rdio-scanner/rdio-scanner.ts index bd2952b..4d04de5 100644 --- a/client/src/app/components/rdio-scanner/rdio-scanner.ts +++ b/client/src/app/components/rdio-scanner/rdio-scanner.ts @@ -73,6 +73,7 @@ export interface RdioScannerCallSource { export interface RdioScannerConfig { dimmerDelay: number | false; groups: { [key: string]: { [key: number]: number[] } }; + keyboardShortcuts: boolean; keypadBeeps: RdioScannerKeypadBeeps | false; systems: RdioScannerSystem[]; tags: { [key: string]: { [key: number]: number[] } }; diff --git a/docs/config.md b/docs/config.md index 30986a6..541c4e3 100644 --- a/docs/config.md +++ b/docs/config.md @@ -63,6 +63,10 @@ This file is at the heart of [Rdio Scanner](https://github.com/chuot/rdio-scanne // Default value is false "disableAudioConversion": false, + // (boolean) Disable the ability to control Rdio Scanner via keyboard shortcuts + // Default value is false + "disableKeyboardShortcuts": false, + // (boolean) Emit beeps when clicking buttons // Default value is 1 which is preset #1 // See KeypadBeeps section below for more details diff --git a/package.json b/package.json index 04759be..e4d0d4f 100644 --- a/package.json +++ b/package.json @@ -10,5 +10,5 @@ "start": "node run", "update": "node update" }, - "version": "4.9.1" + "version": "4.9.2" } diff --git a/server/lib/rdio-scanner/controller.js b/server/lib/rdio-scanner/controller.js index b98f80d..8bac57d 100644 --- a/server/lib/rdio-scanner/controller.js +++ b/server/lib/rdio-scanner/controller.js @@ -334,13 +334,15 @@ class Controller extends EventEmitter { const dimmerDelay = this.config.options.dimmerDelay; + const keyboardShortcuts = !this.config.options.disableKeyboardShortcuts; + const keypadBeeps = options.keypadBeeps === false ? false : options.keypadBeeps === 1 ? defaults.keypadBeeps.uniden : options.keypadBeeps === 2 ? defaults.keypadBeeps.whistler : options.keypadBeeps !== null && typeof options.keypadBeeps === 'object' ? options.keypadBeeps : defaults.keypadBeeps.uniden; - return { dimmerDelay, keypadBeeps }; + return { dimmerDelay, keyboardShortcuts, keypadBeeps }; } getScope(token, store = this.config.access) { @@ -738,6 +740,9 @@ function parseConfig(config) { delete config.disableAudioConversion; } + config.options.disableKeyboardShortcuts = typeof config.options.disableKeyboardShortcuts === 'boolean' + ? config.options.disableKeyboardShortcuts : false; + config.options.keypadBeeps = config.options.keypadBeeps === false ? false : config.options.keyBeep === false ? false : config.options.keypadBeeps !== null && typeof config.options.keypadBeeps === 'object' ? config.options.keypadBeeps diff --git a/server/package-lock.json b/server/package-lock.json index 9cef47a..08c5b6e 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,6 +1,6 @@ { "name": "rdio-scanner-server", - "version": "4.9.1", + "version": "4.9.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/server/package.json b/server/package.json index f387526..5907b34 100644 --- a/server/package.json +++ b/server/package.json @@ -39,5 +39,5 @@ "build": "webpack", "start": "nodemon" }, - "version": "4.9.1" + "version": "4.9.2" }