Count account test without fetching bodies
This commit is contained in:
parent
a17d2c8a2c
commit
03ce0ad8ea
2 changed files with 16 additions and 6 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue