From e253b64d4368d112b6557e3385323725e5d43eae Mon Sep 17 00:00:00 2001 From: Mihail Slobodyanuk Date: Thu, 22 Dec 2022 09:52:45 +0200 Subject: [PATCH] Peers ordering fully moved in gu --- contrib/ui/mesh-ui/ui/assets/mesh-ui-es5.js | 10 ++-------- contrib/ui/mesh-ui/ui/assets/mesh-ui.js | 7 ++----- src/restapi/rest_server.go | 11 ++++++++--- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/contrib/ui/mesh-ui/ui/assets/mesh-ui-es5.js b/contrib/ui/mesh-ui/ui/assets/mesh-ui-es5.js index 3a1c20d0..f9fed634 100644 --- a/contrib/ui/mesh-ui/ui/assets/mesh-ui-es5.js +++ b/contrib/ui/mesh-ui/ui/assets/mesh-ui-es5.js @@ -297,16 +297,10 @@ ui.getConnectedPeers = function () { }); }; -var regexMulticast = /:\/\/\[fe80::/; ui.updateConnectedPeersHandler = function (peers) { $("peers").innerText = ""; var regexStrip = /%[^\]]*/gm; - var sorted = peers.map(function (peer) { - return { "url": peer["remote"], "isMulticast": peer["remote"].match(regexMulticast) }; - }).sort(function (a, b) { - return a.isMulticast > b.isMulticast; - }); - sorted.forEach(function (peer) { + peers.forEach(function (peer) { var row = $("peers").appendChild(document.createElement('div')); row.className = "overflow-ellipsis"; var flag = row.appendChild(document.createElement("span")); @@ -320,7 +314,7 @@ ui.updateStatus = function (peers) { if (peers) { if (peers.length) { var isNonMulticastExists = peers.filter(function (peer) { - return !peer["remote"].match(regexMulticast); + return !peer.multicast; }).length; status = isNonMulticastExists ? "st-multicast" : "st-connected"; } else { diff --git a/contrib/ui/mesh-ui/ui/assets/mesh-ui.js b/contrib/ui/mesh-ui/ui/assets/mesh-ui.js index 37f17914..2bad7b7e 100644 --- a/contrib/ui/mesh-ui/ui/assets/mesh-ui.js +++ b/contrib/ui/mesh-ui/ui/assets/mesh-ui.js @@ -284,13 +284,10 @@ ui.getConnectedPeers = () => fetch('api/peers') .then((response) => response.json()) -const regexMulticast = /:\/\/\[fe80::/; ui.updateConnectedPeersHandler = (peers) => { $("peers").innerText = ""; const regexStrip = /%[^\]]*/gm; - const sorted = peers.map(peer => ({"url": peer["remote"], "isMulticast": peer["remote"].match(regexMulticast)})) - .sort((a, b) => a.isMulticast > b.isMulticast); - sorted.forEach(peer => { + peers.forEach(peer => { let row = $("peers").appendChild(document.createElement('div')); row.className = "overflow-ellipsis" let flag = row.appendChild(document.createElement("span")); @@ -306,7 +303,7 @@ ui.updateStatus = peers => { let status = "st-error"; if(peers) { if(peers.length) { - const isNonMulticastExists = peers.filter(peer => !peer["remote"].match(regexMulticast)).length; + const isNonMulticastExists = peers.filter(peer => !peer.multicast).length; status = isNonMulticastExists ? "st-multicast" : "st-connected"; } else { status = "st-connecting" diff --git a/src/restapi/rest_server.go b/src/restapi/rest_server.go index bb24eb95..a29f939f 100644 --- a/src/restapi/rest_server.go +++ b/src/restapi/rest_server.go @@ -10,6 +10,7 @@ import ( "net/url" "sort" "strconv" + "strings" "archive/zip" "time" @@ -197,11 +198,15 @@ func (a *RestServer) apiPeersHandler(w http.ResponseWriter, r *http.Request) { "bytes_recvd": p.RXBytes, "bytes_sent": p.TXBytes, "uptime": p.Uptime.Seconds(), + "mulicast": strings.Contains(p.Remote, "[fe80::"), }) } - sort.SliceStable(response, func(i, j int) bool { - if response[i]["port"].(uint64) == response[j]["port"].(uint64) { - return response[i]["priority"].(uint64) < response[j]["priority"].(uint64) + sort.Slice(response, func(i, j int) bool { + if !response[i]["mulicast"].(bool) && response[j]["mulicast"].(bool) { + return true + } + if response[i]["priority"].(uint64) < response[j]["priority"].(uint64) { + return true } return response[i]["port"].(uint64) < response[j]["port"].(uint64) })