summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKalyan Sriram <kalyan@coderkalyan.com>2021-12-09 01:06:10 +0000
committerdelthas <delthas@dille.cc>2022-02-10 12:10:16 +0100
commit01863cb80438b3aab1e8a3765d6b6eb26e3a8c48 (patch)
treed673efaef6bee1dcda74c4d4cf1801bcbe5943f1
parentMONITOR 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.
-rw-r--r--ui/buffers.go55
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 {