imap: update to latest go-imap
This commit is contained in:
parent
6a205ff043
commit
442c03bbbc
|
@ -14,7 +14,7 @@ var errNotYetImplemented = errors.New("not yet implemented")
|
||||||
type backend struct {
|
type backend struct {
|
||||||
sessions *auth.Manager
|
sessions *auth.Manager
|
||||||
eventsManager *events.Manager
|
eventsManager *events.Manager
|
||||||
updates chan interface{}
|
updates chan imapbackend.Update
|
||||||
}
|
}
|
||||||
|
|
||||||
func (be *backend) Login(username, password string) (imapbackend.User, error) {
|
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)
|
return newUser(be, c, u, privateKeys)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (be *backend) Updates() <-chan interface{} {
|
func (be *backend) Updates() <-chan imapbackend.Update {
|
||||||
return be.updates
|
return be.updates
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(sessions *auth.Manager, eventsManager *events.Manager) imapbackend.Backend {
|
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)}
|
||||||
}
|
}
|
||||||
|
|
25
imap/user.go
25
imap/user.go
|
@ -179,9 +179,9 @@ func (u *user) poll() {
|
||||||
<-u.eventSent
|
<-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 {
|
for event := range events {
|
||||||
var eventUpdates []interface{}
|
var eventUpdates []imapbackend.Update
|
||||||
|
|
||||||
if event.Refresh&protonmail.EventRefreshMail != 0 {
|
if event.Refresh&protonmail.EventRefreshMail != 0 {
|
||||||
log.Println("Reinitializing the whole IMAP database")
|
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 {
|
for labelID, seqNum := range seqNums {
|
||||||
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
|
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
|
||||||
update := new(imapbackend.MailboxUpdate)
|
update := new(imapbackend.MailboxUpdate)
|
||||||
update.Username = u.u.Name
|
update.Update = imapbackend.NewUpdate(u.u.Name, mbox.name)
|
||||||
update.Mailbox = mbox.name
|
|
||||||
update.MailboxStatus = imap.NewMailboxStatus(mbox.name, []imap.StatusItem{imap.StatusMessages})
|
update.MailboxStatus = imap.NewMailboxStatus(mbox.name, []imap.StatusItem{imap.StatusMessages})
|
||||||
update.MailboxStatus.Messages = seqNum
|
update.MailboxStatus.Messages = seqNum
|
||||||
eventUpdates = append(eventUpdates, update)
|
eventUpdates = append(eventUpdates, update)
|
||||||
|
@ -234,8 +233,7 @@ func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonma
|
||||||
for labelID, seqNum := range createdSeqNums {
|
for labelID, seqNum := range createdSeqNums {
|
||||||
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
|
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
|
||||||
update := new(imapbackend.MailboxUpdate)
|
update := new(imapbackend.MailboxUpdate)
|
||||||
update.Username = u.u.Name
|
update.Update = imapbackend.NewUpdate(u.u.Name, mbox.name)
|
||||||
update.Mailbox = mbox.name
|
|
||||||
update.MailboxStatus = imap.NewMailboxStatus(mbox.name, []imap.StatusItem{imap.StatusMessages})
|
update.MailboxStatus = imap.NewMailboxStatus(mbox.name, []imap.StatusItem{imap.StatusMessages})
|
||||||
update.MailboxStatus.Messages = seqNum
|
update.MailboxStatus.Messages = seqNum
|
||||||
eventUpdates = append(eventUpdates, update)
|
eventUpdates = append(eventUpdates, update)
|
||||||
|
@ -244,8 +242,7 @@ func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonma
|
||||||
for labelID, seqNum := range deletedSeqNums {
|
for labelID, seqNum := range deletedSeqNums {
|
||||||
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
|
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
|
||||||
update := new(imapbackend.ExpungeUpdate)
|
update := new(imapbackend.ExpungeUpdate)
|
||||||
update.Username = u.u.Name
|
update.Update = imapbackend.NewUpdate(u.u.Name, mbox.name)
|
||||||
update.Mailbox = mbox.name
|
|
||||||
update.SeqNum = seqNum
|
update.SeqNum = seqNum
|
||||||
eventUpdates = append(eventUpdates, update)
|
eventUpdates = append(eventUpdates, update)
|
||||||
}
|
}
|
||||||
|
@ -272,8 +269,7 @@ func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonma
|
||||||
}
|
}
|
||||||
|
|
||||||
update := new(imapbackend.MessageUpdate)
|
update := new(imapbackend.MessageUpdate)
|
||||||
update.Username = u.u.Name
|
update.Update = imapbackend.NewUpdate(u.u.Name, mbox.name)
|
||||||
update.Mailbox = mbox.name
|
|
||||||
update.Message = imap.NewMessage(seqNum, []imap.FetchItem{imap.FetchFlags})
|
update.Message = imap.NewMessage(seqNum, []imap.FetchItem{imap.FetchFlags})
|
||||||
update.Message.Flags = fetchFlags(msg)
|
update.Message.Flags = fetchFlags(msg)
|
||||||
eventUpdates = append(eventUpdates, update)
|
eventUpdates = append(eventUpdates, update)
|
||||||
|
@ -290,8 +286,7 @@ func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonma
|
||||||
for labelID, seqNum := range seqNums {
|
for labelID, seqNum := range seqNums {
|
||||||
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
|
if mbox := u.getMailboxByLabel(labelID); mbox != nil {
|
||||||
update := new(imapbackend.ExpungeUpdate)
|
update := new(imapbackend.ExpungeUpdate)
|
||||||
update.Username = u.u.Name
|
update.Update = imapbackend.NewUpdate(u.u.Name, mbox.name)
|
||||||
update.Mailbox = mbox.name
|
|
||||||
update.SeqNum = seqNum
|
update.SeqNum = seqNum
|
||||||
eventUpdates = append(eventUpdates, update)
|
eventUpdates = append(eventUpdates, update)
|
||||||
}
|
}
|
||||||
|
@ -309,12 +304,14 @@ func (u *user) receiveEvents(updates chan<- interface{}, events <-chan *protonma
|
||||||
u.locker.Unlock()
|
u.locker.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
done := imapbackend.WaitUpdates(eventUpdates...)
|
|
||||||
for _, update := range eventUpdates {
|
for _, update := range eventUpdates {
|
||||||
updates <- update
|
updates <- update
|
||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
<-done
|
for _, update := range eventUpdates {
|
||||||
|
<-update.Done()
|
||||||
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case u.eventSent <- struct{}{}:
|
case u.eventSent <- struct{}{}:
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue