imap: update to latest go-imap

This commit is contained in:
emersion 2018-01-14 11:21:34 +01:00
parent 6a205ff043
commit 442c03bbbc
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48
2 changed files with 14 additions and 17 deletions

View File

@ -14,7 +14,7 @@ var errNotYetImplemented = errors.New("not yet implemented")
type backend struct {
sessions *auth.Manager
eventsManager *events.Manager
updates chan interface{}
updates chan imapbackend.Update
}
func (be *backend) Login(username, password string) (imapbackend.User, error) {
@ -33,10 +33,10 @@ func (be *backend) Login(username, password string) (imapbackend.User, error) {
return newUser(be, c, u, privateKeys)
}
func (be *backend) Updates() <-chan interface{} {
func (be *backend) Updates() <-chan imapbackend.Update {
return be.updates
}
func New(sessions *auth.Manager, eventsManager *events.Manager) imapbackend.Backend {
return &backend{sessions, eventsManager, make(chan interface{}, 50)}
return &backend{sessions, eventsManager, make(chan imapbackend.Update, 50)}
}

View File

@ -179,9 +179,9 @@ func (u *user) poll() {
<-u.eventSent
}
func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonmail.Event) {
func (u *user) receiveEvents(updates chan<- imapbackend.Update, events <-chan *protonmail.Event) {
for event := range events {
var eventUpdates []interface{}
var eventUpdates []imapbackend.Update
if event.Refresh&protonmail.EventRefreshMail != 0 {
log.Println("Reinitializing the whole IMAP database")
@ -216,8 +216,7 @@ func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonma
for labelID, seqNum := range seqNums {
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
update := new(imapbackend.MailboxUpdate)
update.Username = u.u.Name
update.Mailbox = mbox.name
update.Update = imapbackend.NewUpdate(u.u.Name, mbox.name)
update.MailboxStatus = imap.NewMailboxStatus(mbox.name, []imap.StatusItem{imap.StatusMessages})
update.MailboxStatus.Messages = seqNum
eventUpdates = append(eventUpdates, update)
@ -234,8 +233,7 @@ func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonma
for labelID, seqNum := range createdSeqNums {
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
update := new(imapbackend.MailboxUpdate)
update.Username = u.u.Name
update.Mailbox = mbox.name
update.Update = imapbackend.NewUpdate(u.u.Name, mbox.name)
update.MailboxStatus = imap.NewMailboxStatus(mbox.name, []imap.StatusItem{imap.StatusMessages})
update.MailboxStatus.Messages = seqNum
eventUpdates = append(eventUpdates, update)
@ -244,8 +242,7 @@ func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonma
for labelID, seqNum := range deletedSeqNums {
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
update := new(imapbackend.ExpungeUpdate)
update.Username = u.u.Name
update.Mailbox = mbox.name
update.Update = imapbackend.NewUpdate(u.u.Name, mbox.name)
update.SeqNum = seqNum
eventUpdates = append(eventUpdates, update)
}
@ -272,8 +269,7 @@ func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonma
}
update := new(imapbackend.MessageUpdate)
update.Username = u.u.Name
update.Mailbox = mbox.name
update.Update = imapbackend.NewUpdate(u.u.Name, mbox.name)
update.Message = imap.NewMessage(seqNum, []imap.FetchItem{imap.FetchFlags})
update.Message.Flags = fetchFlags(msg)
eventUpdates = append(eventUpdates, update)
@ -290,8 +286,7 @@ func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonma
for labelID, seqNum := range seqNums {
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
update := new(imapbackend.ExpungeUpdate)
update.Username = u.u.Name
update.Mailbox = mbox.name
update.Update = imapbackend.NewUpdate(u.u.Name, mbox.name)
update.SeqNum = seqNum
eventUpdates = append(eventUpdates, update)
}
@ -309,12 +304,14 @@ func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonma
u.locker.Unlock()
}
done := imapbackend.WaitUpdates(eventUpdates...)
for _, update := range eventUpdates {
updates <- update
}
go func() {
<-done
for _, update := range eventUpdates {
<-update.Done()
}
select {
case u.eventSent <- struct{}{}:
default: