mirror of
https://github.com/chuot/rdio-scanner.git
synced 2026-08-18 02:33:39 -06:00
Version 4.9.2
This commit is contained in:
parent
e8d0f495c1
commit
627fab3bcb
|
|
@ -12,6 +12,10 @@ _v4.9.1_
|
||||||
- dirWatch.type="trunk-recorder" now deletes the JSON file in case the audio file is missing.
|
- dirWatch.type="trunk-recorder" now deletes the JSON file in case the audio file is missing.
|
||||||
- Fix downstream sending wrong talkgroup id.
|
- Fix downstream sending wrong talkgroup id.
|
||||||
|
|
||||||
|
_v4.9.2_
|
||||||
|
|
||||||
|
- Add Config.options.disableKeyboardShortcuts to make everyone a happy camper.
|
||||||
|
|
||||||
# Version 4.8
|
# Version 4.8
|
||||||
|
|
||||||
- Add downstream.system.id_as property to allow export system with a different id.
|
- Add downstream.system.id_as property to allow export system with a different id.
|
||||||
|
|
|
||||||
2
client/package-lock.json
generated
2
client/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "rdio-scanner-client",
|
"name": "rdio-scanner-client",
|
||||||
"version": "4.9.1",
|
"version": "4.9.2",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
||||||
|
|
@ -32,5 +32,5 @@
|
||||||
"build": "ng build --base-href ./ --prod",
|
"build": "ng build --base-href ./ --prod",
|
||||||
"start": "ng serve"
|
"start": "ng serve"
|
||||||
},
|
},
|
||||||
"version": "4.9.1"
|
"version": "4.9.2"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -118,8 +118,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('document:keydown.a')
|
@HostListener('document:keydown.a', ['$event'])
|
||||||
avoid(options?: RdioScannerAvoidOptions): void {
|
avoid(options?: RdioScannerAvoidOptions, event?: KeyboardEvent): void {
|
||||||
|
if (event && !this.config?.keyboardShortcuts) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.auth) {
|
if (this.auth) {
|
||||||
this.authFocus();
|
this.authFocus();
|
||||||
|
|
||||||
|
|
@ -144,8 +148,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('document:keydown.s')
|
@HostListener('document:keydown.s', ['$event'])
|
||||||
holdSystem(): void {
|
holdSystem(event?: KeyboardEvent): void {
|
||||||
|
if (event && !this.config?.keyboardShortcuts) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.auth) {
|
if (this.auth) {
|
||||||
this.authFocus();
|
this.authFocus();
|
||||||
|
|
||||||
|
|
@ -163,8 +171,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('document:keydown.t')
|
@HostListener('document:keydown.t', ['$event'])
|
||||||
holdTalkgroup(): void {
|
holdTalkgroup(event?: KeyboardEvent): void {
|
||||||
|
if (event && !this.config?.keyboardShortcuts) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.auth) {
|
if (this.auth) {
|
||||||
this.authFocus();
|
this.authFocus();
|
||||||
|
|
||||||
|
|
@ -182,8 +194,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('document:keydown.l')
|
@HostListener('document:keydown.l', ['$event'])
|
||||||
livefeed(): void {
|
livefeed(event?: KeyboardEvent): void {
|
||||||
|
if (event && !this.config?.keyboardShortcuts) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.auth) {
|
if (this.auth) {
|
||||||
this.authFocus();
|
this.authFocus();
|
||||||
|
|
||||||
|
|
@ -207,8 +223,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('document:keydown.space', ['$event'])
|
@HostListener('document:keydown.space', ['$event'])
|
||||||
@HostListener('document:keydown.p')
|
@HostListener('document:keydown.p', ['$event'])
|
||||||
pause(event?: KeyboardEvent): void {
|
pause(event?: KeyboardEvent): void {
|
||||||
|
if (event && !this.config?.keyboardShortcuts) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
event?.preventDefault();
|
event?.preventDefault();
|
||||||
|
|
||||||
if (this.auth) {
|
if (this.auth) {
|
||||||
|
|
@ -228,8 +248,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('document:keydown.r')
|
@HostListener('document:keydown.r', ['$event'])
|
||||||
replay(): void {
|
replay(event?: KeyboardEvent): void {
|
||||||
|
if (event && !this.config?.keyboardShortcuts) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.auth) {
|
if (this.auth) {
|
||||||
this.authFocus();
|
this.authFocus();
|
||||||
|
|
||||||
|
|
@ -277,8 +301,12 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('document:keydown.n')
|
@HostListener('document:keydown.n', ['$event'])
|
||||||
skip(options?: { delay?: boolean }): void {
|
skip(options?: { delay?: boolean }, event?: KeyboardEvent): void {
|
||||||
|
if (event && !this.config?.keyboardShortcuts) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.auth) {
|
if (this.auth) {
|
||||||
this.authFocus();
|
this.authFocus();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
import { Component, ElementRef, HostListener, OnDestroy, ViewChild } from '@angular/core';
|
import { Component, ElementRef, HostListener, OnDestroy, ViewChild } from '@angular/core';
|
||||||
import { MatSidenav } from '@angular/material/sidenav';
|
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';
|
import { AppRdioScannerService } from './rdio-scanner.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
|
@ -28,6 +28,8 @@ import { AppRdioScannerService } from './rdio-scanner.service';
|
||||||
templateUrl: './rdio-scanner.component.html',
|
templateUrl: './rdio-scanner.component.html',
|
||||||
})
|
})
|
||||||
export class AppRdioScannerComponent implements OnDestroy {
|
export class AppRdioScannerComponent implements OnDestroy {
|
||||||
|
private config: RdioScannerConfig | undefined;
|
||||||
|
|
||||||
private eventSubscription = this.appRdioScannerService.event.subscribe((event: RdioScannerEvent) => this.eventHandler(event));
|
private eventSubscription = this.appRdioScannerService.event.subscribe((event: RdioScannerEvent) => this.eventHandler(event));
|
||||||
|
|
||||||
private livefeedMode: RdioScannerLivefeedMode = RdioScannerLivefeedMode.Offline;
|
private livefeedMode: RdioScannerLivefeedMode = RdioScannerLivefeedMode.Offline;
|
||||||
|
|
@ -65,9 +67,13 @@ export class AppRdioScannerComponent implements OnDestroy {
|
||||||
this.eventSubscription.unsubscribe();
|
this.eventSubscription.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('document:keydown.f')
|
@HostListener('document:keydown.f', ['$event'])
|
||||||
@HostListener('document:keydown.tab', ['$event'])
|
@HostListener('document:keydown.tab', ['$event'])
|
||||||
toggleFullscreen(event?: KeyboardEvent): void {
|
toggleFullscreen(event?: KeyboardEvent): void {
|
||||||
|
if (event && !this.config?.keyboardShortcuts) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
event?.preventDefault();
|
event?.preventDefault();
|
||||||
|
|
||||||
if (document.fullscreenElement) {
|
if (document.fullscreenElement) {
|
||||||
|
|
@ -110,6 +116,10 @@ export class AppRdioScannerComponent implements OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
private eventHandler(event: RdioScannerEvent): void {
|
private eventHandler(event: RdioScannerEvent): void {
|
||||||
|
if ('config' in event) {
|
||||||
|
this.config = event.config;
|
||||||
|
}
|
||||||
|
|
||||||
if (event.livefeedMode) {
|
if (event.livefeedMode) {
|
||||||
this.livefeedMode = event.livefeedMode;
|
this.livefeedMode = event.livefeedMode;
|
||||||
}
|
}
|
||||||
|
|
@ -117,6 +127,10 @@ export class AppRdioScannerComponent implements OnDestroy {
|
||||||
|
|
||||||
@HostListener('document:keydown.arrowleft', ['$event'])
|
@HostListener('document:keydown.arrowleft', ['$event'])
|
||||||
private keyLeftArrow(event?: KeyboardEvent): void {
|
private keyLeftArrow(event?: KeyboardEvent): void {
|
||||||
|
if (event && !this.config?.keyboardShortcuts) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
event?.preventDefault();
|
event?.preventDefault();
|
||||||
|
|
||||||
if (this.selectPanel?.opened) {
|
if (this.selectPanel?.opened) {
|
||||||
|
|
@ -129,6 +143,10 @@ export class AppRdioScannerComponent implements OnDestroy {
|
||||||
|
|
||||||
@HostListener('document:keydown.arrowright', ['$event'])
|
@HostListener('document:keydown.arrowright', ['$event'])
|
||||||
private keyRightArrow(event?: KeyboardEvent): void {
|
private keyRightArrow(event?: KeyboardEvent): void {
|
||||||
|
if (event && !this.config?.keyboardShortcuts) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
event?.preventDefault();
|
event?.preventDefault();
|
||||||
|
|
||||||
if (this.searchPanel?.opened) {
|
if (this.searchPanel?.opened) {
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,7 @@ export class AppRdioScannerService implements OnDestroy {
|
||||||
private config: RdioScannerConfig = {
|
private config: RdioScannerConfig = {
|
||||||
dimmerDelay: false,
|
dimmerDelay: false,
|
||||||
groups: {},
|
groups: {},
|
||||||
|
keyboardShortcuts: true,
|
||||||
keypadBeeps: false,
|
keypadBeeps: false,
|
||||||
systems: [],
|
systems: [],
|
||||||
tags: {},
|
tags: {},
|
||||||
|
|
@ -784,6 +785,7 @@ export class AppRdioScannerService implements OnDestroy {
|
||||||
this.config = {
|
this.config = {
|
||||||
dimmerDelay: typeof config.dimmerDelay === 'number' ? config.dimmerDelay : 5000,
|
dimmerDelay: typeof config.dimmerDelay === 'number' ? config.dimmerDelay : 5000,
|
||||||
groups: typeof config.groups !== null && typeof config.groups === 'object' ? config.groups : {},
|
groups: typeof config.groups !== null && typeof config.groups === 'object' ? config.groups : {},
|
||||||
|
keyboardShortcuts: config.keyboardShortcuts,
|
||||||
keypadBeeps: config.keypadBeeps !== null && typeof config.keypadBeeps === 'object' ? config.keypadBeeps : {},
|
keypadBeeps: config.keypadBeeps !== null && typeof config.keypadBeeps === 'object' ? config.keypadBeeps : {},
|
||||||
systems: Array.isArray(config.systems) ? config.systems.slice() : [],
|
systems: Array.isArray(config.systems) ? config.systems.slice() : [],
|
||||||
tags: typeof config.tags !== null && typeof config.tags === 'object' ? config.tags : {},
|
tags: typeof config.tags !== null && typeof config.tags === 'object' ? config.tags : {},
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,7 @@ export interface RdioScannerCallSource {
|
||||||
export interface RdioScannerConfig {
|
export interface RdioScannerConfig {
|
||||||
dimmerDelay: number | false;
|
dimmerDelay: number | false;
|
||||||
groups: { [key: string]: { [key: number]: number[] } };
|
groups: { [key: string]: { [key: number]: number[] } };
|
||||||
|
keyboardShortcuts: boolean;
|
||||||
keypadBeeps: RdioScannerKeypadBeeps | false;
|
keypadBeeps: RdioScannerKeypadBeeps | false;
|
||||||
systems: RdioScannerSystem[];
|
systems: RdioScannerSystem[];
|
||||||
tags: { [key: string]: { [key: number]: number[] } };
|
tags: { [key: string]: { [key: number]: number[] } };
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,10 @@ This file is at the heart of [Rdio Scanner](https://github.com/chuot/rdio-scanne
|
||||||
// Default value is false
|
// Default value is false
|
||||||
"disableAudioConversion": 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
|
// (boolean) Emit beeps when clicking buttons
|
||||||
// Default value is 1 which is preset #1
|
// Default value is 1 which is preset #1
|
||||||
// See KeypadBeeps section below for more details
|
// See KeypadBeeps section below for more details
|
||||||
|
|
|
||||||
|
|
@ -10,5 +10,5 @@
|
||||||
"start": "node run",
|
"start": "node run",
|
||||||
"update": "node update"
|
"update": "node update"
|
||||||
},
|
},
|
||||||
"version": "4.9.1"
|
"version": "4.9.2"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -334,13 +334,15 @@ class Controller extends EventEmitter {
|
||||||
|
|
||||||
const dimmerDelay = this.config.options.dimmerDelay;
|
const dimmerDelay = this.config.options.dimmerDelay;
|
||||||
|
|
||||||
|
const keyboardShortcuts = !this.config.options.disableKeyboardShortcuts;
|
||||||
|
|
||||||
const keypadBeeps = options.keypadBeeps === false ? false
|
const keypadBeeps = options.keypadBeeps === false ? false
|
||||||
: options.keypadBeeps === 1 ? defaults.keypadBeeps.uniden
|
: options.keypadBeeps === 1 ? defaults.keypadBeeps.uniden
|
||||||
: options.keypadBeeps === 2 ? defaults.keypadBeeps.whistler
|
: options.keypadBeeps === 2 ? defaults.keypadBeeps.whistler
|
||||||
: options.keypadBeeps !== null && typeof options.keypadBeeps === 'object' ? options.keypadBeeps
|
: options.keypadBeeps !== null && typeof options.keypadBeeps === 'object' ? options.keypadBeeps
|
||||||
: defaults.keypadBeeps.uniden;
|
: defaults.keypadBeeps.uniden;
|
||||||
|
|
||||||
return { dimmerDelay, keypadBeeps };
|
return { dimmerDelay, keyboardShortcuts, keypadBeeps };
|
||||||
}
|
}
|
||||||
|
|
||||||
getScope(token, store = this.config.access) {
|
getScope(token, store = this.config.access) {
|
||||||
|
|
@ -738,6 +740,9 @@ function parseConfig(config) {
|
||||||
delete config.disableAudioConversion;
|
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.keypadBeeps = config.options.keypadBeeps === false ? false
|
||||||
: config.options.keyBeep === false ? false
|
: config.options.keyBeep === false ? false
|
||||||
: config.options.keypadBeeps !== null && typeof config.options.keypadBeeps === 'object' ? config.options.keypadBeeps
|
: config.options.keypadBeeps !== null && typeof config.options.keypadBeeps === 'object' ? config.options.keypadBeeps
|
||||||
|
|
|
||||||
2
server/package-lock.json
generated
2
server/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "rdio-scanner-server",
|
"name": "rdio-scanner-server",
|
||||||
"version": "4.9.1",
|
"version": "4.9.2",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
||||||
|
|
@ -39,5 +39,5 @@
|
||||||
"build": "webpack",
|
"build": "webpack",
|
||||||
"start": "nodemon"
|
"start": "nodemon"
|
||||||
},
|
},
|
||||||
"version": "4.9.1"
|
"version": "4.9.2"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue