Version 5.2.5
|
|
@ -28,6 +28,13 @@ _v5.2.4_
|
|||
- New update prompt for clients when server is updated.
|
||||
- Fix unaligned back arrow on the search panel.
|
||||
|
||||
_v5.2.5_
|
||||
|
||||
- STS command removed from the server.
|
||||
- Minor fixes here and there.
|
||||
- README.md updated.
|
||||
- Documentation images resized.
|
||||
|
||||
# Version 5.1
|
||||
|
||||
This one is a big one... **Be sure to backup your config.json and your database.sqlite before updating.**
|
||||
|
|
|
|||
|
|
@ -51,7 +51,14 @@ The server side of [Rdio Scanner](https://github.com/chuot/rdio-scanner) can mon
|
|||
|
||||
You can ask your questions or post your comments on the [Gitter Rdio Scanner Lobby](https://gitter.im/rdio-scanner/Lobby) where the community continues to grow.
|
||||
|
||||
## Commercial support
|
||||
## Native app
|
||||
|
||||
[Rdio Scanner](https://github.com/chuot/rdio-scanner) is now the perfect software-defined radio companion. Go get the native client here:
|
||||
|
||||
[](https://apps.apple.com/us/app/rdio-scanner/id1563065667#?platform=iphone)
|
||||
[](https://play.google.com/store/apps/details?id=solutions.saubeo.rdioScanner)
|
||||
|
||||
# Commercial support
|
||||
|
||||
Commercial support is available at https://saubeo.solutions/.
|
||||
|
||||
|
|
|
|||
|
|
@ -37,5 +37,5 @@
|
|||
"build": "ng build --base-href ./ --configuration production",
|
||||
"start": "ng serve"
|
||||
},
|
||||
"version": "5.2.4"
|
||||
"version": "5.2.5"
|
||||
}
|
||||
|
|
|
|||
BIN
docs/images/app_store.png
Normal file
|
After Width: | Height: | Size: 7 KiB |
BIN
docs/images/google_play.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 200 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 210 KiB After Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 425 KiB After Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 241 KiB After Width: | Height: | Size: 128 KiB |
|
|
@ -14,5 +14,5 @@
|
|||
"update": "node update"
|
||||
},
|
||||
"type": "module",
|
||||
"version": "5.2.4"
|
||||
"version": "5.2.5"
|
||||
}
|
||||
|
|
@ -38,7 +38,6 @@ const wsCommand = {
|
|||
livefeedMap: 'LFM',
|
||||
max: 'MAX',
|
||||
pin: 'PIN',
|
||||
status: 'STS',
|
||||
ver: 'VER',
|
||||
};
|
||||
|
||||
|
|
@ -90,7 +89,7 @@ export class Controller extends EventEmitter {
|
|||
broadcastConfig() {
|
||||
if (this.websocket) {
|
||||
this.websocket.getSockets().forEach(async (socket) => {
|
||||
if ((this.isAccessRestricted && !socket.access) || socket.justStatus) {
|
||||
if (this.isAccessRestricted && !socket.access) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -810,30 +809,7 @@ export class Controller extends EventEmitter {
|
|||
socket.scope = this.getAccessScope();
|
||||
}
|
||||
|
||||
if (message[0] === wsCommand.status) {
|
||||
if (typeof socket.status !== 'function') {
|
||||
socket.status = (call) => {
|
||||
if (socket.readyState !== 3) {
|
||||
socket.send(JSON.stringify([
|
||||
wsCommand.status,
|
||||
`${call.system},${call.talkgroup},${call.id}`,
|
||||
]));
|
||||
|
||||
} else {
|
||||
this.removeListener('call', socket.status);
|
||||
socket.status = undefined;
|
||||
}
|
||||
};
|
||||
this.addListener('call', socket.status);
|
||||
socket.send(JSON.stringify([wsCommand.status, true]));
|
||||
|
||||
} else {
|
||||
this.removeListener('call', socket.status);
|
||||
socket.status = undefined;
|
||||
socket.send(JSON.stringify([wsCommand.status, false]));
|
||||
}
|
||||
|
||||
} else if (message[0] === wsCommand.ver) {
|
||||
if (message[0] === wsCommand.ver) {
|
||||
socket.send(JSON.stringify([wsCommand.ver, this.version]));
|
||||
|
||||
} else if (this.isAccessRestricted && !socket.access && message[0] !== wsCommand.pin) {
|
||||
|
|
@ -878,10 +854,7 @@ export class Controller extends EventEmitter {
|
|||
|
||||
socket.livefeed = (call) => {
|
||||
if (socket.readyState !== 3) {
|
||||
if (socket.justStatus) {
|
||||
socket.send(JSON.stringify([wsCommand.status], `${call.system},${call.talkgroup},${call.id}`));
|
||||
|
||||
} else if (call.system in socket.scope && call.system in message[1]) {
|
||||
if (call.system in socket.scope && call.system in message[1]) {
|
||||
if (socket.scope[call.system].includes(call.talkgroup)) {
|
||||
if (message[1][call.system] && message[1][call.system][call.talkgroup]) {
|
||||
socket.send(JSON.stringify([wsCommand.call, call]));
|
||||
|
|
@ -942,7 +915,7 @@ export class Controller extends EventEmitter {
|
|||
|
||||
if (typeof socket.access.limit === 'number') {
|
||||
const count = Array.from(this.websocket.getSockets())
|
||||
.reduce((c, s) => (!s.justStatus && s.access?.code === token) ? ++c : c, 0);
|
||||
.reduce((c, s) => s.access?.code === token ? ++c : c, 0);
|
||||
|
||||
if (count > socket.access.limit) {
|
||||
socket.send(JSON.stringify([wsCommand.max]));
|
||||
|
|
|
|||
|
|
@ -19,6 +19,6 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
export const version = '5.2.4';
|
||||
export const version = '5.2.5';
|
||||
|
||||
export default version;
|
||||
|
|
@ -86,7 +86,7 @@ export class WebSocket {
|
|||
}
|
||||
|
||||
logClientsCount() {
|
||||
const count = Array.from(this.wss.clients).reduce((c, s) => (!s.justStatus && s.livefeed) ? ++c : c, 0);
|
||||
const count = Array.from(this.wss.clients).reduce((c, s) => s.livefeed ? ++c : c, 0);
|
||||
|
||||
this.log.write(Log.info, `WebSocket: Listeners count is ${count}`);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,5 +46,5 @@
|
|||
"start": "nodemon"
|
||||
},
|
||||
"type": "module",
|
||||
"version": "5.2.4"
|
||||
"version": "5.2.5"
|
||||
}
|
||||
|
|
|
|||