diff --git a/client/package-lock.json b/client/package-lock.json index d697ed5..f6e2b9b 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "rdio-scanner-client", - "version": "4.4.2", + "version": "4.4.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -234,9 +234,9 @@ } }, "@angular/animations": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-10.0.9.tgz", - "integrity": "sha512-NcQOlLQNR50qIvEjR/yo28P6Nh0hf9GRuy+4iCxHiRNZyBL8AwX/y+8/NpgSRoL/U+Iq4bXz5DSOkmrtZfFHXg==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-10.0.10.tgz", + "integrity": "sha512-lIbNeLVVl9bO41orPFpKoobCvxZIZ2wdcKJBEFtQiOdw0khRQQ8k7so4TAWOZXRJR+MkOUCjU2pO8gbMXgBweQ==", "requires": { "tslib": "^2.0.0" } @@ -293,25 +293,25 @@ } }, "@angular/common": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-10.0.9.tgz", - "integrity": "sha512-zg1xtTR8LwLXfTcXX0rL30ur1GKaf3Iu8FCQpfh0804Ezn5TeovuGg2zvf/O3igwmYzrym+a0JRMe4TZsAuJxQ==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-10.0.10.tgz", + "integrity": "sha512-p6/pTk0s0Ai5uUkOHHFZwp+TjxRNPldPxTU2LVxg2xuBEQTO53BsfBKn3zi74epdb1kBC0Yjdj6yEL4dITBs7A==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-10.0.9.tgz", - "integrity": "sha512-KUIRkOoZ0C7IlJ514ahyA1VDmlLrh9wBF/hm6e7fKMUAzPTwch6WQczjw/Bdt8ArL3ovYasbFungBvJ7apENtw==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-10.0.10.tgz", + "integrity": "sha512-fO7kml0HUgnMa5eviKUk+j7NACASkoMAEgvbcVdKmGsSDu9YVkaqSdLXuj2vu9glSJWDRkZJKSrt9MzbmhyB5A==", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler-cli": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.0.9.tgz", - "integrity": "sha512-E4WxTYO4zY7ytMna5Y8Yoh58KPJKjDn3tzefLNrBEX3t69XueYmh5JTRHmNOiWcFX2QIbgqzX9mXZ9uPLDslmg==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.0.10.tgz", + "integrity": "sha512-XkvWdJKr6HkyzAbcmy99HyDR4z949z9nHGwHNLBQjLbkX11i03fvS3bI5kgwqtNiLWYqxiPfXnpAyLBeFghCcw==", "dev": true, "requires": { "canonical-path": "1.0.0", @@ -492,9 +492,9 @@ } }, "@angular/core": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-10.0.9.tgz", - "integrity": "sha512-sRod8RnARYmMy/uBmZyLxt5F3vYIvAkTEv48DFvCKJ6FN7zJPS7C7/dnnDv0JG7hNsX3jVXCsIRWJiCk0ycDGg==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-10.0.10.tgz", + "integrity": "sha512-PIQhLqjZayVXJoXs4WQu7orkePqFiux19y7bgBrsSAithe+g9BkrSIdX7+tkkX0zggUWKywY92YuMZCJ/S+uiw==", "requires": { "tslib": "^2.0.0" } @@ -508,9 +508,9 @@ } }, "@angular/forms": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-10.0.9.tgz", - "integrity": "sha512-t/ZjPFHz5LLj5osvNTkBibcF5Y1XrOwmgX8e6FPl2OTM/NcEyqUPWQmcGhy1Wc7jxP6JVWSWLrqI5QKkATHSBA==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-10.0.10.tgz", + "integrity": "sha512-bWjbsqMTiCNQZzXAfiEwT/tiAzSvChnqBimrJWNSHVYRkp71TkDcKXn6mA+E//YR0eZ84GKNNiVlKFxqkmeyqQ==", "requires": { "tslib": "^2.0.0" } @@ -524,25 +524,25 @@ } }, "@angular/platform-browser": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.0.9.tgz", - "integrity": "sha512-y6d2CLj6ZM0NpJGH5yfNBTVyMiOwUXFfVRw52MWQ4Kt2Auk0EROG6dWAVL0XcE9OGXBI/U/4wemmQ9LQy7wLSA==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.0.10.tgz", + "integrity": "sha512-srNGkvg9177skff7QOe3L+nGOSbrKLzFt3Z5O3oM0N0TWr8QlWEA+zQm8n0zLHI8AmdZbmFzAYYJiBvVCSc5RQ==", "requires": { "tslib": "^2.0.0" } }, "@angular/platform-browser-dynamic": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.0.9.tgz", - "integrity": "sha512-iRkBAErsYNG5lPglA8bZfsKQTuVBAl6IVc0TNlGNCePQM1blZ0f2BjMoqBWrbTi5xGgGu2cmJcy9M6hob2sgzw==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.0.10.tgz", + "integrity": "sha512-6jbn0Ldyc+80BCETGtE7pzfKlbjfa/wEPhLEGWoYtxrrJ5UB3CblGpDMOsv1ibOQijPZ/JSmIMmAxz66+pLx3g==", "requires": { "tslib": "^2.0.0" } }, "@angular/service-worker": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-10.0.9.tgz", - "integrity": "sha512-hrngIkRHhMQaJ0D61kkgstLVDjOASy8j0f+z9AHO4GlILeQlCxzHb5gqd5L6zkQ7MMs8BDSP9JBKw+Tonj4e1A==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-10.0.10.tgz", + "integrity": "sha512-YcblyEhTjfO7BEYK6UlAqTsgPcz16ftaeAraNwE+5p2igxeuyq7LGFTaQGM8nJkK0wWxNU42Nr/3VluwqyU8Xg==", "requires": { "tslib": "^2.0.0" } @@ -1810,9 +1810,9 @@ "dev": true }, "@types/node": { - "version": "14.0.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz", - "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==", + "version": "14.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.0.tgz", + "integrity": "sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA==", "dev": true }, "@types/q": { @@ -2951,9 +2951,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001114", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001114.tgz", - "integrity": "sha512-ml/zTsfNBM+T1+mjglWRPgVsu2L76GAaADKX5f4t0pbhttEp0WMawJsHDYlFkVZkoA+89uvBRrVrEE4oqenzXQ==", + "version": "1.0.30001116", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz", + "integrity": "sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ==", "dev": true }, "canonical-path": { @@ -3197,6 +3197,12 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", "dev": true + }, + "zone.js": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", + "dev": true } } }, @@ -4302,9 +4308,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.533", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.533.tgz", - "integrity": "sha512-YqAL+NXOzjBnpY+dcOKDlZybJDCOzgsq4koW3fvyty/ldTmsb4QazZpOWmVvZ2m0t5jbBf7L0lIGU3BUipwG+A==", + "version": "1.3.538", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.538.tgz", + "integrity": "sha512-rlyYXLlOoZkJuvY4AJXUpP7CHRVtwZz311HPVoEO1UHo/kqDCsP1pNas0A9paZuPEiYGdLwrjllF2hs69NEaTw==", "dev": true }, "elliptic": { @@ -7339,9 +7345,9 @@ } }, "npm-registry-fetch": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.6.tgz", - "integrity": "sha512-SEp9m7fPe8FIKzhg2JS+xs+w4YY9mEwRlMcEZRELph7rdoygIQGY6B+g0+wdZqokHE8f57ZkexxYWqFO0FkfCw==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", + "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", "dev": true, "requires": { "JSONStream": "^1.3.4", @@ -12305,9 +12311,12 @@ "dev": true }, "zone.js": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", - "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==" + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.0.tgz", + "integrity": "sha512-Aeh31lIySDLetjIyTxk1X+j6jxWPHH99cLuOreApK0hNrEogxEO+cPhx5wQaeg7d7KcAFWrA6ZlIVTv7MTasyA==", + "requires": { + "tslib": "^2.0.0" + } } } } diff --git a/client/package.json b/client/package.json index 171079f..1f5309d 100644 --- a/client/package.json +++ b/client/package.json @@ -1,26 +1,26 @@ { "author": "Chrystian Huot ", "dependencies": { - "@angular/animations": "^10.0.9", + "@angular/animations": "^10.0.10", "@angular/cdk": "^10.1.3", - "@angular/common": "~10.0.9", - "@angular/compiler": "~10.0.9", - "@angular/core": "~10.0.9", + "@angular/common": "~10.0.10", + "@angular/compiler": "~10.0.10", + "@angular/core": "~10.0.10", "@angular/flex-layout": "^10.0.0-beta.32", - "@angular/forms": "~10.0.9", + "@angular/forms": "~10.0.10", "@angular/material": "^10.1.3", - "@angular/platform-browser": "~10.0.9", - "@angular/platform-browser-dynamic": "~10.0.9", - "@angular/service-worker": "~10.0.9", + "@angular/platform-browser": "~10.0.10", + "@angular/platform-browser-dynamic": "~10.0.10", + "@angular/service-worker": "~10.0.10", "rxjs": "~6.6.2", "tslib": "^2.0.1", - "zone.js": "~0.10.3" + "zone.js": "~0.11.0" }, "devDependencies": { "@angular-devkit/build-angular": "~0.1000.6", "@angular/cli": "^10.0.6", - "@angular/compiler-cli": "~10.0.9", - "@types/node": "~14.0.27", + "@angular/compiler-cli": "~10.0.10", + "@types/node": "~14.6.0", "codelyzer": "^6.0.0", "ts-node": "~8.10.2", "tslint": "~6.1.3", @@ -33,5 +33,5 @@ "build": "ng build --base-href ./ --prod", "start": "ng serve" }, - "version": "4.4.2" + "version": "4.4.3" } diff --git a/docs/config.md b/docs/config.md index 8ebb180..afaac48 100644 --- a/docs/config.md +++ b/docs/config.md @@ -10,94 +10,94 @@ This file is at the heart of [Rdio Scanner](https://github.com/chuot/rdio-scanne ``` js { - "nodejs": { - // (string) "development" or "production". Default is "production". - "environment": "production", + "nodejs": { + // (string) "development" or "production". Default is "production". + "environment": "production", - // (string) Which IP to bind to? Default is "0.0.0.0" - "host": "0.0.0.0", + // (string) Which IP to bind to? Default is "0.0.0.0" + "host": "0.0.0.0", - // (number) Which PORT to bind to? Default is 3000 - "port": 3000, + // (number) Which PORT to bind to? Default is 3000 + "port": 3000, - // (string) Path to the SSL CA certificate - // See SSL certificates section below for more details - "sslCA": null, + // (string) Path to the SSL CA certificate + // See SSL certificates section below for more details + "sslCA": null, - // (string) Path to the SSL certificate - // See SSL certificates section below for more details - "sslCert": null, + // (string) Path to the SSL certificate + // See SSL certificates section below for more details + "sslCert": null, - // (string) Path to the SSL privat key - // See SSL certificates section below for more details - "sslKey": null - }, + // (string) Path to the SSL privat key + // See SSL certificates section below for more details + "sslKey": null + }, - "rdioScanner": { - // (multiple types) Access control for Rdio Scanner - // See Access control section below for more details - "access": null, + "rdioScanner": { + // (multiple types) Access control for Rdio Scanner + // See Access control section below for more details + "access": null, - // (multiple types) API keys for upload scripts and downstreamers - // Default value is a random generated UUID - // See API keys section below for more details - "apiKeys": "", + // (multiple types) API keys for upload scripts and downstreamers + // Default value is a random generated UUID + // See API keys section below for more details + "apiKeys": "", - // (object[]) Directory monitoring for ingestion of audio files - // Default value is an empty array - // See DirWatch section below for more details - "dirWatch": [] + // (object[]) Directory monitoring for ingestion of audio files + // Default value is an empty array + // See DirWatch section below for more details + "dirWatch": [] - // (object[]) Downstream audio files to other Rdio Scanner instances - // Default value is an empty array - // See Downstreams section below for more details - "downstreams": [], + // (object[]) Downstream audio files to other Rdio Scanner instances + // Default value is an empty array + // See Downstreams section below for more details + "downstreams": [], - // (object) Options definitions - "options": { - // (boolean) Can users download archived calls. Default value is true - "allowDownload": true, + // (object) Options definitions + "options": { + // (boolean) Can users download archived calls. Default value is true + "allowDownload": true, - // (boolean) Disable the audio format conversion to m4a/aac - // Default value is false - "disableAudioConversion": false, + // (boolean) Disable the audio format conversion to m4a/aac + // Default value is false + "disableAudioConversion": false, - // (number) Clear the database for audio files older than the specified number of days - // Default value is 7 - // Specifying a value of 0 will disable this feature - "pruneDays": 7 + // (number) Clear the database for audio files older than the specified number of days + // Default value is 7 + // Specifying a value of 0 will disable this feature + "pruneDays": 7 - // (boolean) Turn off the screen backlight when it is inactive - // Default value is true - "useDimmer": true + // (boolean) Turn off the screen backlight when it is inactive + // Default value is true + "useDimmer": true - // (boolean) Also toggle talkgroups based on their group assignment - // Default value is true - // See Systems section below for more details on groups - "useGroup": true + // (boolean) Also toggle talkgroups based on their group assignment + // Default value is true + // See Systems section below for more details on groups + "useGroup": true - // (boolean) Show the activity led - // Default value is true - "useLed": true + // (boolean) Show the activity led + // Default value is true + "useLed": true + } + + // (object[]) Systems definitions + // See Systems section below for more details + "systems": [] + }, + + // Radio Scanner uses sqlite for its default database + // It is recommended to stick to sqlite as it works very well + // Refer to https://sequelize.org/v5/manual/dialects.html for more details + "sequelize": { + "database": null, + "dialect": "sqlite", + "host": null, + "password": null, + "port": null, + "storage": "database.sqlite", + "username": null } - - // (object[]) Systems definitions - // See Systems section below for more details - "systems": [] - }, - - // Radio Scanner uses sqlite for its default database - // It is recommended to stick to sqlite as it works very well - // Refer to https://sequelize.org/v5/manual/dialects.html for more details - "sequelize": { - "database": null, - "dialect": "sqlite", - "host": null, - "password": null, - "port": null, - "storage": "database.sqlite", - "username": null - } } ``` @@ -162,38 +162,46 @@ access: null | string | string[] | { } ``` -Default value is `null`. +Default value is `null` . **Examples** -- No access control, access to all systems/talkgroups +* No access control, access to all systems/talkgroups - ``` json + + +``` json "access": null ``` -- Single unique password, access to all systems/talkgroups +* Single unique password, access to all systems/talkgroups - ``` json + + +``` json "access": "password" ``` or - ``` json + + +``` json "access": { "code": "password", "systems": "*" } ``` -- Complex access control +* Complex access control - `password1` gives access to system 11 / talkgroups 54241, 54125 and system 21 / talkgroups 60040, 60041, 50003. +`password1` gives access to system 11 / talkgroups 54241, 54125 and system 21 / talkgroups 60040, 60041, 50003. - `password2` and `password3` give access to all systems/talkgroups. +`password2` and `password3` give access to all systems/talkgroups. - ``` json + + +``` json "access": [ { "code": "password1", @@ -246,32 +254,38 @@ apiKeys: null | string | string[] | { } ``` -Default value is an empty array `[]`. +Default value is an empty array `[]` . **Examples** -- Single API key which allows upload to any systems/talkgroups +* Single API key which allows upload to any systems/talkgroups - ``` json + + +``` json "apiKeys": "d2079382-07df-4aa9-8940-8fb9e4ef5f2e" ``` or - ``` json + + +``` json "access": { "key": "d2079382-07df-4aa9-8940-8fb9e4ef5f2e", "systems": "*" } ``` -- Complex API keys definition +* Complex API keys definition API key `d2079382-07df-4aa9-8940-8fb9e4ef5f2e` gives access to system 11 / talkgroups 54241, 54125 and system 21 / talkgroups 60040, 60041, 50003. API keys `cfcfa7d5-897c-4b96-b974-2fec80c3f775` and `a3ac707e-eaf9-4951-a9d5-c52186fa5093` give access to all systems/talkgroups. - ``` json + + +``` json "apiKeys": [ { "key": "d2079382-07df-4aa9-8940-8fb9e4ef5f2e", @@ -322,35 +336,37 @@ dirWatch: { }[] ``` -- **delay** - Depending on the recorder, audio files can be ingested too soon after the recorder has created the file. You can set a timeout value in *milliseconds* for the audio file to settle before ingesting it. -- **deleteAfter** - You may want the audio file to be deleted after being ingested. If this value is *true*, all pre-existing audio files will be ingested and deleted as soon as [Rdio Scanner](https://github.com/chuot/rdio-scanner) starts. When this parameter is *false*, pre-existing audio files are neither ingested nor deleted. -- **directory** - Absolute or relatives to [Rdio Scanner](https://github.com/chuot/rdio-scanner)'s. Path of the directory to be monitored. **This value must be unique**. -- **extension** - The audio call extension to monitor without the period. Ex.: "mp3", "wav". -- **frequency** - You may want to fake the frequency which will be displayed on *Rdio Scanner*. Let say that you are recording an AM frequency from *RTLSDR-Airband*, here you would put that frequency. -- **frequency** - You may want to simulate the frequency that will be displayed. Say you are recording an AM frequency from *RTLSDR-Airband*, here you would put that frequency. -- **mask** - Some metadata can be extracted from the file name of the audio file using specific META tags. Here is the list: - - **#DATE** - extract the date like *20200608* or *2020-06-08*. - - **#HZ** - extract the frequency in hertz like *119100000*. - - **#KHZ** - extract the frequency in kilohertz like *119100*. - - **#MHZ** - extract the frequency in megahertz like *119.100*. - - **#TIME** - extract the *local* time like *0853439* or *08:34:39*. - - **#SYS** - extract the system id like *11*. - - **#TG** - extract the talkgroup id like *54241*. - - **#UNIT** - extract the unit id like *4424001*. - - **#ZTIME** - extract the *zulu* time like *0453439* or *04:34:39*. -- **system** - A valid system id defined in **rdioScanner.systems**. -- **talkgroup** - A valid talkgroup id defined in **rdioScanner.systems**. -- **type** - In case of *Trunk Recorder*, the metadata of the *JSON file* will be used. +* **delay** - Depending on the recorder, audio files can be ingested too soon after the recorder has created the file. You can set a timeout value in *milliseconds* for the audio file to settle before ingesting it. +* **deleteAfter** - You may want the audio file to be deleted after being ingested. If this value is *true*, all pre-existing audio files will be ingested and deleted as soon as [Rdio Scanner](https://github.com/chuot/rdio-scanner) starts. When this parameter is *false*, pre-existing audio files are neither ingested nor deleted. +* **directory** - Absolute or relatives to [Rdio Scanner](https://github.com/chuot/rdio-scanner)'s. Path of the directory to be monitored. **This value must be unique**. +* **extension** - The audio call extension to monitor without the period. Ex.: "mp3", "wav". +* **frequency** - You may want to fake the frequency which will be displayed on *Rdio Scanner*. Let say that you are recording an AM frequency from *RTLSDR-Airband*, here you would put that frequency. +* **frequency** - You may want to simulate the frequency that will be displayed. Say you are recording an AM frequency from *RTLSDR-Airband*, here you would put that frequency. +* **mask** - Some metadata can be extracted from the file name of the audio file using specific META tags. Here is the list: + + **#DATE** - extract the date like *20200608* or *2020-06-08*. + + **#HZ** - extract the frequency in hertz like *119100000*. + + **#KHZ** - extract the frequency in kilohertz like *119100*. + + **#MHZ** - extract the frequency in megahertz like *119.100*. + + **#TIME** - extract the *local* time like *0853439* or *08:34:39*. + + **#SYS** - extract the system id like *11*. + + **#TG** - extract the talkgroup id like *54241*. + + **#UNIT** - extract the unit id like *4424001*. + + **#ZTIME** - extract the *zulu* time like *0453439* or *04:34:39*. +* **system** - A valid system id defined in **rdioScanner.systems**. +* **talkgroup** - A valid talkgroup id defined in **rdioScanner.systems**. +* **type** - In case of *Trunk Recorder*, the metadata of the *JSON file* will be used. > Note that [Rdio Scanner](https://github.com/chuot/rdio-scanner) must know the **system id** and the **talkgroup id** for the call to be ingested. These two values must be specified either by **dirWatch.system**, **dirWatch.talkgroup**, **dirWatch.mask** or a mix of them. **dirWatch.system** and **dirWatch.talkgroup** have priority over **dirWatch.mask**. -Default value is an empty array `[]`. +Default value is an empty array `[]` . **Examples** -- Ingest audio files from **Trunk Recorder** +* Ingest audio files from **Trunk Recorder** - ``` json + + +``` json "dirWatch": [ { "deleteAfter": true, @@ -369,9 +385,11 @@ Default value is an empty array `[]`. ] ``` -- Ingest audio files from **RTLSDR-Airband** +* Ingest audio files from **RTLSDR-Airband** - ``` json + + +``` json "dirWatch": [ { "deleteAfter": true, @@ -385,9 +403,11 @@ Default value is an empty array `[]`. ] ``` -- Ingest audio files from **SDRTrunk** +* Ingest audio files from **SDRTrunk** - ``` json + + +``` json "dirWatch": [ { "deleteAfter": true, @@ -404,7 +424,7 @@ Ingested audio calls can be sent downstream to other [Rdio Scanner](https://gith This is handy if you want to build a mesh of [Rdio Scanner](https://github.com/chuot/rdio-scanner). Let's say you want to exchange audio files with your friend who lives in another city. Or you want to ingest audio files from a Digital Logger through an internal instance and transfer these audio files to your public instance. -> Remember that the API key you will use must be correctly configured on the receiving host as for the system and the talkgroup. +> Remember that the API key you will use must be correctly configured on the receiving host. **Structure of the rdioScanner.downstreams object** @@ -414,16 +434,16 @@ downstreams: { disabled: boolean; systems: number | number[] | { id: number; - talkgroups: number | number[]; + talkgroups: number | number[] | "*" | undefined; } | { id: number; talkgroups: number | number[]; - }[] | "*"; + }[] | "*" | undefined; url: string; }[] ``` -Default value is an empty array `[]`. +Default value is an empty array `[]` . **Examples** @@ -440,6 +460,13 @@ Default value is an empty array `[]`. 54125 ] }, + { + "id": 12 + }, + { + "id": 15, + "talkgroups": "*" + }, { "id": 21, "talkgroups": [ @@ -447,7 +474,8 @@ Default value is an empty array `[]`. 60041, 50003 ] - } + }, + 31 ], "url": "http://rdio-scanner.example.com:3000/" }, @@ -460,6 +488,8 @@ Default value is an empty array `[]`. ] ``` +> Note in this example for API key `d2079382-07df-4aa9-8940-8fb9e4ef5f2e` that systems 12, 15 and 31 will downstream all of their talkgroups, unlike systems 11 and 21 which will only downstream some of their talkgroups. + ## Systems - rdioScanner.systems The heart of [Rdio Scanner](https://github.com/chuot/rdio-scanner) where all your systems and talkgroups are defined. Audio files to unknown systems / talkgroups will not be ingested. @@ -487,29 +517,29 @@ systems: { }[] ``` -- **id** - System ID. -- **label** - System label shown on the left side of second row. -- **led** - Optional LED color for the whole system. By default the LED is *green*. -- **talkgroups** - Talkgroups for the system. - - **id** - Talkgroup ID. - - **label** - Talkgroup label shown on the left side of third row. - - **name** - Talkgroup name shown on the fouth row. - - **patches** - Array of talkgroup ID to include in this talkgroup. - - **tag** - Talkgroup tag shown on the right side of second row. -- **units** - Unit aliases. - - **id** - Unit ID. - - **label** - Unit label shown on the right side of six sixth row. +* **id** - System ID. +* **label** - System label shown on the left side of second row. +* **led** - Optional LED color for the whole system. By default the LED is *green*. +* **talkgroups** - Talkgroups for the system. + + **id** - Talkgroup ID. + + **label** - Talkgroup label shown on the left side of third row. + + **name** - Talkgroup name shown on the fouth row. + + **patches** - Array of talkgroup ID to include in this talkgroup. + + **tag** - Talkgroup tag shown on the right side of second row. +* **units** - Unit aliases. + + **id** - Unit ID. + + **label** - Unit label shown on the right side of six sixth row. ## Load a system from RadioReference.com You may want to load your `server/config.json` with some systems from [RadioReference.com](https://radioreference.com/). -You can choose any `system_id` you want to refer to this system. If you choose an existing `system_id` in `config.json`, you will replace it with the new one. +You can choose any `system_id` you want to refer to this system. If you choose an existing `system_id` in `config.json` , you will replace it with the new one. See examples in the installation documents: -- [Install from the Docker Image](./install-docker.md) -- [Install from the GitHub Repository](./install-github.md) +* [Install from the Docker Image](./install-docker.md) +* [Install from the GitHub Repository](./install-github.md) > Note that [Rdio Scanner](https://github.com/chuot/rdio-scanner) has been designed to resemble old school radio scanners where each talkgroup has its own toggle button on the **SELECT TG** panel. Loading too many systems/talkgroups will make the web application very slow. Depending on your use case, you may want to have no more than 400 talkgroups. diff --git a/package.json b/package.json index 11ecdea..a0e095a 100644 --- a/package.json +++ b/package.json @@ -11,5 +11,5 @@ "start": "node run", "update": "node update" }, - "version": "4.4.2" + "version": "4.4.3" } diff --git a/server/lib/rdio-scanner/downstream.js b/server/lib/rdio-scanner/downstream.js index 8571b99..ec2f03f 100644 --- a/server/lib/rdio-scanner/downstream.js +++ b/server/lib/rdio-scanner/downstream.js @@ -67,7 +67,7 @@ class Downstream { return talkgroup === call.talkgroup; } else { - return talkgroup === '*'; + return talkgroup === undefined || talkgroup === '*'; } }; @@ -84,7 +84,7 @@ class Downstream { return system === '*'; } else { - return true; + return false; } }; diff --git a/server/package-lock.json b/server/package-lock.json index de677b9..7883473 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,6 +1,6 @@ { "name": "rdio-scanner-server", - "version": "4.4.2", + "version": "4.4.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -4438,9 +4438,9 @@ "optional": true }, "pg": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.3.0.tgz", - "integrity": "sha512-jQPKWHWxbI09s/Z9aUvoTbvGgoj98AU7FDCcQ7kdejupn/TcNpx56v2gaOTzXkzOajmOEJEdi9eTh9cA2RVAjQ==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.3.2.tgz", + "integrity": "sha512-hOoRCTriXS+VWwyXHchRjWb9yv3Koq8irlwwXniqhdgK0AbfWvEnybGS2HIUE+UdCSTuYAM4WGPujFpPg9Vcaw==", "requires": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -6081,9 +6081,9 @@ "optional": true }, "update-notifier": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", - "integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.1.tgz", + "integrity": "sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg==", "requires": { "boxen": "^4.2.0", "chalk": "^3.0.0", diff --git a/server/package.json b/server/package.json index 397c236..1e02ed1 100644 --- a/server/package.json +++ b/server/package.json @@ -12,7 +12,7 @@ "multer": "^1.4.2", "mysql2": "^2.1.0", "nodemon": "^2.0.4", - "pg": "^8.3.0", + "pg": "^8.3.2", "sequelize": "^6.3.4", "sqlite3": "^5.0.0", "umzug": "^2.3.0", @@ -39,5 +39,5 @@ "build": "webpack", "start": "nodemon" }, - "version": "4.4.2" + "version": "4.4.3" }