Count account test without fetching bodies

This commit is contained in:
DonVoo 2026-07-14 18:29:37 +02:00
parent a17d2c8a2c
commit 03ce0ad8ea
2 changed files with 16 additions and 6 deletions

View file

@ -48,6 +48,7 @@ type Folder struct {
// 07-migrate.go gegen ein Interface arbeitet.
type SourceMailbox interface {
Folders() ([]Folder, error) // rekursiver Ordnerbaum
Count(folder string) (int, error)
Headers(folder string, limit, offset int) ([]MessageHeader, error)
FetchOne(folder string, uid uint32) (RawMessage, error)
Fetch(folder string, fn func(RawMessage) error) error // BODY[] FLAGS INTERNALDATE
@ -92,6 +93,10 @@ func (s *imapSource) Fetch(folder string, fn func(RawMessage) error) error {
return s.mailbox.fetchEach(folder, fn)
}
func (s *imapSource) Count(folder string) (int, error) {
return s.mailbox.count(folder)
}
func (s *imapSource) Headers(folder string, limit, offset int) ([]MessageHeader, error) {
return s.mailbox.fetchHeaders(folder, limit, offset)
}
@ -193,6 +198,14 @@ func (m *imapClientMailbox) fetchEach(folder string, fn func(RawMessage) error)
return cmd.Close()
}
func (m *imapClientMailbox) count(folder string) (int, error) {
selected, err := m.c.Select(folder, &imap.SelectOptions{ReadOnly: true}).Wait()
if err != nil {
return 0, err
}
return int(selected.NumMessages), nil
}
func (m *imapClientMailbox) fetchHeaders(folder string, limit, offset int) ([]MessageHeader, error) {
selected, err := m.c.Select(folder, &imap.SelectOptions{ReadOnly: true}).Wait()
if err != nil {

View file

@ -210,12 +210,9 @@ func CheckAccount(name string) error {
}
total := 0
for _, folder := range folders {
folderTotal := 0
if err := src.Fetch(folder.Name, func(m RawMessage) error {
folderTotal++
return nil
}); err != nil {
return fmt.Errorf("fetch source %s %s: %w", a.Name, folder.Name, err)
folderTotal, err := src.Count(folder.Name)
if err != nil {
return fmt.Errorf("count source %s %s: %w", a.Name, folder.Name, err)
}
log.Printf("account %s source folder %s messages=%d", a.Name, folder.Name, folderTotal)
total += folderTotal