Don't show empty message while sorting

This changes the ui to show the spinner while we are sorting. It only
shows one line of the spinner since there are an unknown number of
messages at this time.
This commit is contained in:
Jeffas 2020-02-29 02:50:11 +00:00 committed by Drew DeVault
parent 2a0430ab90
commit b55813f2c0
2 changed files with 14 additions and 4 deletions

View File

@ -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) {
store.Sorting = false
if cb != nil {
cb()
}
})
}

View File

@ -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