aboutsummaryrefslogtreecommitdiff
path: root/plugins/base
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base')
-rw-r--r--plugins/base/imap.go24
-rw-r--r--plugins/base/routes.go19
2 files changed, 23 insertions, 20 deletions
diff --git a/plugins/base/imap.go b/plugins/base/imap.go
index f15105c..64b3164 100644
--- a/plugins/base/imap.go
+++ b/plugins/base/imap.go
@@ -9,7 +9,6 @@ import (
"strconv"
"strings"
"time"
- nettextproto "net/textproto"
"github.com/dustin/go-humanize"
"github.com/emersion/go-imap"
@@ -571,20 +570,20 @@ func markMessageAnswered(conn *imapclient.Client, mboxName string, uid uint32) e
return conn.UidStore(seqSet, item, flags, nil)
}
-func appendMessage(c *imapclient.Client, msg *OutgoingMessage, mboxType mailboxType) (*MailboxInfo, uint32, error) {
+func appendMessage(c *imapclient.Client, msg *OutgoingMessage, mboxType mailboxType) (*MailboxInfo, error) {
mbox, err := getMailboxByType(c, mboxType)
if err != nil {
- return nil, 0, err
+ return nil, err
}
if mbox == nil {
- return nil, 0, fmt.Errorf("Unable to resolve mailbox")
+ return nil, fmt.Errorf("Unable to resolve mailbox")
}
// IMAP needs to know in advance the final size of the message, so
// there's no way around storing it in a buffer here.
var buf bytes.Buffer
if err := msg.WriteTo(&buf); err != nil {
- return nil, 0, err
+ return nil, err
}
flags := []string{imap.SeenFlag}
@@ -592,20 +591,9 @@ func appendMessage(c *imapclient.Client, msg *OutgoingMessage, mboxType mailboxT
flags = append(flags, imap.DraftFlag)
}
if err := c.Append(mbox.Name, flags, time.Now(), &buf); err != nil {
- return nil, 0, err
- }
- criteria := &imap.SearchCriteria{
- Header: make(nettextproto.MIMEHeader),
- }
- criteria.Header.Add("Message-Id", msg.MessageID)
- if uids, err := c.UidSearch(criteria); err != nil {
- return nil, 0, err
- } else {
- if len(uids) != 1 {
- panic(fmt.Errorf("Duplicate message ID"))
- }
- return mbox, uids[0], nil
+ return nil, err
}
+ return mbox, nil
}
func deleteMessage(c *imapclient.Client, mboxName string, uid uint32) error {
diff --git a/plugins/base/routes.go b/plugins/base/routes.go
index 1f3b8b4..ea5bec5 100644
--- a/plugins/base/routes.go
+++ b/plugins/base/routes.go
@@ -7,6 +7,7 @@ import (
"io/ioutil"
"mime"
"net/http"
+ "net/textproto"
"net/url"
"strconv"
"strings"
@@ -507,7 +508,7 @@ func submitCompose(ctx *alps.Context, msg *OutgoingMessage, options *composeOpti
}
err = ctx.Session.DoIMAP(func(c *imapclient.Client) error {
- if _, _, err := appendMessage(c, msg, mailboxSent); err != nil {
+ if _, err := appendMessage(c, msg, mailboxSent); err != nil {
return err
}
if draft := options.Draft; draft != nil {
@@ -625,15 +626,29 @@ func handleCompose(ctx *alps.Context, msg *OutgoingMessage, options *composeOpti
uid uint32
)
err = ctx.Session.DoIMAP(func(c *imapclient.Client) error {
- drafts, uid, err = appendMessage(c, msg, mailboxDrafts)
+ drafts, err = appendMessage(c, msg, mailboxDrafts)
if err != nil {
return err
}
+
if draft := options.Draft; draft != nil {
if err := deleteMessage(c, draft.Mailbox, draft.Uid); err != nil {
return err
}
}
+
+ criteria := &imap.SearchCriteria{
+ Header: make(textproto.MIMEHeader),
+ }
+ criteria.Header.Add("Message-Id", msg.MessageID)
+ if uids, err := c.UidSearch(criteria); err != nil {
+ return err
+ } else {
+ if len(uids) != 1 {
+ panic(fmt.Errorf("Duplicate message ID"))
+ }
+ uid = uids[0]
+ }
return nil
})
if err != nil {