diff options
author | Kalyan Sriram <kalyan@coderkalyan.com> | 2021-12-09 01:06:10 +0000 |
---|---|---|
committer | delthas <delthas@dille.cc> | 2022-02-10 12:10:16 +0100 |
commit | 01863cb80438b3aab1e8a3765d6b6eb26e3a8c48 (patch) | |
tree | d673efaef6bee1dcda74c4d4cf1801bcbe5943f1 /ui | |
parent | MONITOR user with whom we have an open buffer (diff) |
ui: buffers: sort buffer list
Implements sorting of both network names and buffer names inside
networks.
Diffstat (limited to 'ui')
-rw-r--r-- | ui/buffers.go | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/ui/buffers.go b/ui/buffers.go index 1ccb921..4cc0b45 100644 --- a/ui/buffers.go +++ b/ui/buffers.go @@ -251,39 +251,46 @@ func (bs *BufferList) Previous() { } func (bs *BufferList) Add(netID, netName, title string) (i int, added bool) { + i = 0 lTitle := strings.ToLower(title) - gotNetID := false - for i, b := range bs.list { + for bi, b := range bs.list { + if netName == "" && b.netID == netID { + netName = b.netName + } + if netName == "" || b.netName < netName { + i = bi + 1 + continue + } + if b.netName > netName { + break + } lbTitle := strings.ToLower(b.title) - if b.netID == netID { - gotNetID = true - if lbTitle == lTitle { - return i, false - } - } else if gotNetID || (b.netID == netID && lbTitle < lTitle) { - b := buffer{ - netID: netID, - netName: netName, - title: title, - } - bs.list = append(bs.list[:i+1], bs.list[i:]...) - bs.list[i] = b - if i <= bs.current && bs.current < len(bs.list) { - bs.current++ - } - return i, true + if lbTitle < lTitle { + i = bi + 1 + continue } + if lbTitle == lTitle { + return i, false + } + break } - if netName == "" { - netName = netID + if i <= bs.current && bs.current < len(bs.list) { + bs.current++ } - bs.list = append(bs.list, buffer{ + + b := buffer{ netID: netID, netName: netName, title: title, - }) - return len(bs.list) - 1, true + } + if i == len(bs.list) { + bs.list = append(bs.list, b) + } else { + bs.list = append(bs.list[:i+1], bs.list[i:]...) + bs.list[i] = b + } + return i, true } func (bs *BufferList) Remove(netID, title string) bool { |