summaryrefslogtreecommitdiff
path: root/client/discovery.go
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2024-05-23 15:33:11 +0200
committerJeroen Wijenbergh <46386452+jwijenbergh@users.noreply.github.com>2024-05-29 14:36:10 +0200
commitbe74ef76b30e7ad9fc74294c8e94ff1f40e87b4e (patch)
treeb92150ebaed0d37f4baf822adc7979c846ba5091 /client/discovery.go
parentef7f44e4bb7713b18e6c0ab1b6e3510075b6623b (diff)
Discovery: Improve search using levenshtein distance and sorting
Diffstat (limited to 'client/discovery.go')
-rw-r--r--client/discovery.go29
1 files changed, 27 insertions, 2 deletions
diff --git a/client/discovery.go b/client/discovery.go
index 49df8b2..72f0ad5 100644
--- a/client/discovery.go
+++ b/client/discovery.go
@@ -1,6 +1,7 @@
package client
import (
+ "sort"
"strings"
"github.com/eduvpn/eduvpn-common/i18nerr"
@@ -34,11 +35,23 @@ func (c *Client) DiscoOrganizations(ck *cookie.Cookie, search string) (*discotyp
// convert to public subset
var retOrgs []discotypes.Organization
for _, v := range orgs.List {
- if !v.Matches(search) {
+ if search == "" {
+ retOrgs = append(retOrgs, v.Organization)
+ continue
+ }
+ score := v.Score(search)
+ if score < 0 {
continue
}
+ v.Organization.Score = score
retOrgs = append(retOrgs, v.Organization)
}
+ if search != "" {
+ sort.Slice(retOrgs, func(i, j int) bool {
+ // lower score is better
+ return retOrgs[i].Score < retOrgs[j].Score
+ })
+ }
return &discotypes.Organizations{
List: retOrgs,
}, err
@@ -65,11 +78,23 @@ func (c *Client) DiscoServers(ck *cookie.Cookie, search string) (*discotypes.Ser
// convert to public subset
var retServs []discotypes.Server
for _, v := range servs.List {
- if !v.Matches(search) {
+ if search == "" {
+ retServs = append(retServs, v.Server)
+ continue
+ }
+ score := v.Score(search)
+ if score < 0 {
continue
}
+ v.Server.Score = score
retServs = append(retServs, v.Server)
}
+ if search != "" {
+ sort.Slice(retServs, func(i, j int) bool {
+ // lower score is better
+ return retServs[i].Score < retServs[j].Score
+ })
+ }
return &discotypes.Servers{
List: retServs,
}, err