summaryrefslogtreecommitdiff
path: root/ui/buffers.go
diff options
context:
space:
mode:
Diffstat (limited to 'ui/buffers.go')
-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 {