commit 63d17a7
delthas
·
2021-07-12 17:19:40 +0000 UTC
parent 43517bf
Sort channel members by name This is used for nick autocomplete and for /NAMES. It will also be used for the vertical user list in the UI in a upcoming patch.
2 files changed,
+17,
-0
+3,
-0
1@@ -5,6 +5,7 @@ import (
2 "encoding/base64"
3 "errors"
4 "fmt"
5+ "sort"
6 "strconv"
7 "strings"
8 "time"
9@@ -207,6 +208,7 @@ func (s *Session) Users() []string {
10
11 // Names returns the list of users in the given channel, or nil if this channel
12 // is not known by the session.
13+// The list is sorted according to member name.
14 func (s *Session) Names(channel string) []Member {
15 var names []Member
16 if c, ok := s.channels[s.Casemap(channel)]; ok {
17@@ -218,6 +220,7 @@ func (s *Session) Names(channel string) []Member {
18 })
19 }
20 }
21+ sort.Sort(members(names))
22 return names
23 }
24
+14,
-0
1@@ -517,6 +517,20 @@ type Member struct {
2 Name *Prefix
3 }
4
5+type members []Member
6+
7+func (m members) Len() int {
8+ return len(m)
9+}
10+
11+func (m members) Less(i, j int) bool {
12+ return strings.ToLower(m[i].Name.Name) < strings.ToLower(m[j].Name.Name)
13+}
14+
15+func (m members) Swap(i, j int) {
16+ m[i], m[j] = m[j], m[i]
17+}
18+
19 // ParseNameReply parses the last parameter of RPL_NAMREPLY, according to the
20 // membership prefixes of the server.
21 func ParseNameReply(trailing string, prefixes string) (names []Member) {