Switch to IMAP UIDs instead of message position numbers
This commit is contained in:
20
imap.go
20
imap.go
@@ -55,7 +55,7 @@ func (ic *ImapClient) Poll() ([]*Task, error) {
|
|||||||
|
|
||||||
section := &imap.BodySectionName{}
|
section := &imap.BodySectionName{}
|
||||||
|
|
||||||
msgs, err := ic.Fetch(seqset, []imap.FetchItem{section.FetchItem()})
|
msgs, err := ic.Fetch(seqset, []imap.FetchItem{section.FetchItem(), imap.FetchUid})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -63,18 +63,18 @@ func (ic *ImapClient) Poll() ([]*Task, error) {
|
|||||||
ret := []*Task{}
|
ret := []*Task{}
|
||||||
|
|
||||||
for _, msg := range msgs {
|
for _, msg := range msgs {
|
||||||
msg, err := mail.ReadMessage(msg.GetBody(section))
|
m, err := mail.ReadMessage(msg.GetBody(section))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
d, err := msg.Header.Date()
|
d, err := m.Header.Date()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
wd := &mime.WordDecoder{}
|
wd := &mime.WordDecoder{}
|
||||||
s, err := wd.DecodeHeader(msg.Header.Get("Subject"))
|
s, err := wd.DecodeHeader(m.Header.Get("Subject"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -83,20 +83,20 @@ func (ic *ImapClient) Poll() ([]*Task, error) {
|
|||||||
Name: s,
|
Name: s,
|
||||||
HtmlNotes: fmt.Sprintf(
|
HtmlNotes: fmt.Sprintf(
|
||||||
"<body>From: %s\nTo: %s\nDate: %s</body>",
|
"<body>From: %s\nTo: %s\nDate: %s</body>",
|
||||||
ic.escape(msg.Header.Get("From")),
|
ic.escape(m.Header.Get("From")),
|
||||||
ic.escape(msg.Header.Get("To")),
|
ic.escape(m.Header.Get("To")),
|
||||||
ic.escape(d.Local().Format("Monday, 2006-01-02 15h04 -0700")),
|
ic.escape(d.Local().Format("Monday, 2006-01-02 15h04 -0700")),
|
||||||
),
|
),
|
||||||
|
Uid: msg.Uid,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ic *ImapClient) Archive(num int) error {
|
func (ic *ImapClient) Archive(task *Task) error {
|
||||||
seqset := &imap.SeqSet{}
|
seqset := &imap.SeqSet{}
|
||||||
seqset.AddRange(1, uint32(num))
|
seqset.AddNum(task.Uid)
|
||||||
|
|
||||||
return ic.Move(seqset, ic.toFolder)
|
return ic.Move(seqset, ic.toFolder)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@ func (ic *ImapClient) Select(name string, readonly bool) (*imap.MailboxStatus, e
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ic *ImapClient) Move(seqset *imap.SeqSet, dest string) error {
|
func (ic *ImapClient) Move(seqset *imap.SeqSet, dest string) error {
|
||||||
return ic.cli.Move(seqset, dest)
|
return ic.cli.UidMove(seqset, dest)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ic *ImapClient) escape(in string) string {
|
func (ic *ImapClient) escape(in string) string {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ func main() {
|
|||||||
type Task struct {
|
type Task struct {
|
||||||
Name string
|
Name string
|
||||||
HtmlNotes string
|
HtmlNotes string
|
||||||
|
Uid uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func Poll(ic *ImapClient, ac *AsanaClient) error {
|
func Poll(ic *ImapClient, ac *AsanaClient) error {
|
||||||
@@ -62,7 +63,12 @@ func Poll(ic *ImapClient, ac *AsanaClient) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = ic.Archive(task)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ic.Archive(len(tasks))
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user