aboutsummaryrefslogtreecommitdiff
path: root/widgets
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-05-19 18:08:41 -0400
committerDrew DeVault <sir@cmpwn.com>2019-05-19 18:18:48 -0400
commit13032734cd90a172eb20a3208b084795784c390b (patch)
treee52d3e12b37c77b2c586b211e55b5a095ad5aac5 /widgets
parent588a6c785b29e6f2f97b7655101789be90bafafb (diff)
Advance message list cursor when messages arrive
Diffstat (limited to 'widgets')
-rw-r--r--widgets/msglist.go13
1 files changed, 13 insertions, 0 deletions
diff --git a/widgets/msglist.go b/widgets/msglist.go
index ddfb92a..efecf2c 100644
--- a/widgets/msglist.go
+++ b/widgets/msglist.go
@@ -18,6 +18,7 @@ type MessageList struct {
height int
scroll int
selected int
+ nmsgs int
spinner *Spinner
store *lib.MessageStore
}
@@ -108,9 +109,20 @@ func (ml *MessageList) storeUpdate(store *lib.MessageStore) {
}
if len(store.Uids) > 0 {
+ // Prevent selecting beyond the last message
for ml.selected >= len(store.Uids) {
ml.Prev()
}
+ // When new messages come in, advance the cursor accordingly
+ // Note that this assumes new messages are appended to the top, which
+ // isn't necessarily true once we implement SORT... ideally we'd look
+ // for the previously selected UID.
+ if len(store.Uids) > ml.nmsgs && ml.nmsgs != 0 {
+ for i := 0; i < len(store.Uids)-ml.nmsgs; i++ {
+ ml.Next()
+ }
+ }
+ ml.nmsgs = len(store.Uids)
}
ml.Invalidate()
@@ -124,6 +136,7 @@ func (ml *MessageList) SetStore(store *lib.MessageStore) {
ml.store = store
if store != nil {
ml.spinner.Stop()
+ ml.nmsgs = len(store.Uids)
store.OnUpdate(ml.storeUpdate)
} else {
ml.spinner.Start()