From af41604322ba3be3e0843263472a0413a8badff7 Mon Sep 17 00:00:00 2001 From: Chrystian Huot Date: Mon, 19 Sep 2022 07:35:40 -0400 Subject: [PATCH] Version 6.5.6 --- CHANGELOG.md | 6 ++ COMPILING.md | 16 ++-- Makefile | 4 +- client/package-lock.json | 4 +- client/package.json | 2 +- .../config/dir-watch/dir-watch.component.html | 6 +- .../rdio-scanner/main/main.component.ts | 8 +- .../rdio-scanner/rdio-scanner.service.ts | 21 +++-- docs/docker/README.md | 10 +-- docs/platforms/darwin.md | 42 +++++----- docs/platforms/freebsd.md | 42 +++++----- docs/platforms/linux.md | 42 +++++----- docs/platforms/windows.md | 40 ++++----- server/client.go | 15 ---- server/defaults.go | 2 + server/dirwatch.go | 5 ++ server/parsers.go | 83 +++++++++++++++---- server/version.go | 2 +- 18 files changed, 198 insertions(+), 152 deletions(-) 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
- Path of a + Path of the - 1R-Record + Record, 1R-Record or VC-Record Recordings @@ -120,7 +120,7 @@ -

+

Talkgroup
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"