sort: show warning when sort is not supported

Use the capabilities returned by the backend to check whether sort is
implemented when the user tries to use the sort command. Print a warning
to the log when a sort request is silently dropped by the backend.

Suggested-by: |cos|
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
Koni Marti 2022-07-26 13:48:27 +02:00 committed by Robin Jarry
parent cfbb548fb8
commit 26b9c3d966
3 changed files with 13 additions and 0 deletions

View file

@ -72,6 +72,12 @@ func (Sort) Execute(aerc *widgets.Aerc, args []string) error {
return errors.New("Messages still loading.") return errors.New("Messages still loading.")
} }
if c := store.Capabilities(); c != nil {
if !c.Sort {
return errors.New("Sorting is not available for this backend.")
}
}
var err error var err error
var sortCriteria []*types.SortCriterion var sortCriteria []*types.SortCriterion
if len(args[1:]) == 0 { if len(args[1:]) == 0 {

View file

@ -847,3 +847,8 @@ func (store *MessageStore) FindIndexByUid(uid uint32) int {
} }
return -1 return -1
} }
// Capabilities returns a models.Capabilities struct or nil if not available
func (store *MessageStore) Capabilities() *models.Capabilities {
return store.DirInfo.Caps
}

View file

@ -53,6 +53,8 @@ func (imapw *IMAPWorker) handleFetchDirectoryContents(
if err != nil { if err != nil {
// Non fatal, but we do want to print to get some debug info // Non fatal, but we do want to print to get some debug info
logging.Errorf("can't check for SORT support: %v", err) logging.Errorf("can't check for SORT support: %v", err)
} else if len(sortCriteria) > 0 {
logging.Warnf("SORT is not supported but requested: list messages by UID")
} }
uids, err = imapw.client.UidSearch(searchCriteria) uids, err = imapw.client.UidSearch(searchCriteria)
} }