summaryrefslogtreecommitdiff
path: root/lib/msgstore.go
diff options
context:
space:
mode:
authorcos <cos>2022-07-26 20:38:24 +0200
committercos <cos>2022-07-26 22:47:44 +0200
commitf5c9f2d0111527b5d5d2efed2e94a01b9f382709 (patch)
treeef92c037d9fe0fbc1372fa0ab5e96acd38267d65 /lib/msgstore.go
parenta70697d1224cbb13dae99a50238e62650eee587c (diff)
downloadaerc-topic/asc_sort_imap.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.go26
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
}