Version 5.0.4

This commit is contained in:
Chrystian Huot 2021-02-11 09:28:45 -05:00
parent 3a9f00765b
commit 120c3288df
11 changed files with 3543 additions and 1922 deletions

View file

@ -18,6 +18,13 @@ _v5.0.3_
- Fix error with docker builds where sequelize can't find the sqlite database. - Fix error with docker builds where sequelize can't find the sqlite database.
_v5.0.4_
- Improvement to load-rrdb and load-rr functions.
- Sort groups on the selection panel.
- Allow downstream to other instances running with self-signed certificates.
- Node modules update.
# Version 4.9 # Version 4.9
- Add basic duplicate call detection and rejection. - Add basic duplicate call detection and rejection.

4757
client/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,29 +1,29 @@
{ {
"author": "Chrystian Huot <chrystian.huot@saubeo.solutions>", "author": "Chrystian Huot <chrystian.huot@saubeo.solutions>",
"dependencies": { "dependencies": {
"@angular/animations": "^11.0.7", "@angular/animations": "^11.2.0",
"@angular/cdk": "^11.0.3", "@angular/cdk": "^11.2.0",
"@angular/common": "~11.0.7", "@angular/common": "~11.2.0",
"@angular/compiler": "~11.0.7", "@angular/compiler": "~11.2.0",
"@angular/core": "~11.0.7", "@angular/core": "~11.2.0",
"@angular/forms": "~11.0.7", "@angular/forms": "~11.2.0",
"@angular/material": "^11.0.3", "@angular/material": "^11.2.0",
"@angular/platform-browser": "~11.0.7", "@angular/platform-browser": "~11.2.0",
"@angular/platform-browser-dynamic": "~11.0.7", "@angular/platform-browser-dynamic": "~11.2.0",
"@angular/service-worker": "~11.0.7", "@angular/service-worker": "~11.2.0",
"rxjs": "~6.6.3", "rxjs": "~6.6.3",
"tslib": "^2.1.0", "tslib": "^2.1.0",
"zone.js": "~0.11.3" "zone.js": "~0.11.3"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "~0.1100.6", "@angular-devkit/build-angular": "~0.1101.4",
"@angular/cli": "^11.0.6", "@angular/cli": "^11.1.4",
"@angular/compiler-cli": "~11.0.7", "@angular/compiler-cli": "~11.2.0",
"@types/node": "~14.14.20", "@types/node": "~14.14.25",
"codelyzer": "^6.0.1", "codelyzer": "^6.0.1",
"ts-node": "~9.1.1", "ts-node": "~9.1.1",
"tslint": "~6.1.3", "tslint": "~6.1.3",
"typescript": "~4.0.5" "typescript": "~4.1.5"
}, },
"license": "LICENSE", "license": "LICENSE",
"name": "rdio-scanner-client", "name": "rdio-scanner-client",
@ -32,5 +32,5 @@
"build": "ng build --base-href ./ --prod", "build": "ng build --base-href ./ --prod",
"start": "ng serve" "start": "ng serve"
}, },
"version": "5.0.3" "version": "5.0.4"
} }

View file

@ -1,4 +1,4 @@
<mat-sidenav-container> <mat-sidenav-container [hasBackdrop]="false">
<mat-sidenav #searchPanel [autoFocus]="false" [disableClose]="true" position="start"> <mat-sidenav #searchPanel [autoFocus]="false" [disableClose]="true" position="start">
<div class="panel search"> <div class="panel search">
<mat-toolbar> <mat-toolbar>

View file

@ -451,7 +451,7 @@ export class AppRdioScannerService implements OnDestroy {
} }
queue(call: RdioScannerCall, options?: { priority?: boolean }): void { queue(call: RdioScannerCall, options?: { priority?: boolean }): void {
if (!call?.audio) { if (!call?.audio || this.livefeedMode === RdioScannerLivefeedMode.Offline) {
return; return;
} }
@ -889,7 +889,7 @@ export class AppRdioScannerService implements OnDestroy {
const status = allOff ? RdioScannerGroupStatus.Off : allOn ? RdioScannerGroupStatus.On : RdioScannerGroupStatus.Partial; const status = allOff ? RdioScannerGroupStatus.Off : allOn ? RdioScannerGroupStatus.On : RdioScannerGroupStatus.Partial;
return { label, status }; return { label, status };
}); }).sort((a, b) => a.label.localeCompare(b.label));
} }
private rebuildLivefeedMap(): void { private rebuildLivefeedMap(): void {

View file

@ -10,5 +10,5 @@
"start": "node run", "start": "node run",
"update": "node update" "update": "node update"
}, },
"version": "5.0.3" "version": "5.0.4"
} }

1
server/.gitignore vendored
View file

@ -1,4 +1,5 @@
/.env /.env
/*.crt
/*.pem /*.pem
/*.key /*.key
/config.json* /config.json*

View file

@ -21,7 +21,7 @@
const EventEmitter = require('events'); const EventEmitter = require('events');
const FormData = require('form-data'); const FormData = require('form-data');
const url = require('url'); const { URL } = require('url');
class Downstream { class Downstream {
constructor(ctx = {}) { constructor(ctx = {}) {
@ -111,7 +111,7 @@ class Downstream {
} }
exportCallToRdioScanner(call, downstream) { exportCallToRdioScanner(call, downstream) {
const apiUrl = url.resolve(downstream.url, '/api/call-upload'); const apiUrl = new URL('/api/call-upload', downstream.url);
const form = new FormData(); const form = new FormData();
@ -136,7 +136,13 @@ class Downstream {
form.append('system', this.getSystemId(call, downstream)); form.append('system', this.getSystemId(call, downstream));
form.append('talkgroup', this.getTalkgroupId(call, downstream)); form.append('talkgroup', this.getTalkgroupId(call, downstream));
form.submit(apiUrl, (error, response) => { form.submit({
host: apiUrl.hostname,
path: apiUrl.pathname,
port: apiUrl.port,
protocol: apiUrl.protocol,
rejectUnauthorized: false,
}, (error, response) => {
const message = `Downstream: system=${call.system} talkgroup=${call.talkgroup} file=${call.audioName} to=${downstream.url}`; const message = `Downstream: system=${call.system} talkgroup=${call.talkgroup} file=${call.audioName} to=${downstream.url}`;
if (error) { if (error) {

View file

@ -64,7 +64,7 @@ class Utils {
} }
} }
system.talkgroups.sort((a, b) => a.id - b.id); system.talkgroups.sort((a, b) => a.label.localeCompare(b.label));
this.config.systems = this.config.systems.filter((system) => system.id !== sysId); this.config.systems = this.config.systems.filter((system) => system.id !== sysId);
@ -99,18 +99,19 @@ class Utils {
}; };
for (let line of csv) { for (let line of csv) {
const encrypted = typeof line[2] === 'string' ? line[2].includes('E') : false;
const id = parseInt(line[0], 10); const id = parseInt(line[0], 10);
const label = line[3] || ''; const label = line[3] || '';
const name = line[4] || ''; const name = line[4] || '';
const tag = line[5] || ''; const tag = line[5] || '';
const group = line[6] || ''; const group = line[6] || '';
if (id > 0 && label.length && name.length && tag.length && group.length) { if (!encrypted && id > 0 && label.length && name.length && tag.length && group.length) {
system.talkgroups.push({ id, label, name, tag, group }); system.talkgroups.push({ id, label, name, tag, group });
} }
} }
system.talkgroups.sort((a, b) => a.id - b.id); system.talkgroups.sort((a, b) => a.label.localeCompare(b.label));
this.config.systems = this.config.systems.filter((system) => system.id !== sysId); this.config.systems = this.config.systems.filter((system) => system.id !== sysId);

605
server/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,28 +1,28 @@
{ {
"author": "Chrystian Huot <chrystian.huot@saubeo.solutions>", "author": "Chrystian Huot <chrystian.huot@saubeo.solutions>",
"dependencies": { "dependencies": {
"chokidar": "^3.5.0", "chokidar": "^3.5.1",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"express": "^4.17.1", "express": "^4.17.1",
"form-data": "^3.0.0", "form-data": "^3.0.0",
"helmet": "^4.3.1", "helmet": "^4.4.1",
"mariadb": "^2.5.2", "mariadb": "^2.5.2",
"mime-types": "^2.1.28", "mime-types": "^2.1.28",
"multer": "^1.4.2", "multer": "^1.4.2",
"mysql2": "^2.2.5", "mysql2": "^2.2.5",
"nodemon": "^2.0.7", "nodemon": "^2.0.7",
"pg": "^8.5.1", "pg": "^8.5.1",
"sequelize": "^6.3.5", "sequelize": "^6.5.0",
"sqlite3": "^5.0.1", "sqlite3": "^5.0.1",
"umzug": "^2.3.0", "umzug": "^2.3.0",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"ws": "^7.4.2" "ws": "^7.4.3"
}, },
"devDependencies": { "devDependencies": {
"eslint": "^7.17.0", "eslint": "^7.19.0",
"webpack": "^5.12.1", "webpack": "^5.21.2",
"webpack-cli": "^4.3.1", "webpack-cli": "^4.5.0",
"webpack-node-externals": "^2.5.2" "webpack-node-externals": "^2.5.2"
}, },
"license": "LICENSE", "license": "LICENSE",
@ -39,5 +39,5 @@
"build": "webpack", "build": "webpack",
"start": "nodemon" "start": "nodemon"
}, },
"version": "5.0.3" "version": "5.0.4"
} }