aboutsummaryrefslogtreecommitdiff
path: root/internal/imap/connection.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/imap/connection.go')
-rw-r--r--internal/imap/connection.go21
1 files changed, 13 insertions, 8 deletions
diff --git a/internal/imap/connection.go b/internal/imap/connection.go
index 3d537ea..b93a61f 100644
--- a/internal/imap/connection.go
+++ b/internal/imap/connection.go
@@ -1,6 +1,7 @@
package imap
import (
+ "errors"
"fmt"
"strings"
"time"
@@ -165,25 +166,29 @@ func (conn *connection) fetchFlags(uid uint32) ([]string, error) {
seqSet.AddNum(uid)
messages := make(chan *imap.Message, 1)
- done := make(chan error, 1)
+ done := make(chan error)
go func() {
done <- conn.c.UidFetch(seqSet, fetchItem, messages)
}()
- var msg *imap.Message
+ var flags []string
for m := range messages {
- if msg == nil {
- msg = m
- } else {
- panic(fmt.Sprintf("Duplicate message for uid %d. Found: %s(%d) and %s(%d)", uid, msg.Envelope.MessageId, msg.SeqNum, m.Envelope.MessageId, m.SeqNum))
+ // unilateral flags messages may be sent by the server, which then clutter our messages
+ // --> filter for our selected UID
+ if m.Uid == uid {
+ flags = m.Flags
}
}
err := <-done
+ if err == nil && flags == nil {
+ err = errors.New("no flags returned")
+ }
+
if err != nil {
- return nil, fmt.Errorf("fetching flags: %w", err)
+ return nil, fmt.Errorf("fetching flags for UID %d: %w", uid, err)
}
- return msg.Flags, nil
+ return flags, nil
}
func (conn *connection) replace(folder Folder, header, value, newContent string, force bool) error {
d>-3/+11 2020-04-22Concurrent feed processing; central imap handlerRené 'Necoro' Neumann6-31/+161 2020-04-22Revert to the now patched version of go-messageRené 'Necoro' Neumann2-5/+4 2020-04-22Use patched version of go-messageRené 'Necoro' Neumann3-10/+5 2020-04-21Update README.mdRené 'Necoro' Neumann1-0/+2 2020-04-21Improved HTML creationRené 'Necoro' Neumann4-3/+22 2020-04-21Upload mails to imapRené 'Necoro' Neumann3-35/+80 2020-04-21Move HTML template to stringRené 'Necoro' Neumann3-12/+13 2020-04-21HTML Template part of the mailRené 'Necoro' Neumann7-18/+199 2020-04-20Fixes and validationRené 'Necoro' Neumann6-28/+25 2020-04-20Fix vettingRené 'Necoro' Neumann1-1/+1 2020-04-20Started with mail creationRené 'Necoro' Neumann4-3/+126 2020-04-20FeeditemsRené 'Necoro' Neumann2-2/+14 2020-04-20GlobalOptionsRené 'Necoro' Neumann3-25/+79 2020-04-19RestructureRené 'Necoro' Neumann6-152/+177 2020-04-19Rename package 'parse' to 'feed'René 'Necoro' Neumann2-3/+3 2020-04-19SELECT is not necessary for most operations -- skip itRené 'Necoro' Neumann2-12/+1 2020-04-19Store path as array -- the delimiter is not always '.'René 'Necoro' Neumann3-36/+44 2020-04-19Split client part to client.goRené 'Necoro' Neumann2-125/+137 2020-04-19IMAP: Create foldersRené 'Necoro' Neumann1-4/+38 2020-04-19Improved IMAPRené 'Necoro' Neumann1-3/+88 2020-04-19Started IMAP connectionRené 'Necoro' Neumann4-0/+152 2020-04-19Use our own logger for debug for convenience sakeRené 'Necoro' Neumann1-2/+3 2020-04-19Fix debug logging m(René 'Necoro' Neumann1-2/+2 2020-04-19Rename util.go to log.go. Add verbose modeRené 'Necoro' Neumann4-24/+54 2020-04-19Clean go.modRené 'Necoro' Neumann2-3/+0 2020-04-19Do not print the parsedCfg anymoreRené 'Necoro' Neumann1-1/+1 2020-04-19Increase go-version to 1.14René 'Necoro' Neumann1-2/+2 2020-04-19CI: go vetRené 'Necoro' Neumann1-0/+3 2020-04-19Fetching and parsing the feedsRené 'Necoro' Neumann5-4/+113 2020-04-19Ignore all config*.ymlRené 'Necoro' Neumann1-1/+1