mirror of
https://github.com/jhillyerd/inbucket.git
synced 2026-01-09 12:48:27 +00:00
storage: Add Seen flag, tests for #58
This commit is contained in:
@@ -21,6 +21,7 @@ type Message struct {
|
||||
Fto []*mail.Address
|
||||
Fsubject string
|
||||
Fsize int64
|
||||
Fseen bool
|
||||
}
|
||||
|
||||
// newMessage creates a new FileMessage object and sets the Date and ID fields.
|
||||
@@ -96,3 +97,8 @@ func (m *Message) Source() (reader io.ReadCloser, err error) {
|
||||
}
|
||||
return file, nil
|
||||
}
|
||||
|
||||
// Seen returns the seen flag value.
|
||||
func (m *Message) Seen() bool {
|
||||
return m.Fseen
|
||||
}
|
||||
|
||||
@@ -147,6 +147,32 @@ func (fs *Store) GetMessages(mailbox string) ([]storage.Message, error) {
|
||||
return mb.getMessages()
|
||||
}
|
||||
|
||||
// MarkSeen flags the message as having been read.
|
||||
func (fs *Store) MarkSeen(mailbox, id string) error {
|
||||
mb, err := fs.mbox(mailbox)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
mb.Lock()
|
||||
defer mb.Unlock()
|
||||
if !mb.indexLoaded {
|
||||
if err := mb.readIndex(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for _, m := range mb.messages {
|
||||
if m.Fid == id {
|
||||
if m.Fseen {
|
||||
// Already marked seen.
|
||||
return nil
|
||||
}
|
||||
m.Fseen = true
|
||||
break
|
||||
}
|
||||
}
|
||||
return mb.writeIndex()
|
||||
}
|
||||
|
||||
// RemoveMessage deletes a message by ID from the specified mailbox.
|
||||
func (fs *Store) RemoveMessage(mailbox, id string) error {
|
||||
mb, err := fs.mbox(mailbox)
|
||||
|
||||
Reference in New Issue
Block a user