aboutsummaryrefslogtreecommitdiffstats
path: root/worker/mbox/io.go
diff options
context:
space:
mode:
Diffstat (limited to 'worker/mbox/io.go')
-rw-r--r--worker/mbox/io.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/worker/mbox/io.go b/worker/mbox/io.go
new file mode 100644
index 00000000..38469160
--- /dev/null
+++ b/worker/mbox/io.go
@@ -0,0 +1,50 @@
+package mboxer
+
+import (
+ "io"
+ "io/ioutil"
+ "time"
+
+ "git.sr.ht/~rjarry/aerc/models"
+ "git.sr.ht/~rjarry/aerc/worker/lib"
+ "github.com/emersion/go-mbox"
+)
+
+func Read(r io.Reader) ([]lib.RawMessage, error) {
+ mbr := mbox.NewReader(r)
+ uid := uint32(0)
+ messages := make([]lib.RawMessage, 0)
+ for {
+ msg, err := mbr.NextMessage()
+ if err == io.EOF {
+ break
+ } else if err != nil {
+ return nil, err
+ }
+
+ content, err := ioutil.ReadAll(msg)
+ if err != nil {
+ return nil, err
+ }
+
+ messages = append(messages, &message{
+ uid: uid, flags: []models.Flag{models.SeenFlag}, content: content,
+ })
+
+ uid++
+ }
+ return messages, nil
+}
+
+func Write(w io.Writer, reader io.Reader, from string, date time.Time) error {
+ wc := mbox.NewWriter(w)
+ mw, err := wc.CreateMessage(from, time.Now())
+ if err != nil {
+ return err
+ }
+ _, err = io.Copy(mw, reader)
+ if err != nil {
+ return err
+ }
+ return wc.Close()
+}