plugins/base/imap: disable full-text search for now

It's too slow on servers where indexes aren't enabled.

References: https://todo.sr.ht/~sircmpwn/koushin/23
This commit is contained in:
Simon Ser 2020-02-05 11:37:01 +01:00
parent f08ecb9cef
commit 651872ef7d
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48

View file

@ -281,13 +281,38 @@ func listMessages(conn *imapclient.Client, mboxName string, page, messagesPerPag
return msgs, nil
}
func searchCriteriaHeader(k, v string) *imap.SearchCriteria {
return &imap.SearchCriteria{
Header: map[string][]string{
k: []string{v},
},
}
}
func searchCriteriaOr(criteria... *imap.SearchCriteria) *imap.SearchCriteria {
or := criteria[0]
for _, c := range criteria[1:] {
or = &imap.SearchCriteria{
Or: [][2]*imap.SearchCriteria{{or, c}},
}
}
return or
}
func searchMessages(conn *imapclient.Client, mboxName, query string, page, messagesPerPage int) (msgs []IMAPMessage, total int, err error) {
if err := ensureMailboxSelected(conn, mboxName); err != nil {
return nil, 0, err
}
criteria := imap.SearchCriteria{Text: []string{query}}
nums, err := conn.Search(&criteria)
// TODO: full-text search on demand (can be slow)
//criteria := &imap.SearchCriteria{Text: []string{query}}
criteria := searchCriteriaOr(
searchCriteriaHeader("From", query),
searchCriteriaHeader("To", query),
searchCriteriaHeader("Cc", query),
searchCriteriaHeader("Subject", query),
)
nums, err := conn.Search(criteria)
if err != nil {
return nil, 0, fmt.Errorf("UID SEARCH failed: %v", err)
}