mirror of
https://github.com/chuot/rdio-scanner.git
synced 2026-08-13 08:33:00 -06:00
Version 6.5.6
This commit is contained in:
parent
2e772c0e1e
commit
af41604322
|
|
@ -43,6 +43,12 @@ _v6.5.5_
|
|||
|
||||
- Fixed concurrent map read and map write on dirwatch.
|
||||
|
||||
_v6.5.6_
|
||||
|
||||
- Fixed Clients lockup by removing mutex on some unecessary Clients methods.
|
||||
- Better `DSDPlus Fast Lane` parser. Tested with `ConP(BS)`, `DMR(BS)`, `NEXEDGE48(CS)`, `NEXEDGE48(CB)`, `NEXEDGE48(TB)`, `NEXEDGE96(CB)`, `NEXEDGE96(CS)`, `NEXEDGE96(TB)`, `P25(BS)` and `P25`.
|
||||
- Fixed unit aliases not displaying on the main screen under certain circumstances.
|
||||
|
||||
## Version 6.4
|
||||
|
||||
- New `-cmd` command line options to allow advanced administrative tasks.
|
||||
|
|
|
|||
16
COMPILING.md
16
COMPILING.md
|
|
@ -27,13 +27,13 @@ Clone the official repository on your computer and start the build process.
|
|||
|
||||
When finished, you will find the precompiled versions for various platforms in the `dist` folder.
|
||||
|
||||
rdio-scanner-darwin-amd64-v6.5.5.zip
|
||||
rdio-scanner-darwin-arm64-v6.5.5.zip
|
||||
rdio-scanner-freebsd-amd64-v6.5.5.zip
|
||||
rdio-scanner-linux-386-v6.5.5.zip
|
||||
rdio-scanner-linux-amd64-v6.5.5.zip
|
||||
rdio-scanner-linux-arm64-v6.5.5.zip
|
||||
rdio-scanner-linux-arm-v6.5.5.zip
|
||||
rdio-scanner-windows-amd64-v6.5.5.zip
|
||||
rdio-scanner-darwin-amd64-v6.5.6.zip
|
||||
rdio-scanner-darwin-arm64-v6.5.6.zip
|
||||
rdio-scanner-freebsd-amd64-v6.5.6.zip
|
||||
rdio-scanner-linux-386-v6.5.6.zip
|
||||
rdio-scanner-linux-amd64-v6.5.6.zip
|
||||
rdio-scanner-linux-arm64-v6.5.6.zip
|
||||
rdio-scanner-linux-arm-v6.5.6.zip
|
||||
rdio-scanner-windows-amd64-v6.5.6.zip
|
||||
|
||||
**Happy Rdio scanning !**
|
||||
4
Makefile
4
Makefile
|
|
@ -16,8 +16,8 @@
|
|||
################################################################################
|
||||
|
||||
app := rdio-scanner
|
||||
date := 2022/09/12
|
||||
ver := 6.5.5
|
||||
date := 2022/09/19
|
||||
ver := 6.5.6
|
||||
|
||||
client := $(wildcard client/*.json client/*.ts)
|
||||
server := $(wildcard server/*.go)
|
||||
|
|
|
|||
4
client/package-lock.json
generated
4
client/package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "rdio-scanner",
|
||||
"version": "6.5.5",
|
||||
"version": "6.5.6",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "rdio-scanner",
|
||||
"version": "6.5.5",
|
||||
"version": "6.5.6",
|
||||
"license": "LICENSE",
|
||||
"dependencies": {
|
||||
"@angular/animations": "^13.3.10",
|
||||
|
|
|
|||
|
|
@ -38,5 +38,5 @@
|
|||
"build": "ng build --base-href ./ --configuration production",
|
||||
"start": "ng serve"
|
||||
},
|
||||
"version": "6.5.5"
|
||||
"version": "6.5.6"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,10 +59,10 @@
|
|||
<p>
|
||||
<span class="mat-body">Directory</span><br>
|
||||
<span class="mat-caption">
|
||||
Path of a
|
||||
Path of the
|
||||
<ng-container [ngSwitch]="dirWatch.get('type')?.value">
|
||||
<ng-container *ngSwitchCase="'dsdplus'">
|
||||
<b>1R-Record</b>
|
||||
<b>Record</b>, <b>1R-Record</b> or <b>VC-Record</b>
|
||||
</ng-container>
|
||||
<ng-container *ngSwitchCase="'sdr-trunk'">
|
||||
<b>Recordings</b>
|
||||
|
|
@ -120,7 +120,7 @@
|
|||
</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="row" *ngIf="['default'].includes(dirWatch.get('type')?.value)">
|
||||
<div class="row" *ngIf="['default','dsdplus'].includes(dirWatch.get('type')?.value)">
|
||||
<p>
|
||||
<span class="mat-body">Talkgroup</span><br>
|
||||
<span class="mat-caption">Talkgroup to where the audio files should go.</span>
|
||||
|
|
|
|||
|
|
@ -537,7 +537,7 @@ export class RdioScannerMainComponent implements OnDestroy, OnInit {
|
|||
|
||||
private updateDisplay(time = this.callTime): void {
|
||||
if (this.call) {
|
||||
let isAfs = this.isAfsSystem(this.call.system);
|
||||
const isAfs = this.isAfsSystem(this.call.system);
|
||||
|
||||
this.callProgress = new Date(this.call.dateTime);
|
||||
this.callProgress.setSeconds(this.callProgress.getSeconds() + time);
|
||||
|
|
@ -581,9 +581,7 @@ export class RdioScannerMainComponent implements OnDestroy, OnInit {
|
|||
this.callTalkgroupId = isAfs ? this.formatAfs(this.call.talkgroup) : this.call.talkgroup.toString();
|
||||
|
||||
if (typeof source.src === 'number' && Array.isArray(this.call.systemData?.units)) {
|
||||
const callUnit = this.call?.systemData?.units?.find((u) => u.id === source.src);
|
||||
|
||||
this.callUnit = callUnit ? callUnit.label : `${source.src}`;
|
||||
this.callUnit = this.call.systemData?.units?.find((u) => u.id === source.src)?.label ?? `${source.src}`;
|
||||
|
||||
} else {
|
||||
this.callUnit = typeof this.call.source === 'number' ? `${this.call.source}` : '';
|
||||
|
|
@ -592,7 +590,7 @@ export class RdioScannerMainComponent implements OnDestroy, OnInit {
|
|||
} else {
|
||||
this.callTalkgroupId = isAfs ? this.formatAfs(this.call.talkgroup) : this.call.talkgroup.toString();
|
||||
|
||||
this.callUnit = typeof this.call.source === 'number' ? `${this.call.source}` : '';
|
||||
this.callUnit = this.call.systemData?.units?.find((u) => u.id === this.call?.source)?.label ?? `${this.call.source ?? ''}`;
|
||||
}
|
||||
|
||||
if (
|
||||
|
|
|
|||
|
|
@ -736,8 +736,8 @@ export class RdioScannerService implements OnDestroy {
|
|||
}
|
||||
|
||||
private cleanQueue(): void {
|
||||
let isActive = (call: RdioScannerCall) => {
|
||||
let lfm = (sys: number, tg: number): boolean => this.livefeedMap && this.livefeedMap[sys] && this.livefeedMap[sys][tg]?.active;
|
||||
const isActive = (call: RdioScannerCall) => {
|
||||
const lfm = (sys: number, tg: number): boolean => this.livefeedMap && this.livefeedMap[sys] && this.livefeedMap[sys][tg]?.active;
|
||||
let active = lfm(call.system, call.talkgroup);
|
||||
if (!active && Array.isArray(call.patches)) {
|
||||
for (let i = 0; i < call.patches.length; i++) {
|
||||
|
|
@ -856,8 +856,8 @@ export class RdioScannerService implements OnDestroy {
|
|||
switch (message[0]) {
|
||||
case WebsocketCommand.Call:
|
||||
if (message[1] !== null) {
|
||||
let call: RdioScannerCall = message[1];
|
||||
let flag: string = message[2];
|
||||
const call: RdioScannerCall = message[1];
|
||||
const flag: string = message[2];
|
||||
|
||||
if (flag === WebsocketCallFlag.Download) {
|
||||
this.download(message[1]);
|
||||
|
|
@ -948,12 +948,12 @@ export class RdioScannerService implements OnDestroy {
|
|||
|
||||
break;
|
||||
|
||||
case WebsocketCommand.Version:
|
||||
var data = message[1];
|
||||
case WebsocketCommand.Version: {
|
||||
const data = message[1];
|
||||
|
||||
if (data !== null && typeof data === 'object') {
|
||||
var branding = data['branding'];
|
||||
var email = data['email'];
|
||||
const branding = data['branding'];
|
||||
const email = data['email'];
|
||||
|
||||
if (typeof branding === 'string') {
|
||||
this.config.branding = branding;
|
||||
|
|
@ -969,6 +969,7 @@ export class RdioScannerService implements OnDestroy {
|
|||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1117,7 +1118,9 @@ export class RdioScannerService implements OnDestroy {
|
|||
this.livefeedMap[+sys][+tg].active = lfm[sys][tg];
|
||||
});
|
||||
});
|
||||
} catch (_) { }
|
||||
} catch (_) {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
private sendtoWebsocket(command: string, payload?: unknown, flags?: string): void {
|
||||
|
|
|
|||
|
|
@ -53,12 +53,12 @@ $ docker run --detach --env TZ=America/Toronto --name rdio-scanner --publish 300
|
|||
520cdbf51fca11d8bacea12d81245f1cb4d984f80d2be2e3039727b59533a6a9
|
||||
|
||||
$ docker logs rdio-scanner
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 08:57:23 server started
|
||||
2022/09/12 08:57:23 base folder is /app/data
|
||||
2022/09/12 08:57:23 main interface at http://6d87e8dc37a0:3000
|
||||
2022/09/12 08:57:23 admin interface at http://6d87e8dc37a0:3000/admin
|
||||
2022/09/19 08:57:23 server started
|
||||
2022/09/19 08:57:23 base folder is /app/data
|
||||
2022/09/19 08:57:23 main interface at http://6d87e8dc37a0:3000
|
||||
2022/09/19 08:57:23 admin interface at http://6d87e8dc37a0:3000/admin
|
||||
```
|
||||
|
||||
You can also use docker-compose to start the server with this simple `docker-compose.yml`:
|
||||
|
|
|
|||
|
|
@ -43,8 +43,8 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
|||
rdio@macos ~ % mkdir rdio-scanner
|
||||
rdio@macos ~ % cd rdio-scanner
|
||||
rdio@macos rdio-scanner % unzip \
|
||||
> ~/Downloads/rdio-scanner-darwin-arm64-v6.5.5.zip
|
||||
Archive: /Users/rdio/Downloads/rdio-scanner-darwin-arm64-v6.5.5.zip
|
||||
> ~/Downloads/rdio-scanner-darwin-arm64-v6.5.6.zip
|
||||
Archive: /Users/rdio/Downloads/rdio-scanner-darwin-arm64-v6.5.6.zip
|
||||
inflating: rdio-scanner
|
||||
inflating: rdio-scanner.pdf
|
||||
|
||||
|
|
@ -52,11 +52,11 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
|||
|
||||
rdio@macos rdio-scanner % ./rdio-scanner
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 08:38:06 server started
|
||||
2022/09/12 08:38:06 main interface at http://macos.local:3000
|
||||
2022/09/12 08:38:06 admin interface at http://macos.local:3000/admin
|
||||
2022/09/19 08:38:06 server started
|
||||
2022/09/19 08:38:06 main interface at http://macos.local:3000
|
||||
2022/09/19 08:38:06 admin interface at http://macos.local:3000/admin
|
||||
|
||||
4. Access the administrative dashboard to finalize the configuration.
|
||||
|
||||
|
|
@ -78,11 +78,11 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance
|
|||
|
||||
rdio@macos rdio-scanner % ./rdio-scanner --listen :80
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 08:48:03 server started
|
||||
2022/09/12 08:48:03 main interface at http://macos.local
|
||||
2022/09/12 08:48:03 admin interface at http://macos.local/admin
|
||||
2022/09/19 08:48:03 server started
|
||||
2022/09/19 08:48:03 main interface at http://macos.local
|
||||
2022/09/19 08:48:03 admin interface at http://macos.local/admin
|
||||
|
||||
## Listening on a SSL port
|
||||
|
||||
|
|
@ -96,12 +96,12 @@ You can use your own SSL certificates that match your domain name with `-ssl_cer
|
|||
> -ssl_key_file mykey.key \
|
||||
> -ssl_listen :443
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 08:50:58 server started
|
||||
2022/09/12 08:50:58 main interface at http://macos.local
|
||||
2022/09/12 08:50:58 main interface at https://macos.local
|
||||
2022/09/12 08:50:58 admin interface at https://macos.local/admin
|
||||
2022/09/19 08:50:58 server started
|
||||
2022/09/19 08:50:58 main interface at http://macos.local
|
||||
2022/09/19 08:50:58 main interface at https://macos.local
|
||||
2022/09/19 08:50:58 admin interface at https://macos.local/admin
|
||||
|
||||
If you don't want to worry about SSL certificates, you can use the built-in Let's Encrypt auto-cert feature. This requires that you have both port 80 (HTTP) and port 443 (HTTPS) open to the world. Also, your domain name should point to your IP address where [Rdio Scanner](https://github.com/chuot/rdio-scanner/) is running. The advantage of this approach is that everything is done automatically, no certificate request, no certificate renewal.
|
||||
|
||||
|
|
@ -119,7 +119,7 @@ You don't want to have to type everytime a long list of arguments. No problem, y
|
|||
> -ssl_auto_cert mydomain.com \
|
||||
> -ssl_listen :443 \
|
||||
> -config_save
|
||||
2022/09/12 08:52:24 rdio-scanner.ini file created
|
||||
2022/09/19 08:52:24 rdio-scanner.ini file created
|
||||
|
||||
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
||||
|
||||
|
|
@ -133,12 +133,12 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an
|
|||
|
||||
rdio@macos rdio-scanner % ./rdio-scanner
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 08:54:08 server started
|
||||
2022/09/12 08:54:08 main interface at http://macos.local
|
||||
2022/09/12 08:54:08 main interface at https://macos.local
|
||||
2022/09/12 08:54:08 admin interface at https://macos.local/admin
|
||||
2022/09/19 08:54:08 server started
|
||||
2022/09/19 08:54:08 main interface at http://macos.local
|
||||
2022/09/19 08:54:08 main interface at https://macos.local
|
||||
2022/09/19 08:54:08 admin interface at https://macos.local/admin
|
||||
|
||||
## Install Rdio Scanner as a service
|
||||
|
||||
|
|
|
|||
|
|
@ -43,8 +43,8 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
|||
rdio@pc-freebsd:~ $ mkdir rdio-scanner
|
||||
rdio@pc-freebsd:~ $ cd rdio-scanner
|
||||
rdio@pc-freebsd:~/rdio-scanner $ unzip \
|
||||
> ~/rdio-scanner-freebsd-amd64-v6.5.5.zip
|
||||
Archive: ../rdio-scanner-freebsd-amd64-v6.5.5.zip
|
||||
> ~/rdio-scanner-freebsd-amd64-v6.5.6.zip
|
||||
Archive: ../rdio-scanner-freebsd-amd64-v6.5.6.zip
|
||||
extracting: rdio-scanner
|
||||
extracting: rdio-scanner.pdf
|
||||
|
||||
|
|
@ -52,11 +52,11 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
|||
|
||||
rdio@pc-freebsd:~/rdio-scanner $ ./rdio-scanner
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 08:16:36 server started
|
||||
2022/09/12 08:16:36 main interface at http://pc-freebsd:3000
|
||||
2022/09/12 08:16:36 admin interface at http://pc-freebsd:3000/admin
|
||||
2022/09/19 08:16:36 server started
|
||||
2022/09/19 08:16:36 main interface at http://pc-freebsd:3000
|
||||
2022/09/19 08:16:36 admin interface at http://pc-freebsd:3000/admin
|
||||
|
||||
4. Access the administrative dashboard to finalize the configuration.
|
||||
|
||||
|
|
@ -82,11 +82,11 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance
|
|||
Password:
|
||||
root@pc-freebsd:/home/rdio/rdio-scanner # ./rdio-scanner -listen :80
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 08:19:38 server started
|
||||
2022/09/12 08:19:38 main interface at http://pc-freebsd
|
||||
2022/09/12 08:19:38 admin interface at http://pc-freebsd/admin
|
||||
2022/09/19 08:19:38 server started
|
||||
2022/09/19 08:19:38 main interface at http://pc-freebsd
|
||||
2022/09/19 08:19:38 admin interface at http://pc-freebsd/admin
|
||||
|
||||
## Listening on a SSL port
|
||||
|
||||
|
|
@ -102,12 +102,12 @@ You can use your own SSL certificates that match your domain name with `-ssl_cer
|
|||
> -ssl_key_file mykey.key \
|
||||
> -ssl_listen :443
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 10:34:29 server started
|
||||
2022/09/12 10:34:29 main interface at http://pc-freebsd
|
||||
2022/09/12 10:34:29 main interface at https://pc-freebsd
|
||||
2022/09/12 10:34:29 admin interface at https://pc-freebsd/admin
|
||||
2022/09/19 10:34:29 server started
|
||||
2022/09/19 10:34:29 main interface at http://pc-freebsd
|
||||
2022/09/19 10:34:29 main interface at https://pc-freebsd
|
||||
2022/09/19 10:34:29 admin interface at https://pc-freebsd/admin
|
||||
|
||||
If you don't want to worry about SSL certificates, you can use the built-in Let's Encrypt auto-cert feature. This requires that you have both port 80 (HTTP) and port 443 (HTTPS) open to the world. Also, your domain name should point to your IP address where [Rdio Scanner](https://github.com/chuot/rdio-scanner/) is running. The advantage of this approach is that everything is done automatically, no certificate request, no certificate renewal.
|
||||
|
||||
|
|
@ -127,7 +127,7 @@ You don't want to have to type everytime a long list of arguments. No problem, y
|
|||
> -ssl_auto_cert mydomain.com \
|
||||
> -ssl_listen :443 \
|
||||
> -config_save
|
||||
2022/09/12 10:37:00 rdio-scanner.ini file created
|
||||
2022/09/19 10:37:00 rdio-scanner.ini file created
|
||||
|
||||
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
||||
|
||||
|
|
@ -143,12 +143,12 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an
|
|||
Password:
|
||||
root@pc-freebsd:/home/rdio/rdio-scanner # ./rdio-scanner
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 10:38:28 server started
|
||||
2022/09/12 10:38:29 main interface at http://pc-freebsd
|
||||
2022/09/12 10:38:29 main interface at https://pc-freebsd
|
||||
2022/09/12 10:38:29 admin interface at https://pc-freebsd/admin
|
||||
2022/09/19 10:38:28 server started
|
||||
2022/09/19 10:38:29 main interface at http://pc-freebsd
|
||||
2022/09/19 10:38:29 main interface at https://pc-freebsd
|
||||
2022/09/19 10:38:29 admin interface at https://pc-freebsd/admin
|
||||
|
||||
## Install Rdio Scanner as a service
|
||||
|
||||
|
|
|
|||
|
|
@ -43,8 +43,8 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
|||
[rdio@pc-linux ~]$ mkdir rdio-scanner
|
||||
[rdio@pc-linux ~]$ cd rdio-scanner
|
||||
[rdio@pc-linux rdio-scanner]$ unzip \
|
||||
> ~/Downloads/rdio-scanner-linux-amd64-v6.5.5.zip
|
||||
Archive: /home/rdio/Downloads/rdio-scanner-linux-amd64-v6.5.5.zip
|
||||
> ~/Downloads/rdio-scanner-linux-amd64-v6.5.6.zip
|
||||
Archive: /home/rdio/Downloads/rdio-scanner-linux-amd64-v6.5.6.zip
|
||||
inflating: rdio-scanner
|
||||
inflating: rdio-scanner.pdf
|
||||
|
||||
|
|
@ -52,11 +52,11 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
|||
|
||||
[rdio@pc-linux rdio-scanner]$ ./rdio-scanner
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 09:11:48 server started
|
||||
2022/09/12 09:11:48 main interface at http://pc-linux:3000
|
||||
2022/09/12 09:11:48 admin interface at http://pc-linux:3000/admin
|
||||
2022/09/19 09:11:48 server started
|
||||
2022/09/19 09:11:48 main interface at http://pc-linux:3000
|
||||
2022/09/19 09:11:48 admin interface at http://pc-linux:3000/admin
|
||||
|
||||
4. Access the administrative dashboard to finalize the configuration.
|
||||
|
||||
|
|
@ -79,11 +79,11 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance
|
|||
[rdio@pc-linux rdio-scanner]$ sudo ./rdio-scanner -listen :80
|
||||
[sudo] password for rdio:
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 09:14:00 server started
|
||||
2022/09/12 09:14:00 main interface at http://pc-linux
|
||||
2022/09/12 09:14:00 admin interface at http://pc-linux/admin
|
||||
2022/09/19 09:14:00 server started
|
||||
2022/09/19 09:14:00 main interface at http://pc-linux
|
||||
2022/09/19 09:14:00 admin interface at http://pc-linux/admin
|
||||
|
||||
## Listening on a SSL port
|
||||
|
||||
|
|
@ -98,12 +98,12 @@ You can use your own SSL certificates that match your domain name with `-ssl_cer
|
|||
> -ssl_listen :443
|
||||
[sudo] password for rdio:
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 09:16:47 server started
|
||||
2022/09/12 09:16:47 main interface at http://pc-linux
|
||||
2022/09/12 09:16:47 main interface at https://pc-linux
|
||||
2022/09/12 09:16:47 admin interface at https://pc-linux/admin
|
||||
2022/09/19 09:16:47 server started
|
||||
2022/09/19 09:16:47 main interface at http://pc-linux
|
||||
2022/09/19 09:16:47 main interface at https://pc-linux
|
||||
2022/09/19 09:16:47 admin interface at https://pc-linux/admin
|
||||
|
||||
If you don't want to worry about SSL certificates, you can use the built-in Let's Encrypt auto-cert feature. This requires that you have both port 80 (HTTP) and port 443 (HTTPS) open to the world. Also, your domain name should point to your IP address where [Rdio Scanner](https://github.com/chuot/rdio-scanner/) is running. The advantage of this approach is that everything is done automatically, no certificate request, no certificate renewal.
|
||||
|
||||
|
|
@ -121,7 +121,7 @@ You don't want to have to type everytime a long list of arguments. No problem, y
|
|||
> -ssl_auto_cert mydomain.com \
|
||||
> -ssl_listen :443 \
|
||||
> -config_save
|
||||
2022/09/12 09:19:29 rdio-scanner.ini file created
|
||||
2022/09/19 09:19:29 rdio-scanner.ini file created
|
||||
|
||||
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
||||
|
||||
|
|
@ -136,12 +136,12 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an
|
|||
[rdio@pc-linux rdio-scanner]$ sudo ./rdio-scanner
|
||||
[sudo] Mot de passe de rdio :
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 09:20:40 server started
|
||||
2022/09/12 09:20:40 main interface at http://pc-linux
|
||||
2022/09/12 09:20:40 main interface at https://pc-linux
|
||||
2022/09/12 09:20:40 admin interface at https://pc-linux/admin
|
||||
2022/09/19 09:20:40 server started
|
||||
2022/09/19 09:20:40 main interface at http://pc-linux
|
||||
2022/09/19 09:20:40 main interface at https://pc-linux
|
||||
2022/09/19 09:20:40 admin interface at https://pc-linux/admin
|
||||
|
||||
## Install Rdio Scanner as a service
|
||||
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
|||
C:\Users\rdio> cd rdio-scanner
|
||||
|
||||
C:\Users\rdio\rdio-scanner> tar -xvf ^
|
||||
..\downloads\rdio-scanner-windows-amd64-v6.5.5.zip
|
||||
..\downloads\rdio-scanner-windows-amd64-v6.5.6.zip
|
||||
x rdio-scanner.exe
|
||||
x rdio-scanner.pdf
|
||||
|
||||
|
|
@ -53,11 +53,11 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
|||
|
||||
C:\Users\rdio\rdio-scanner>rdio-scanner
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 13:48:48 server started
|
||||
2022/09/12 13:48:48 main interface at http://pc-windows:3000
|
||||
2022/09/12 13:48:48 admin interface at http://pc-windows:3000/admin
|
||||
2022/09/19 13:48:48 server started
|
||||
2022/09/19 13:48:48 main interface at http://pc-windows:3000
|
||||
2022/09/19 13:48:48 admin interface at http://pc-windows:3000/admin
|
||||
|
||||
4. Access the administrative dashboard to finalize the configuration.
|
||||
|
||||
|
|
@ -79,11 +79,11 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance
|
|||
|
||||
C:\Users\rdio\rdio-scanner>rdio-scanner -listen :80
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 10:53:31 server started
|
||||
2022/09/12 10:53:31 main interface at http://pc-windows
|
||||
2022/09/12 10:53:31 admin interface at http://pc-windows/admin
|
||||
2022/09/19 10:53:31 server started
|
||||
2022/09/19 10:53:31 main interface at http://pc-windows
|
||||
2022/09/19 10:53:31 admin interface at http://pc-windows/admin
|
||||
|
||||
## Listening on a SSL port
|
||||
|
||||
|
|
@ -97,12 +97,12 @@ You can use your own SSL certificates that match your domain name with `-ssl_cer
|
|||
-ssl_key_file meykey.key ^
|
||||
-ssl_listen :443
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 11:05:43 server started
|
||||
2022/09/12 11:05:43 main interface at http://pc-windows
|
||||
2022/09/12 11:05:43 main interface at https://pc-windows
|
||||
2022/09/12 11:05:43 admin interface at https://pc-windows/admin
|
||||
2022/09/19 11:05:43 server started
|
||||
2022/09/19 11:05:43 main interface at http://pc-windows
|
||||
2022/09/19 11:05:43 main interface at https://pc-windows
|
||||
2022/09/19 11:05:43 admin interface at https://pc-windows/admin
|
||||
|
||||
If you don't want to worry about SSL certificates, you can use the built-in Let's Encrypt auto-cert feature. This requires that you have both port 80 (HTTP) and port 443 (HTTPS) open to the world. Also, your domain name should point to your IP address where [Rdio Scanner](https://github.com/chuot/rdio-scanner/) is running. The advantage of this approach is that everything is done automatically, no certificate request, no certificate renewal.
|
||||
|
||||
|
|
@ -120,7 +120,7 @@ You don't want to have to type everytime a long list of arguments. No problem, y
|
|||
-ssl_auto_cert mydomain.com ^
|
||||
-ssl_listen :443 ^
|
||||
-config_save
|
||||
2022/09/12 11:08:28 rdio-scanner.ini file created
|
||||
2022/09/19 11:08:28 rdio-scanner.ini file created
|
||||
|
||||
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
||||
|
||||
|
|
@ -134,12 +134,12 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an
|
|||
|
||||
C:\Users\rdio\rdio-scanner>rdio-scanner
|
||||
|
||||
Rdio Scanner v6.5.5
|
||||
Rdio Scanner v6.5.6
|
||||
----------------------------------
|
||||
2022/09/12 11:11:28 server started
|
||||
2022/09/12 11:11:28 main interface at http://pc-windows
|
||||
2022/09/12 11:11:28 main interface at https://pc-windows
|
||||
2022/09/12 11:11:28 admin interface at https://pc-windows/admin
|
||||
2022/09/19 11:11:28 server started
|
||||
2022/09/19 11:11:28 main interface at http://pc-windows
|
||||
2022/09/19 11:11:28 main interface at https://pc-windows
|
||||
2022/09/19 11:11:28 admin interface at https://pc-windows/admin
|
||||
|
||||
\pagebreak{}
|
||||
|
||||
|
|
|
|||
|
|
@ -218,9 +218,6 @@ func NewClients() *Clients {
|
|||
}
|
||||
|
||||
func (clients *Clients) AccessCount(client *Client) int {
|
||||
clients.mutex.Lock()
|
||||
defer clients.mutex.Unlock()
|
||||
|
||||
count := 0
|
||||
|
||||
for c := range clients.Map {
|
||||
|
|
@ -240,16 +237,10 @@ func (clients *Clients) Add(client *Client) {
|
|||
}
|
||||
|
||||
func (clients *Clients) Count() int {
|
||||
clients.mutex.Lock()
|
||||
defer clients.mutex.Unlock()
|
||||
|
||||
return len(clients.Map)
|
||||
}
|
||||
|
||||
func (clients *Clients) EmitCall(call *Call, restricted bool) {
|
||||
clients.mutex.Lock()
|
||||
defer clients.mutex.Unlock()
|
||||
|
||||
for c := range clients.Map {
|
||||
if (!restricted || c.Access.HasAccess(call)) && c.Livefeed.IsEnabled(call) {
|
||||
c.Send <- &Message{Command: MessageCommandCall, Payload: call}
|
||||
|
|
@ -258,9 +249,6 @@ func (clients *Clients) EmitCall(call *Call, restricted bool) {
|
|||
}
|
||||
|
||||
func (clients *Clients) EmitConfig(groups *Groups, options *Options, systems *Systems, tags *Tags, restricted bool) {
|
||||
clients.mutex.Lock()
|
||||
defer clients.mutex.Unlock()
|
||||
|
||||
count := len(clients.Map)
|
||||
|
||||
for c := range clients.Map {
|
||||
|
|
@ -277,9 +265,6 @@ func (clients *Clients) EmitConfig(groups *Groups, options *Options, systems *Sy
|
|||
}
|
||||
|
||||
func (clients *Clients) EmitListenersCount() {
|
||||
clients.mutex.Lock()
|
||||
defer clients.mutex.Unlock()
|
||||
|
||||
count := len(clients.Map)
|
||||
|
||||
for c := range clients.Map {
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ var defaults Defaults = Defaults{
|
|||
"Fire",
|
||||
"Interop",
|
||||
"Law",
|
||||
"Unknown",
|
||||
},
|
||||
keypadBeeps: "uniden",
|
||||
options: DefaultOptions{
|
||||
|
|
@ -119,5 +120,6 @@ var defaults Defaults = Defaults{
|
|||
"Interop",
|
||||
"Security",
|
||||
"Service",
|
||||
"Untagged",
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -250,6 +250,11 @@ func (dirwatch *Dirwatch) ingestDSDPlus(p string) error {
|
|||
call.System = v
|
||||
}
|
||||
|
||||
switch v := dirwatch.TalkgroupId.(type) {
|
||||
case uint:
|
||||
call.Talkgroup = v
|
||||
}
|
||||
|
||||
if call.Audio, err = os.ReadFile(p); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ package main
|
|||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"mime"
|
||||
"mime/multipart"
|
||||
"path"
|
||||
|
|
@ -33,6 +34,23 @@ import (
|
|||
func ParseDSDPlusMeta(call *Call, fp string) error {
|
||||
dir := filepath.Dir(fp)
|
||||
base := strings.TrimSuffix(filepath.Base(fp), filepath.Ext(fp))
|
||||
meta := []string{""}
|
||||
|
||||
lbl := false
|
||||
ptr := 0
|
||||
for i := 0; i < len(base); i++ {
|
||||
if base[i] == '[' {
|
||||
lbl = true
|
||||
} else if base[i] == ']' {
|
||||
lbl = false
|
||||
}
|
||||
if !lbl && base[i] == '_' {
|
||||
ptr++
|
||||
meta = append(meta, "")
|
||||
} else {
|
||||
meta[ptr] += string(base[i])
|
||||
}
|
||||
}
|
||||
|
||||
if d := regexp.MustCompile(`([0-9]+)$`).FindStringSubmatch(dir); len(d) == 2 && len(d[1]) == 8 {
|
||||
if t := regexp.MustCompile(`^([0-9]+)`).FindStringSubmatch(base); len(t) == 2 && len(t[1]) == 6 {
|
||||
|
|
@ -52,31 +70,60 @@ func ParseDSDPlusMeta(call *Call, fp string) error {
|
|||
}
|
||||
}
|
||||
|
||||
if s := regexp.MustCompile(`^[0-9]+_[0-9]+_[^_]+_([0-9]+)-([0-9]+)_`).FindStringSubmatch(base); len(s) == 3 {
|
||||
if sys, err := strconv.Atoi(s[1]); err == nil && sys > 0 {
|
||||
call.System = uint(sys)
|
||||
if len(meta) > 3 {
|
||||
switch meta[2] {
|
||||
case "ConP(BS)", "DMR(BS)", "P25(BS)":
|
||||
if s := regexp.MustCompile(`^([0-9]+)-.+$`).FindStringSubmatch(meta[3]); len(s) > 1 {
|
||||
if i, err := strconv.Atoi(s[1]); err == nil {
|
||||
call.System = uint(i)
|
||||
}
|
||||
}
|
||||
|
||||
case "NEXEDGE48(CB)", "NEXEDGE48(CS)", "NEXEDGE48(TB)", "NEXEDGE96(CB)", "NEXEDGE96(CS)", "NEXEDGE96(TB)":
|
||||
if s := regexp.MustCompile(`^.([0-9]+)-[0-9]+$`).FindStringSubmatch(meta[3]); len(s) > 1 {
|
||||
if i, err := strconv.Atoi(s[1]); err == nil && i > 0 {
|
||||
call.System = uint(i)
|
||||
}
|
||||
|
||||
} else if len(meta) > 4 {
|
||||
if s := regexp.MustCompile(`RAN([0-9]+)`).FindStringSubmatch(meta[4]); len(s) > 1 {
|
||||
if i, err := strconv.Atoi(s[1]); err == nil && i > 0 {
|
||||
call.System = uint(i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case "P25":
|
||||
if s := regexp.MustCompile(`^[^\.]+\.([^-]+)`).FindStringSubmatch(meta[3]); len(s) > 1 {
|
||||
if i, err := strconv.ParseInt(s[1], 16, 64); err == nil && i > 0 {
|
||||
call.System = uint(i)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tu := regexp.MustCompile(`([0-9]+)_([0-9]+)$|([0-9]+)_([0-9]+)\[([^\]]*)\]$`).FindStringSubmatch(base)
|
||||
if s := regexp.MustCompile(`[^\[\]]+`).FindAllString(meta[len(meta)-2], -1); len(s) > 0 {
|
||||
if i, err := strconv.Atoi(s[0]); err == nil && i > 0 {
|
||||
call.Talkgroup = uint(i)
|
||||
}
|
||||
|
||||
if len(tu[3]) > 0 {
|
||||
tu[1] = tu[3]
|
||||
if len(s) > 1 && len(s[1]) > 0 {
|
||||
if !regexp.MustCompile(`^([\.\-\ ,_]+)$`).MatchString(s[1]) {
|
||||
call.talkgroupLabel = s[1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(tu[4]) > 0 {
|
||||
tu[2] = tu[4]
|
||||
}
|
||||
|
||||
if tg, err := strconv.Atoi(tu[1]); err == nil && tg > 0 {
|
||||
call.Talkgroup = uint(tg)
|
||||
if src, err := strconv.Atoi(tu[2]); err == nil && src > 0 {
|
||||
if s := regexp.MustCompile(`[^\[\]]+`).FindAllString(meta[len(meta)-1], -1); len(s) > 0 {
|
||||
if src, err := strconv.Atoi(s[0]); err == nil && src > 0 {
|
||||
call.Source = uint(src)
|
||||
if len(tu[5]) > 0 && strings.TrimSpace(tu[5]) != strings.TrimSpace(tu[2]) {
|
||||
if b := regexp.MustCompile(`^([\.\-\ ,_]+)$`).MatchString(tu[5]); !b {
|
||||
units := NewUnits()
|
||||
units.Add(uint(src), tu[5])
|
||||
call.units = units
|
||||
if len(s) > 1 && len(s[1]) > 0 {
|
||||
if strings.TrimSpace(s[1]) != fmt.Sprintf("%v", call.Source) {
|
||||
if !regexp.MustCompile(`^([\.\-\ ,_]+)$`).MatchString(s[1]) {
|
||||
units := NewUnits()
|
||||
units.Add(uint(src), strings.TrimSpace(s[1]))
|
||||
call.units = units
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,4 +15,4 @@
|
|||
|
||||
package main
|
||||
|
||||
const Version = "6.5.5"
|
||||
const Version = "6.5.6"
|
||||
|
|
|
|||
Loading…
Reference in a new issue