Version 4.3.2

This commit is contained in:
Chrystian Huot 2020-07-30 11:11:50 -04:00
parent 7cdee6c7bd
commit 0a33be646c
7 changed files with 95 additions and 102 deletions

View file

@ -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": {

View file

@ -1,17 +1,17 @@
{
"author": "Chrystian Huot <chrystian.huot@saubeo.solutions>",
"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"
}

View file

@ -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';

View file

@ -58,8 +58,9 @@ export class AppRdioScannerService implements OnDestroy {
event = new EventEmitter<RdioScannerEvent>();
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]);
}
}

View file

@ -11,5 +11,5 @@
"start": "node run",
"update": "node update"
},
"version": "4.3.1"
"version": "4.3.2"
}

View file

@ -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",

View file

@ -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"
}