diff options
author | cos <cos> | 2022-07-26 20:38:24 +0200 |
---|---|---|
committer | cos <cos> | 2022-07-26 22:47:44 +0200 |
commit | f5c9f2d0111527b5d5d2efed2e94a01b9f382709 (patch) | |
tree | ef92c037d9fe0fbc1372fa0ab5e96acd38267d65 /lib/msgstore.go | |
parent | a70697d1224cbb13dae99a50238e62650eee587c (diff) | |
download | aerc-f5c9f2d0111527b5d5d2efed2e94a01b9f382709.zip |
fixup: Hack up message list to be sorted ascendingtopic/asc_sort_imap
An attempt at making ascending or descending message list configurable.
Seems to work for me, but a proper take on this might need to involve
having to rethink what configuration options to present and how direct
they map towards the operations happening under the hood.
Diffstat (limited to 'lib/msgstore.go')
-rw-r--r-- | lib/msgstore.go | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/lib/msgstore.go b/lib/msgstore.go index 4aaad82..a99259e 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -15,6 +15,7 @@ type MessageStore struct { DirInfo models.DirectoryInfo Messages map[uint32]*models.MessageInfo Sorting bool + OrdAsc bool // Ordered list of known UIDs uids []uint32 @@ -60,6 +61,7 @@ type MessageStore struct { func NewMessageStore(worker *types.Worker, dirInfo *models.DirectoryInfo, defaultSortCriteria []*types.SortCriterion, + ascending bool, thread bool, clientThreads bool, triggerNewEmail func(*models.MessageInfo), triggerDirectoryChange func()) *MessageStore { @@ -74,6 +76,7 @@ func NewMessageStore(worker *types.Worker, Deleted: make(map[uint32]interface{}), DirInfo: *dirInfo, Messages: make(map[uint32]*models.MessageInfo), + OrdAsc: ascending, selected: 0, marked: make(map[uint32]struct{}), @@ -225,10 +228,20 @@ func (store *MessageStore) Update(msg types.WorkerMessage) { var uids []uint32 newMap := make(map[uint32]*models.MessageInfo) - for i := len(msg.Threads) - 1; i >= 0; i-- { - msg.Threads[i].Walk(func(t *types.Thread, level int, currentErr error) error { + for i := 0; i < len(msg.Threads); i++ { + var j = 0 + if store.OrdAsc { + j = i + } else { + j = len(msg.Threads) - i - 1 + } + msg.Threads[j].Walk(func(t *types.Thread, level int, currentErr error) error { uid := t.Uid - uids = append([]uint32{uid}, uids...) + if store.OrdAsc { + uids = append(uids, uid) + } else { + uids = append([]uint32{uid}, uids...) + } if msg, ok := store.Messages[uid]; ok { newMap[uid] = msg } else { @@ -491,7 +504,12 @@ func (store *MessageStore) Uids() []uint32 { func (store *MessageStore) Selected() *models.MessageInfo { uids := store.Uids() - idx := store.selected + var idx = 0 + if store.OrdAsc { + idx = store.selected + } else { + idx = len(uids) - store.selected - 1 + } if len(uids) == 0 || idx < 0 || idx >= len(uids) { return nil } |