diff --git a/CHANGELOG.md b/CHANGELOG.md index 348d3e6..9dcf451 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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. diff --git a/COMPILING.md b/COMPILING.md index 9091509..18ec0d2 100644 --- a/COMPILING.md +++ b/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 !** \ No newline at end of file diff --git a/Makefile b/Makefile index 4e604f6..7aa2daa 100644 --- a/Makefile +++ b/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) diff --git a/client/package-lock.json b/client/package-lock.json index 568c207..d458825 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -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", diff --git a/client/package.json b/client/package.json index 0926588..467446f 100644 --- a/client/package.json +++ b/client/package.json @@ -38,5 +38,5 @@ "build": "ng build --base-href ./ --configuration production", "start": "ng serve" }, - "version": "6.5.5" + "version": "6.5.6" } diff --git a/client/src/app/components/rdio-scanner/admin/config/dir-watch/dir-watch.component.html b/client/src/app/components/rdio-scanner/admin/config/dir-watch/dir-watch.component.html index 9efce2b..f64ffbb 100644 --- a/client/src/app/components/rdio-scanner/admin/config/dir-watch/dir-watch.component.html +++ b/client/src/app/components/rdio-scanner/admin/config/dir-watch/dir-watch.component.html @@ -59,10 +59,10 @@
Directory
Talkgroup
- Path of a
+ Path of the
Talkgroup to where the audio files should go.
diff --git a/client/src/app/components/rdio-scanner/main/main.component.ts b/client/src/app/components/rdio-scanner/main/main.component.ts
index 27034f5..4449901 100644
--- a/client/src/app/components/rdio-scanner/main/main.component.ts
+++ b/client/src/app/components/rdio-scanner/main/main.component.ts
@@ -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 (
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 4f5c678..14f6c0c 100644
--- a/client/src/app/components/rdio-scanner/rdio-scanner.service.ts
+++ b/client/src/app/components/rdio-scanner/rdio-scanner.service.ts
@@ -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 {
diff --git a/docs/docker/README.md b/docs/docker/README.md
index e1e08df..7ee7c60 100644
--- a/docs/docker/README.md
+++ b/docs/docker/README.md
@@ -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`:
diff --git a/docs/platforms/darwin.md b/docs/platforms/darwin.md
index 515ef4e..623a7e4 100644
--- a/docs/platforms/darwin.md
+++ b/docs/platforms/darwin.md
@@ -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
diff --git a/docs/platforms/freebsd.md b/docs/platforms/freebsd.md
index 12ca830..b6fb358 100644
--- a/docs/platforms/freebsd.md
+++ b/docs/platforms/freebsd.md
@@ -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
diff --git a/docs/platforms/linux.md b/docs/platforms/linux.md
index f40002b..0c57219 100644
--- a/docs/platforms/linux.md
+++ b/docs/platforms/linux.md
@@ -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
diff --git a/docs/platforms/windows.md b/docs/platforms/windows.md
index 4af6e72..9746849 100644
--- a/docs/platforms/windows.md
+++ b/docs/platforms/windows.md
@@ -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{}
diff --git a/server/client.go b/server/client.go
index 66eb73a..0bc6e54 100644
--- a/server/client.go
+++ b/server/client.go
@@ -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 {
diff --git a/server/defaults.go b/server/defaults.go
index 3b2f01f..57c69c5 100644
--- a/server/defaults.go
+++ b/server/defaults.go
@@ -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",
},
}
diff --git a/server/dirwatch.go b/server/dirwatch.go
index 43eb145..8e9312c 100644
--- a/server/dirwatch.go
+++ b/server/dirwatch.go
@@ -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
}
diff --git a/server/parsers.go b/server/parsers.go
index 0c169d5..6ccdf3e 100644
--- a/server/parsers.go
+++ b/server/parsers.go
@@ -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
+ }
}
}
}
diff --git a/server/version.go b/server/version.go
index 8d78954..7ce4a26 100644
--- a/server/version.go
+++ b/server/version.go
@@ -15,4 +15,4 @@
package main
-const Version = "6.5.5"
+const Version = "6.5.6"