From 0a33be646cefb9afefc986f7b117b33b0f3f08dc Mon Sep 17 00:00:00 2001 From: Chrystian Huot Date: Thu, 30 Jul 2020 11:11:50 -0400 Subject: [PATCH] Version 4.3.2 --- client/package-lock.json | 62 ++++++------- client/package.json | 22 ++--- .../rdio-scanner/rdio-scanner.component.ts | 2 +- .../rdio-scanner/rdio-scanner.service.ts | 89 +++++++++---------- package.json | 2 +- server/package-lock.json | 16 ++-- server/package.json | 4 +- 7 files changed, 95 insertions(+), 102 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index ae01d96..c238ed7 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "rdio-scanner-client", - "version": "4.3.1", + "version": "4.3.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -226,9 +226,9 @@ } }, "@angular/animations": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-10.0.5.tgz", - "integrity": "sha512-vHWn7NJiiDAok36GSBJ0y/nqjd4UFl9WGIEsvydUqnyBJ0scuqJa+hADrWwqkK7b/xVW9ARVG00NXmemEPUVGA==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-10.0.6.tgz", + "integrity": "sha512-D2cDrfwnVjL0/6m1v35mAYebH2z0I3WJXohhePaDHEKBEXfXpBIbqqSiRpV9jLSa/xgmJPh4FSNVDCmKmuEmfg==", "requires": { "tslib": "^2.0.0" } @@ -285,25 +285,25 @@ } }, "@angular/common": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-10.0.5.tgz", - "integrity": "sha512-AKmD/X13q3zzo5uTV/M4dWpAqJ136187rL4VweRc6b5t/oZ3VGcejjElZebgtoyGTye8luIP6fZ/LMb580lBlQ==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-10.0.6.tgz", + "integrity": "sha512-xS9IJGg6s+Y3K7pe9Oz39Dnpq5uSuUj3HkLKt1db5vPPAeT1qdZ+rdH5hnGwbf8Ihd6ZQacTAlh9W6MnqorZ0w==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-10.0.5.tgz", - "integrity": "sha512-HAh+g78l6F9LcQtlsUmxmM62p6B9UuTt5aAROVLt8o4Dr643VxQS2itiorojKHRW/W6Vu1e8GRke+pq5lM5LJw==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-10.0.6.tgz", + "integrity": "sha512-UyckS8aqd6rSYDOFtpMFN3WtZ2tqJ9b67G4owJn2qKI87otPRe7dOIKAcSailxz0lKSyt1Pf8Bjx9mrlRY6jxg==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler-cli": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.0.5.tgz", - "integrity": "sha512-skeosaJO9mdKp+X3zOdNdpImzTsioM0DannRTPfWI0NbAwlbFCeG3Nctpy+0Ki18WVZ5Lj+hw5BMnVKCjlbu8w==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.0.6.tgz", + "integrity": "sha512-bmOmM0pHbjSrRiybLkuyH/pUs+yOfLskoAXLAjrJtYwplUc17z0WO+Ltb0QmaPKVKxERiBCYQskrKcgCQ7p23g==", "dev": true, "requires": { "canonical-path": "1.0.0", @@ -484,9 +484,9 @@ } }, "@angular/core": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-10.0.5.tgz", - "integrity": "sha512-zoIxIi/UaRImeC1uD+eIKrdcihvQR/zfbqKgK67IPy/tghijxge1Tbl8FWIAT0ncAj0XH/JHsWnVdUV/TUI+CA==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-10.0.6.tgz", + "integrity": "sha512-mk/7XmZg7EeWEgl2UEyhyU6eukm2h+Thw1Ue84aBxMDaqt1RUpsPwpGCfIRfzH9gdzAjJUAPxiHAN2CF+3Wohw==", "requires": { "tslib": "^2.0.0" } @@ -500,9 +500,9 @@ } }, "@angular/forms": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-10.0.5.tgz", - "integrity": "sha512-Bv+KEPjqd+ndl/Z0w1uWsBmvb8Je1JObHRjbKAcW7c4r1CVobm+QJv6r6MDL+FOs78lnrm8baekGLQyHH1uO7g==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-10.0.6.tgz", + "integrity": "sha512-C/+o4lLqyE2QX1brNBxf5yqBPxNpfRA8Rv0Nb1nQE0T6Y/AjyQWxYYl34fD6zk1WQfP3X8bUgkbhHhefmjVZKw==", "requires": { "tslib": "^2.0.0" } @@ -516,25 +516,25 @@ } }, "@angular/platform-browser": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.0.5.tgz", - "integrity": "sha512-bmknyK18yMv+iLCqcrfcpq3/2Ls9mRA1lOe7YhSGpHxM969Rb6Av8vJNW+uv0y7+gTvxacmpiQO8iryr/xvzRg==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.0.6.tgz", + "integrity": "sha512-i3jqfXK6ZNwCJbCadeUC+ZAGvXZ0/k7/LocxKACFQW4a5o1W8aACn8COYDvdKMsT1B+tM9Wv1nDh3qjPZthaXw==", "requires": { "tslib": "^2.0.0" } }, "@angular/platform-browser-dynamic": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.0.5.tgz", - "integrity": "sha512-Qa6RM9aJuuw5E7BeGBG9/kCOtssI6Wyzbb/8awzZFF6Fjqom1kef185nwx7SgQs2cdrhqRAgjt0eDJqTfSVb+Q==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.0.6.tgz", + "integrity": "sha512-ao6i9mEy314SI9Z57JPyKvb4sF61i2RNKHN/XuTpPBIRJ8ryOhG6aS1kN2gNFfj8HmyxZS0zohxTxd+nGitGgw==", "requires": { "tslib": "^2.0.0" } }, "@angular/service-worker": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-10.0.5.tgz", - "integrity": "sha512-9Xew37fKedV6sewU7gkizr/9lNYn83PymqXeiDjf9vcZDkvR2owzWss4Ig+8VMRJJPP1BXKsjkYZv9JtU7gPPw==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-10.0.6.tgz", + "integrity": "sha512-zs2uXkcS/T+jDT5BPrnf5NiLuEvDRN3LEPcaEOB06at0xmcXzZ7Rtnqm9pRx56xyW6bn0YjTPV0T9iyUd4wFfw==", "requires": { "tslib": "^2.0.0" } @@ -1791,9 +1791,9 @@ "dev": true }, "@types/node": { - "version": "14.0.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.26.tgz", - "integrity": "sha512-W+fpe5s91FBGE0pEa0lnqGLL4USgpLgs4nokw16SrBBco/gQxuua7KnArSEOd5iaMqbbSHV10vUDkJYJJqpXKA==", + "version": "14.0.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz", + "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==", "dev": true }, "@types/q": { diff --git a/client/package.json b/client/package.json index c2423b7..73750cb 100644 --- a/client/package.json +++ b/client/package.json @@ -1,17 +1,17 @@ { "author": "Chrystian Huot ", "dependencies": { - "@angular/animations": "^10.0.5", + "@angular/animations": "^10.0.6", "@angular/cdk": "^10.1.1", - "@angular/common": "~10.0.5", - "@angular/compiler": "~10.0.5", - "@angular/core": "~10.0.5", + "@angular/common": "~10.0.6", + "@angular/compiler": "~10.0.6", + "@angular/core": "~10.0.6", "@angular/flex-layout": "^10.0.0-beta.32", - "@angular/forms": "~10.0.5", + "@angular/forms": "~10.0.6", "@angular/material": "^10.1.1", - "@angular/platform-browser": "~10.0.5", - "@angular/platform-browser-dynamic": "~10.0.5", - "@angular/service-worker": "~10.0.5", + "@angular/platform-browser": "~10.0.6", + "@angular/platform-browser-dynamic": "~10.0.6", + "@angular/service-worker": "~10.0.6", "rxjs": "~6.6.0", "tslib": "^2.0.0", "zone.js": "~0.10.3" @@ -19,8 +19,8 @@ "devDependencies": { "@angular-devkit/build-angular": "~0.1000.4", "@angular/cli": "^10.0.4", - "@angular/compiler-cli": "~10.0.5", - "@types/node": "~14.0.26", + "@angular/compiler-cli": "~10.0.6", + "@types/node": "~14.0.27", "codelyzer": "^6.0.0", "ts-node": "~8.10.2", "tslint": "~6.1.2", @@ -33,5 +33,5 @@ "build": "ng build --base-href ./ --prod", "start": "ng serve" }, - "version": "4.3.1" + "version": "4.3.2" } 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 07222fa..6e7127f 100644 --- a/client/src/app/components/rdio-scanner/rdio-scanner.component.ts +++ b/client/src/app/components/rdio-scanner/rdio-scanner.component.ts @@ -66,7 +66,7 @@ export class AppRdioScannerComponent implements AfterViewInit, OnDestroy { callTag = 'Tag'; callTalkgroup = 'Talkgroup'; callTalkgroupId = '0'; - callTalkgroupName = `Rdio Scanner ${appName === 'rdio-scanner-client' ? 'v'.concat(version.replace(/^(\d+\.\d+).*$/, '$1')) : ''}`; + callTalkgroupName = `Rdio Scanner ${appName === 'rdio-scanner-client' ? 'v'.concat(version) : ''}`; callTime = 0; callUnit = '0'; 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 2ac8836..1c5f8c4 100644 --- a/client/src/app/components/rdio-scanner/rdio-scanner.service.ts +++ b/client/src/app/components/rdio-scanner/rdio-scanner.service.ts @@ -58,8 +58,9 @@ export class AppRdioScannerService implements OnDestroy { event = new EventEmitter(); private audioContext: AudioContext | undefined; + private audioSource: AudioBufferSourceNode | undefined; - private audioStartTime = NaN; + private audioSourceStartTime = NaN; private call: RdioScannerCall | undefined; private callPrevious: RdioScannerCall | undefined; @@ -311,7 +312,7 @@ export class AppRdioScannerService implements OnDestroy { if (this.liveFeedPaused) { return; - } else if (call) { + } else if (call?.audio) { if (this.call) { this.stop({ emit: false }); } @@ -325,56 +326,48 @@ export class AppRdioScannerService implements OnDestroy { this.call = this.callQueue.shift(); } - if (this.call?.audio) { - const arrayBuffer = new ArrayBuffer(this.call.audio.data.length); - const arrayBufferView = new Uint8Array(arrayBuffer); + if (!this.call?.audio) { + return; + } - for (let i = 0; i < (this.call.audio.data.length); i++) { - arrayBufferView[i] = this.call.audio.data[i]; - } + const arrayBuffer = new ArrayBuffer(this.call.audio.data.length); + const arrayBufferView = new Uint8Array(arrayBuffer); - this.audioContext?.decodeAudioData(arrayBuffer, (buffer) => { - timer(options?.delay ? 1000 : 0).subscribe(() => { - if (!this.audioContext) { - return; - } + for (let i = 0; i < (this.call.audio.data.length); i++) { + arrayBufferView[i] = this.call.audio.data[i]; + } - this.audioSource = this.audioContext.createBufferSource(); - this.audioSource.buffer = buffer; - this.audioSource.connect(this.audioContext.destination); - this.audioSource.onended = () => this.skip({ delay: true }); - this.audioSource.start(); + this.audioContext?.decodeAudioData(arrayBuffer, (buffer) => { + timer(options?.delay ? 1000 : 0).subscribe(() => { + if (!this.audioContext || !this.call) { + return; + } - this.event.emit({ call: this.call, queue: this.callQueue.length }); + this.audioSource = this.audioContext.createBufferSource(); + this.audioSource.buffer = buffer; + this.audioSource.connect(this.audioContext.destination); + this.audioSource.onended = () => this.skip({ delay: true }); + this.audioSource.start(); - interval(500).pipe(takeWhile(() => !!this.call)).subscribe(() => { - if (this.audioContext && !isNaN(this.audioContext.currentTime)) { - if (isNaN(this.audioStartTime)) { - this.audioStartTime = this.audioContext.currentTime; - } - - if (!this.liveFeedPaused) { - this.event.emit({ time: this.audioContext.currentTime - this.audioStartTime }); - } - } - }); - }); - }, () => { this.event.emit({ call: this.call, queue: this.callQueue.length }); - this.skip(); - }); + interval(500).pipe(takeWhile(() => !!this.call)).subscribe(() => { + if (this.audioContext && !isNaN(this.audioContext.currentTime)) { + if (isNaN(this.audioSourceStartTime)) { + this.audioSourceStartTime = this.audioContext.currentTime; + } - } else if (this.call) { - this.event.emit({ call: undefined, queue: this.callQueue.length }); - } + if (!this.liveFeedPaused) { + this.event.emit({ time: this.audioContext.currentTime - this.audioSourceStartTime }); + } + } + }); + }); + }, () => this.skip()); } queue(call: RdioScannerCall): void { - const sys = call.system; - const tg = call.talkgroup; - - if (call?.audio && this.liveFeedMap && this.liveFeedMap[sys] && this.liveFeedMap[sys][tg]) { + if (call?.audio) { this.callQueue.push(call); if (this.call || this.liveFeedPaused) { @@ -387,9 +380,7 @@ export class AppRdioScannerService implements OnDestroy { } replay(): void { - if (!this.liveFeedPaused) { - this.play(this.call || this.callPrevious, { delay: false }); - } + this.play(this.call || this.callPrevious, { delay: false }); } searchCalls(options: RdioScannerSearchOptions): void { @@ -408,10 +399,9 @@ export class AppRdioScannerService implements OnDestroy { this.audioSource.stop(); this.audioSource.disconnect(); this.audioSource = undefined; + this.audioSourceStartTime = NaN; } - this.audioStartTime = NaN; - if (this.call) { this.callPrevious = this.call; @@ -419,7 +409,7 @@ export class AppRdioScannerService implements OnDestroy { } if (typeof options?.emit !== 'boolean' || options.emit) { - this.event.emit({ call: undefined }); + this.event.emit({ call: undefined, queue: this.callQueue.length }); } } @@ -654,7 +644,10 @@ export class AppRdioScannerService implements OnDestroy { break; default: - if (this.liveFeedActive) { + if (this.liveFeedActive && + this.liveFeedMap && + this.liveFeedMap[message[1].system] && + this.liveFeedMap[message[1].system][message[1].talkgroup]) { this.queue(message[1]); } } diff --git a/package.json b/package.json index bd73497..7da75d4 100644 --- a/package.json +++ b/package.json @@ -11,5 +11,5 @@ "start": "node run", "update": "node update" }, - "version": "4.3.1" + "version": "4.3.2" } diff --git a/server/package-lock.json b/server/package-lock.json index 741a62e..bf6ce78 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,6 +1,6 @@ { "name": "rdio-scanner-server", - "version": "4.3.1", + "version": "4.3.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -2724,12 +2724,12 @@ "optional": true }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "optional": true, "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, @@ -6538,9 +6538,9 @@ } }, "webpack": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.0.tgz", - "integrity": "sha512-wAuJxK123sqAw31SpkPiPW3iKHgFUiKvO7E7UZjtdExcsRe3fgav4mvoMM7vvpjLHVoJ6a0Mtp2fzkoA13e0Zw==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", + "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", diff --git a/server/package.json b/server/package.json index 32fab93..13ee364 100644 --- a/server/package.json +++ b/server/package.json @@ -21,7 +21,7 @@ }, "devDependencies": { "eslint": "^7.5.0", - "webpack": "^4.44.0", + "webpack": "^4.44.1", "webpack-cli": "^3.3.12", "webpack-node-externals": "^2.5.0" }, @@ -39,5 +39,5 @@ "build": "webpack", "start": "nodemon" }, - "version": "4.3.1" + "version": "4.3.2" }