summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/msgstore.go12
-rw-r--r--widgets/msglist.go6
2 files changed, 14 insertions, 4 deletions
diff --git a/lib/msgstore.go b/lib/msgstore.go
index b1785c1..709c7a2 100644
--- a/lib/msgstore.go
+++ b/lib/msgstore.go
@@ -14,6 +14,8 @@ type MessageStore struct {
 	Deleted  map[uint32]interface{}
 	DirInfo  models.DirectoryInfo
 	Messages map[uint32]*models.MessageInfo
+	Sorting  bool
+
 	// Ordered list of known UIDs
 	uids []uint32
 
@@ -185,9 +187,7 @@ func (store *MessageStore) Update(msg types.WorkerMessage) {
 	switch msg := msg.(type) {
 	case *types.DirectoryInfo:
 		store.DirInfo = *msg.Info
-		store.worker.PostAction(&types.FetchDirectoryContents{
-			SortCriteria: store.defaultSortCriteria,
-		}, nil)
+		store.Sort(store.defaultSortCriteria, nil)
 		update = true
 	case *types.DirectoryContents:
 		newMap := make(map[uint32]*models.MessageInfo)
@@ -599,10 +599,14 @@ func (store *MessageStore) ModifyLabels(uids []uint32, add, remove []string,
 }
 
 func (store *MessageStore) Sort(criteria []*types.SortCriterion, cb func()) {
+	store.Sorting = true
 	store.worker.PostAction(&types.FetchDirectoryContents{
 		SortCriteria: criteria,
 	}, func(msg types.WorkerMessage) {
-		cb()
+		store.Sorting = false
+		if cb != nil {
+			cb()
+		}
 	})
 }
 
diff --git a/widgets/msglist.go b/widgets/msglist.go
index 51c133c..59abf59 100644
--- a/widgets/msglist.go
+++ b/widgets/msglist.go
@@ -63,6 +63,12 @@ func (ml *MessageList) Draw(ctx *ui.Context) {
 		}
 	}
 
+	if store.Sorting {
+		ml.spinner.Start()
+		ml.spinner.Draw(ctx)
+		return
+	}
+
 	var (
 		needsHeaders []uint32
 		row          int = 0