diff --git a/main.go b/main.go index c755bb9..1468acb 100644 --- a/main.go +++ b/main.go @@ -2,9 +2,11 @@ package main import ( "bufio" + "errors" "flag" "fmt" "log" + "mime/quotedprintable" "os" "strings" @@ -37,7 +39,7 @@ type Classifiers struct { } // Index loads all mail keys from the Maildir directory for processing. -func Index(d string) (m []Mail, err error) { +func Index(d string) (m []*Mail, err error) { g, err := maildir.Dir(d).Keys() if err != nil { @@ -46,7 +48,7 @@ func Index(d string) (m []Mail, err error) { for _, val := range g { var new Mail new.Key = val - m = append(m, new) + m = append(m, &new) } j, err := maildir.Dir(d + "/.Junk").Keys() @@ -57,24 +59,24 @@ func Index(d string) (m []Mail, err error) { var new Mail new.Key = val new.Junk = true - m = append(m, new) + m = append(m, &new) } return m, nil } // Learn initially classifies all mails and returns the respective classifiers. -func (m Mail) Learn() (c Classifiers, err error) { +func (m *Mail) Learn() (c Classifiers, err error) { return } // Clean prepares the mail's subject and body for training -func (m Mail) Clean() error { +func (m *Mail) Clean() error { return nil } // Load reads a mail's subject and body -func (m Mail) Load(d string) error { +func (m *Mail) Load(d string) error { message, err := maildir.Dir(d).Message(m.Key) if err != nil { @@ -82,17 +84,26 @@ func (m Mail) Load(d string) error { } // get Subject + if m.Subject != nil { + return errors.New("there is already a subject") + } subject := message.Header.Get("Subject") m.Subject = &subject // get Body + bQ := quotedprintable.NewReader(message.Body) var b []string - bScanner := bufio.NewScanner(message.Body) + bScanner := bufio.NewScanner(bQ) for bScanner.Scan() { - b = append(b, bScanner.Text()) + raw := bScanner.Text() + clean := strings.Replace(raw, "\\", "hallo", -1) + b = append(b, clean) } body := strings.Join(b, " ") + if m.Body != nil { + return errors.New("there is already a body") + } m.Body = &body return nil diff --git a/main_test.go b/main_test.go index 24913ff..86459ce 100644 --- a/main_test.go +++ b/main_test.go @@ -9,12 +9,12 @@ import ( var _ = Describe("Main", func() { - Context("Index Maildir", func() { + Context("Maildir", func() { It("Create a slice of mail keys", func() { result, err := Index("test/Maildir") Ω(err).ShouldNot(HaveOccurred()) Ω(result).Should(Equal( - []Mail{ + []*Mail{ { Key: "1488230510.M141612P8565.mail.carlostrub.ch,S=5978,W=6119", @@ -61,4 +61,28 @@ var _ = Describe("Main", func() { })) }) }) + + Context("Mail", func() { + It("Load mail content into struct", func() { + m := Mail{ + Key: "1488226337.M327822P8269.mail.carlostrub.ch,S=3620,W=3730", + Subject: nil, + Body: nil, + Junk: true, + } + + err := m.Load("test/Maildir" + "/.Junk") + Ω(err).ShouldNot(HaveOccurred()) + + subject := "hello" + body := "This is a multi00_0032_01D2912F.05324BC6-- " + Ω(m).Should(Equal( + Mail{ + Key: "1488226337.M327822P8269.mail.carlostrub.ch,S=3620,W=3730", + Subject: &subject, + Body: &body, + Junk: true, + })) + }) + }) })