diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-05-19 18:08:41 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-05-19 18:18:48 -0400 |
commit | 13032734cd90a172eb20a3208b084795784c390b (patch) | |
tree | e52d3e12b37c77b2c586b211e55b5a095ad5aac5 | |
parent | 588a6c785b29e6f2f97b7655101789be90bafafb (diff) |
Advance message list cursor when messages arrive
-rw-r--r-- | widgets/msglist.go | 13 |
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() |