Write methods for Maildir

master
Carlo Strub 7 years ago
parent 59c43f40bc
commit 1a71d29eae

@ -23,6 +23,9 @@ const (
Junk = "1"
)
// Maildir represents the address to a Maildir directory
type Maildir string
// Mail includes the key of a mail in Maildir
type Mail struct {
Key string
@ -31,37 +34,43 @@ type Mail struct {
}
// CreateDirs creates all the required dirs -- if not already there.
func CreateDirs(maildir string) {
func (d Maildir) CreateDirs() {
dir := string(d)
log.Println("create missing directories for Maildir " + dir)
log.Println("create missing directories")
os.MkdirAll(maildir+"/.Junk/cur", 0700)
os.MkdirAll(maildir+"/new", 0700)
os.MkdirAll(maildir+"/cur", 0700)
os.MkdirAll(dir+"/.Junk/cur", 0700)
os.MkdirAll(dir+"/new", 0700)
os.MkdirAll(dir+"/cur", 0700)
return
}
// Index loads all mail keys from the Maildir directory for processing.
func Index(d string) (m []*Mail, err error) {
func (d Maildir) Index() (m []*Mail, err error) {
log.Println("loading mails")
dirs := []string{d, d + "/.Junk"}
for _, dir := range dirs {
j, err := maildir.Dir(dir).Keys()
dir := string(d)
log.Println("start indexing mails in " + dir)
dirs := []string{dir, dir + "/.Junk"}
for _, val := range dirs {
j, err := maildir.Dir(val).Keys()
if err != nil {
return m, err
}
for _, val := range j {
for _, v := range j {
var new Mail
new.Key = val
if dir == d+"/.Junk" {
new.Key = v
if val == dir+"/.Junk" {
new.Junk = true
}
m = append(m, &new)
}
}
log.Println("mails loaded")
log.Println("all mails in " + dir + " indexed")
return m, nil
}

@ -40,7 +40,7 @@ var _ = Describe("Mail", func() {
Context("Maildir", func() {
It("Create a slice of mail keys", func() {
result, err := s.Index("test/Maildir")
result, err := s.Maildir("test/Maildir").Index()
Ω(err).ShouldNot(HaveOccurred())
name := func(m1, m2 *s.Mail) bool {
@ -51,51 +51,36 @@ var _ = Describe("Mail", func() {
[]*s.Mail{
{
Key: "1488181583.M633084P4781.mail.carlostrub.ch,S=708375,W=720014",
Subject: nil,
Body: nil,
Junk: true,
Key: "1488181583.M633084P4781.mail.carlostrub.ch,S=708375,W=720014",
Junk: true,
},
{
Key: "1488226337.M327822P8269.mail.carlostrub.ch,S=3620,W=3730",
Subject: nil,
Body: nil,
Junk: true,
Key: "1488226337.M327822P8269.mail.carlostrub.ch,S=3620,W=3730",
Junk: true,
},
{
Key: "1488226337.M327824P8269.mail.carlostrub.ch,S=8044,W=8167",
Subject: nil,
Body: nil,
Junk: true,
Key: "1488226337.M327824P8269.mail.carlostrub.ch,S=8044,W=8167",
Junk: true,
},
{
Key: "1488226337.M327825P8269.mail.carlostrub.ch,S=802286,W=812785",
Subject: nil,
Body: nil,
Junk: true,
Key: "1488226337.M327825P8269.mail.carlostrub.ch,S=802286,W=812785",
Junk: true,
},
{
Key: "1488226337.M327833P8269.mail.carlostrub.ch,S=6960,W=7161",
Subject: nil,
Body: nil,
Junk: true,
Key: "1488226337.M327833P8269.mail.carlostrub.ch,S=6960,W=7161",
Junk: true,
},
{
Key: "1488228352.M339670P8269.mail.carlostrub.ch,S=12659,W=12782",
Subject: nil,
Body: nil,
Junk: true,
Key: "1488228352.M339670P8269.mail.carlostrub.ch,S=12659,W=12782",
Junk: true,
},
{
Key: "1488230510.M141612P8565.mail.carlostrub.ch,S=5978,W=6119",
Subject: nil,
Body: nil,
Junk: false,
Key: "1488230510.M141612P8565.mail.carlostrub.ch,S=5978,W=6119",
},
}))
})
It("Fail if Maildir does not exist", func() {
_, err := s.Index("test/DOESNOTEXIST")
_, err := s.Maildir("test/DOESNOTEXIST").Index()
Ω(err).Should(HaveOccurred())
})
})

@ -114,9 +114,9 @@ func main() {
log.Fatal("Sorry... only one Maildir supported as of today.")
}
sisyphus.CreateDirs(maildirPaths[0])
sisyphus.Maildir(maildirPaths[0]).CreateDirs()
mails, err := sisyphus.Index(maildirPaths[0])
mails, err := sisyphus.Maildir(maildirPaths[0]).Index()
if err != nil {
log.Fatal("Wrong path to Maildir")
}

Loading…
Cancel
Save