summaryrefslogtreecommitdiff
path: root/lib/msgstore.go
diff options
context:
space:
mode:
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
}