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.
|
// 07-migrate.go gegen ein Interface arbeitet.
|
||||||
type SourceMailbox interface {
|
type SourceMailbox interface {
|
||||||
Folders() ([]Folder, error) // rekursiver Ordnerbaum
|
Folders() ([]Folder, error) // rekursiver Ordnerbaum
|
||||||
|
Count(folder string) (int, error)
|
||||||
Headers(folder string, limit, offset int) ([]MessageHeader, error)
|
Headers(folder string, limit, offset int) ([]MessageHeader, error)
|
||||||
FetchOne(folder string, uid uint32) (RawMessage, error)
|
FetchOne(folder string, uid uint32) (RawMessage, error)
|
||||||
Fetch(folder string, fn func(RawMessage) error) error // BODY[] FLAGS INTERNALDATE
|
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)
|
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) {
|
func (s *imapSource) Headers(folder string, limit, offset int) ([]MessageHeader, error) {
|
||||||
return s.mailbox.fetchHeaders(folder, limit, offset)
|
return s.mailbox.fetchHeaders(folder, limit, offset)
|
||||||
}
|
}
|
||||||
|
|
@ -193,6 +198,14 @@ func (m *imapClientMailbox) fetchEach(folder string, fn func(RawMessage) error)
|
||||||
return cmd.Close()
|
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) {
|
func (m *imapClientMailbox) fetchHeaders(folder string, limit, offset int) ([]MessageHeader, error) {
|
||||||
selected, err := m.c.Select(folder, &imap.SelectOptions{ReadOnly: true}).Wait()
|
selected, err := m.c.Select(folder, &imap.SelectOptions{ReadOnly: true}).Wait()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -210,12 +210,9 @@ func CheckAccount(name string) error {
|
||||||
}
|
}
|
||||||
total := 0
|
total := 0
|
||||||
for _, folder := range folders {
|
for _, folder := range folders {
|
||||||
folderTotal := 0
|
folderTotal, err := src.Count(folder.Name)
|
||||||
if err := src.Fetch(folder.Name, func(m RawMessage) error {
|
if err != nil {
|
||||||
folderTotal++
|
return fmt.Errorf("count source %s %s: %w", a.Name, folder.Name, err)
|
||||||
return nil
|
|
||||||
}); err != nil {
|
|
||||||
return fmt.Errorf("fetch source %s %s: %w", a.Name, folder.Name, err)
|
|
||||||
}
|
}
|
||||||
log.Printf("account %s source folder %s messages=%d", a.Name, folder.Name, folderTotal)
|
log.Printf("account %s source folder %s messages=%d", a.Name, folder.Name, folderTotal)
|
||||||
total += folderTotal
|
total += folderTotal
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue