fastmail imap double message fix

This commit is contained in:
Erik Winter 2021-08-21 11:03:30 +02:00
parent 2c76d36be1
commit f8bb80a803
2 changed files with 27 additions and 1 deletions

View File

@ -210,7 +210,19 @@ func (im *IMAP) Messages(folder string) ([]*Message, error) {
return []*Message{}, fmt.Errorf("%w: %v", ErrIMAPServerProblem, err) return []*Message{}, fmt.Errorf("%w: %v", ErrIMAPServerProblem, err)
} }
return messages, nil // for reasons yet unknown, with some imap providers (i.e. Fastmail) the code
// above sometimes returns the same message twice, but with a different uid.
dedupMessages := []*Message{}
for _, m := range messages {
for _, dm := range dedupMessages {
if m.Equal(dm) {
continue
}
}
dedupMessages = append(dedupMessages, m)
}
return dedupMessages, nil
} }
func (im *IMAP) Add(folder, subject, body string) error { func (im *IMAP) Add(folder, subject, body string) error {

View File

@ -23,6 +23,20 @@ func (m *Message) Valid() bool {
return m.Uid != 0 && m.Subject != "" && m.Folder != "" return m.Uid != 0 && m.Subject != "" && m.Folder != ""
} }
func (m *Message) Equal(n *Message) bool {
if m.Folder != n.Folder {
return false
}
if m.Subject != n.Subject {
return false
}
if m.Body != n.Body {
return false
}
return true
}
type MStorer interface { type MStorer interface {
Folders() ([]string, error) Folders() ([]string, error)
Messages(folder string) ([]*Message, error) Messages(folder string) ([]*Message, error)