diff options
author | Ben Burwell <ben@benburwell.com> | 2019-07-07 22:43:56 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-07-08 16:06:23 -0400 |
commit | cce7cb48081ca090ac2d3a0e781dfbc25d581946 (patch) | |
tree | 0709eff3daf75ac975bc9e12f068d7951aeaefe6 /worker | |
parent | c79577d37675c8d9ed3355c532a215377e76d3b2 (diff) | |
download | aerc-cce7cb48081ca090ac2d3a0e781dfbc25d581946.tar.gz |
Factor UI models out of the worker message package
Before, the information needed to display different parts of the UI was
tightly coupled to the specific messages being sent back and forth to
the backend worker. Separating out a models package allows us to be more
specific about exactly what a backend is able to and required to
provide for the UI.
Diffstat (limited to 'worker')
-rw-r--r-- | worker/imap/fetch.go | 41 | ||||
-rw-r--r-- | worker/imap/list.go | 9 | ||||
-rw-r--r-- | worker/imap/worker.go | 29 | ||||
-rw-r--r-- | worker/types/messages.go | 25 |
4 files changed, 55 insertions, 49 deletions
diff --git a/worker/imap/fetch.go b/worker/imap/fetch.go index 7d1bfcf1..d5bb9aaf 100644 --- a/worker/imap/fetch.go +++ b/worker/imap/fetch.go @@ -8,6 +8,7 @@ import ( "github.com/emersion/go-message/mail" "github.com/emersion/go-message/textproto" + "git.sr.ht/~sircmpwn/aerc/models" "git.sr.ht/~sircmpwn/aerc/worker/types" ) @@ -82,39 +83,49 @@ func (imapw *IMAPWorker) handleFetchMessages( header = &mail.Header{message.Header{textprotoHeader}} } imapw.worker.PostMessage(&types.MessageInfo{ - Message: types.RespondTo(msg), - BodyStructure: _msg.BodyStructure, - Envelope: _msg.Envelope, - Flags: _msg.Flags, - InternalDate: _msg.InternalDate, - RFC822Headers: header, - Uid: _msg.Uid, + Message: types.RespondTo(msg), + Info: &models.MessageInfo{ + BodyStructure: _msg.BodyStructure, + Envelope: _msg.Envelope, + Flags: _msg.Flags, + InternalDate: _msg.InternalDate, + RFC822Headers: header, + Uid: _msg.Uid, + }, }, nil) case *types.FetchFullMessages: reader := _msg.GetBody(section) imapw.worker.PostMessage(&types.FullMessage{ Message: types.RespondTo(msg), - Reader: reader, - Uid: _msg.Uid, + Content: &models.FullMessage{ + Reader: reader, + Uid: _msg.Uid, + }, }, nil) // Update flags (to mark message as read) imapw.worker.PostMessage(&types.MessageInfo{ Message: types.RespondTo(msg), - Flags: _msg.Flags, - Uid: _msg.Uid, + Info: &models.MessageInfo{ + Flags: _msg.Flags, + Uid: _msg.Uid, + }, }, nil) case *types.FetchMessageBodyPart: reader := _msg.GetBody(section) imapw.worker.PostMessage(&types.MessageBodyPart{ Message: types.RespondTo(msg), - Reader: reader, - Uid: _msg.Uid, + Part: &models.MessageBodyPart{ + Reader: reader, + Uid: _msg.Uid, + }, }, nil) // Update flags (to mark message as read) imapw.worker.PostMessage(&types.MessageInfo{ Message: types.RespondTo(msg), - Flags: _msg.Flags, - Uid: _msg.Uid, + Info: &models.MessageInfo{ + Flags: _msg.Flags, + Uid: _msg.Uid, + }, }, nil) } } diff --git a/worker/imap/list.go b/worker/imap/list.go index 708e70fd..42be50e4 100644 --- a/worker/imap/list.go +++ b/worker/imap/list.go @@ -3,6 +3,7 @@ package imap import ( "github.com/emersion/go-imap" + "git.sr.ht/~sircmpwn/aerc/models" "git.sr.ht/~sircmpwn/aerc/worker/types" ) @@ -18,9 +19,11 @@ func (imapw *IMAPWorker) handleListDirectories(msg *types.ListDirectories) { continue } imapw.worker.PostMessage(&types.Directory{ - Message: types.RespondTo(msg), - Name: mbox.Name, - Attributes: mbox.Attributes, + Message: types.RespondTo(msg), + Dir: &models.Directory{ + Name: mbox.Name, + Attributes: mbox.Attributes, + }, }, nil) } done <- nil diff --git a/worker/imap/worker.go b/worker/imap/worker.go index 5005620f..9ddaa47e 100644 --- a/worker/imap/worker.go +++ b/worker/imap/worker.go @@ -10,6 +10,7 @@ import ( idle "github.com/emersion/go-imap-idle" "github.com/emersion/go-imap/client" + "git.sr.ht/~sircmpwn/aerc/models" "git.sr.ht/~sircmpwn/aerc/worker/types" ) @@ -169,13 +170,15 @@ func (w *IMAPWorker) handleImapUpdate(update client.Update) { w.selected = *status } w.worker.PostMessage(&types.DirectoryInfo{ - Flags: status.Flags, - Name: status.Name, - ReadOnly: status.ReadOnly, - - Exists: int(status.Messages), - Recent: int(status.Recent), - Unseen: int(status.Unseen), + Info: &models.DirectoryInfo{ + Flags: status.Flags, + Name: status.Name, + ReadOnly: status.ReadOnly, + + Exists: int(status.Messages), + Recent: int(status.Recent), + Unseen: int(status.Unseen), + }, }, nil) case *client.MessageUpdate: msg := update.Message @@ -183,11 +186,13 @@ func (w *IMAPWorker) handleImapUpdate(update client.Update) { msg.Uid = w.seqMap[msg.SeqNum-1] } w.worker.PostMessage(&types.MessageInfo{ - BodyStructure: msg.BodyStructure, - Envelope: msg.Envelope, - Flags: msg.Flags, - InternalDate: msg.InternalDate, - Uid: msg.Uid, + Info: &models.MessageInfo{ + BodyStructure: msg.BodyStructure, + Envelope: msg.Envelope, + Flags: msg.Flags, + InternalDate: msg.InternalDate, + Uid: msg.Uid, + }, }, nil) case *client.ExpungeUpdate: i := update.SeqNum - 1 diff --git a/worker/types/messages.go b/worker/types/messages.go index d9e911f1..bb2505a3 100644 --- a/worker/types/messages.go +++ b/worker/types/messages.go @@ -5,9 +5,9 @@ import ( "time" "github.com/emersion/go-imap" - "github.com/emersion/go-message/mail" "git.sr.ht/~sircmpwn/aerc/config" + "git.sr.ht/~sircmpwn/aerc/models" ) type WorkerMessage interface { @@ -139,17 +139,12 @@ type AppendMessage struct { type Directory struct { Message - Attributes []string - Name string + Dir *models.Directory } type DirectoryInfo struct { Message - Flags []string - Name string - ReadOnly bool - - Exists, Recent, Unseen int + Info *models.DirectoryInfo } type DirectoryContents struct { @@ -164,25 +159,17 @@ type SearchResults struct { type MessageInfo struct { Message - BodyStructure *imap.BodyStructure - Envelope *imap.Envelope - Flags []string - InternalDate time.Time - RFC822Headers *mail.Header - Size uint32 - Uid uint32 + Info *models.MessageInfo } type FullMessage struct { Message - Reader io.Reader - Uid uint32 + Content *models.FullMessage } type MessageBodyPart struct { Message - Reader io.Reader - Uid uint32 + Part *models.MessageBodyPart } type MessagesDeleted struct { |