Version 5.2.5
|
|
@ -28,6 +28,13 @@ _v5.2.4_
|
||||||
- New update prompt for clients when server is updated.
|
- New update prompt for clients when server is updated.
|
||||||
- Fix unaligned back arrow on the search panel.
|
- 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
|
# Version 5.1
|
||||||
|
|
||||||
This one is a big one... **Be sure to backup your config.json and your database.sqlite before updating.**
|
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.
|
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/.
|
Commercial support is available at https://saubeo.solutions/.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,5 +37,5 @@
|
||||||
"build": "ng build --base-href ./ --configuration production",
|
"build": "ng build --base-href ./ --configuration production",
|
||||||
"start": "ng serve"
|
"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"
|
"update": "node update"
|
||||||
},
|
},
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "5.2.4"
|
"version": "5.2.5"
|
||||||
}
|
}
|
||||||
|
|
@ -38,7 +38,6 @@ const wsCommand = {
|
||||||
livefeedMap: 'LFM',
|
livefeedMap: 'LFM',
|
||||||
max: 'MAX',
|
max: 'MAX',
|
||||||
pin: 'PIN',
|
pin: 'PIN',
|
||||||
status: 'STS',
|
|
||||||
ver: 'VER',
|
ver: 'VER',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -90,7 +89,7 @@ export class Controller extends EventEmitter {
|
||||||
broadcastConfig() {
|
broadcastConfig() {
|
||||||
if (this.websocket) {
|
if (this.websocket) {
|
||||||
this.websocket.getSockets().forEach(async (socket) => {
|
this.websocket.getSockets().forEach(async (socket) => {
|
||||||
if ((this.isAccessRestricted && !socket.access) || socket.justStatus) {
|
if (this.isAccessRestricted && !socket.access) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -810,30 +809,7 @@ export class Controller extends EventEmitter {
|
||||||
socket.scope = this.getAccessScope();
|
socket.scope = this.getAccessScope();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message[0] === wsCommand.status) {
|
if (message[0] === wsCommand.ver) {
|
||||||
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) {
|
|
||||||
socket.send(JSON.stringify([wsCommand.ver, this.version]));
|
socket.send(JSON.stringify([wsCommand.ver, this.version]));
|
||||||
|
|
||||||
} else if (this.isAccessRestricted && !socket.access && message[0] !== wsCommand.pin) {
|
} else if (this.isAccessRestricted && !socket.access && message[0] !== wsCommand.pin) {
|
||||||
|
|
@ -878,10 +854,7 @@ export class Controller extends EventEmitter {
|
||||||
|
|
||||||
socket.livefeed = (call) => {
|
socket.livefeed = (call) => {
|
||||||
if (socket.readyState !== 3) {
|
if (socket.readyState !== 3) {
|
||||||
if (socket.justStatus) {
|
if (call.system in socket.scope && call.system in message[1]) {
|
||||||
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 (socket.scope[call.system].includes(call.talkgroup)) {
|
if (socket.scope[call.system].includes(call.talkgroup)) {
|
||||||
if (message[1][call.system] && message[1][call.system][call.talkgroup]) {
|
if (message[1][call.system] && message[1][call.system][call.talkgroup]) {
|
||||||
socket.send(JSON.stringify([wsCommand.call, call]));
|
socket.send(JSON.stringify([wsCommand.call, call]));
|
||||||
|
|
@ -942,7 +915,7 @@ export class Controller extends EventEmitter {
|
||||||
|
|
||||||
if (typeof socket.access.limit === 'number') {
|
if (typeof socket.access.limit === 'number') {
|
||||||
const count = Array.from(this.websocket.getSockets())
|
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) {
|
if (count > socket.access.limit) {
|
||||||
socket.send(JSON.stringify([wsCommand.max]));
|
socket.send(JSON.stringify([wsCommand.max]));
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,6 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
export const version = '5.2.4';
|
export const version = '5.2.5';
|
||||||
|
|
||||||
export default version;
|
export default version;
|
||||||
|
|
@ -86,7 +86,7 @@ export class WebSocket {
|
||||||
}
|
}
|
||||||
|
|
||||||
logClientsCount() {
|
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}`);
|
this.log.write(Log.info, `WebSocket: Listeners count is ${count}`);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,5 +46,5 @@
|
||||||
"start": "nodemon"
|
"start": "nodemon"
|
||||||
},
|
},
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "5.2.4"
|
"version": "5.2.5"
|
||||||
}
|
}
|
||||||
|
|
|
||||||