diff options
author | Koni Marti <koni.marti@gmail.com> | 2022-03-24 23:12:14 +0100 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-03-25 13:07:20 +0100 |
commit | e50ab5928475ef44e880e3391e5ca164c8077ce4 (patch) | |
tree | bb1854fff779df27545789793068fbf38959cdad | |
parent | af2a70983c8d9a940a064c17057d42d92d717883 (diff) | |
download | aerc-e50ab5928475ef44e880e3391e5ca164c8077ce4.tar.gz |
sort: keep sort criteria applied to folder
Keep the sort criteria applied to the selected folder until the default
sort order should be restored. Call the sort command without arguments
to restore the default sort order.
The current behavior is that the default sort order is restored as soon
as the folder reloads. This happens often and then the results of the
sort command are lost. This makes the sort command not very
user-friendly. Instead, we should keep the sort criteria applied until
the user explicitly wants to restore the default sort order again.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
-rw-r--r-- | commands/account/sort.go | 13 | ||||
-rw-r--r-- | lib/msgstore.go | 7 | ||||
-rw-r--r-- | widgets/account.go | 4 |
3 files changed, 16 insertions, 8 deletions
diff --git a/commands/account/sort.go b/commands/account/sort.go index ad1a402d..c08991c8 100644 --- a/commands/account/sort.go +++ b/commands/account/sort.go @@ -7,6 +7,7 @@ import ( "git.sr.ht/~rjarry/aerc/commands" "git.sr.ht/~rjarry/aerc/lib/sort" "git.sr.ht/~rjarry/aerc/widgets" + "git.sr.ht/~rjarry/aerc/worker/types" ) type Sort struct{} @@ -70,9 +71,15 @@ func (Sort) Execute(aerc *widgets.Aerc, args []string) error { return errors.New("Messages still loading.") } - sortCriteria, err := sort.GetSortCriteria(args[1:]) - if err != nil { - return err + var err error + var sortCriteria []*types.SortCriterion + if len(args[1:]) == 0 { + sortCriteria = acct.GetSortCriteria() + } else { + sortCriteria, err = sort.GetSortCriteria(args[1:]) + if err != nil { + return err + } } aerc.SetStatus("Sorting") diff --git a/lib/msgstore.go b/lib/msgstore.go index 0ded01fd..542f93de 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -35,7 +35,7 @@ type MessageStore struct { filtered []uint32 filter bool - defaultSortCriteria []*types.SortCriterion + sortCriteria []*types.SortCriterion thread bool buildThreads bool @@ -77,7 +77,7 @@ func NewMessageStore(worker *types.Worker, thread: thread, - defaultSortCriteria: defaultSortCriteria, + sortCriteria: defaultSortCriteria, pendingBodies: make(map[uint32]interface{}), pendingHeaders: make(map[uint32]interface{}), @@ -184,7 +184,7 @@ func (store *MessageStore) Update(msg types.WorkerMessage) { switch msg := msg.(type) { case *types.DirectoryInfo: store.DirInfo = *msg.Info - store.Sort(store.defaultSortCriteria, nil) + store.Sort(store.sortCriteria, nil) update = true case *types.DirectoryContents: newMap := make(map[uint32]*models.MessageInfo) @@ -721,6 +721,7 @@ func (store *MessageStore) ModifyLabels(uids []uint32, add, remove []string, func (store *MessageStore) Sort(criteria []*types.SortCriterion, cb func()) { store.Sorting = true + store.sortCriteria = criteria handle_return := func(msg types.WorkerMessage) { store.Sorting = false diff --git a/widgets/account.go b/widgets/account.go index 6cf49aa1..994bba6e 100644 --- a/widgets/account.go +++ b/widgets/account.go @@ -282,7 +282,7 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) { store.Update(msg) } else { store = lib.NewMessageStore(acct.worker, msg.Info, - acct.getSortCriteria(), + acct.GetSortCriteria(), acct.UiConfig().ThreadingEnabled, func(msg *models.MessageInfo) { acct.conf.Triggers.ExecNewEmail(acct.acct, @@ -335,7 +335,7 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) { acct.UpdateStatus() } -func (acct *AccountView) getSortCriteria() []*types.SortCriterion { +func (acct *AccountView) GetSortCriteria() []*types.SortCriterion { if len(acct.UiConfig().Sort) == 0 { return nil } |