summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--worker/maildir/container.go38
1 files changed, 27 insertions, 11 deletions
diff --git a/worker/maildir/container.go b/worker/maildir/container.go
index 85e892a..cd9a447 100644
--- a/worker/maildir/container.go
+++ b/worker/maildir/container.go
@@ -2,8 +2,8 @@ package maildir
import (
"fmt"
- "io/ioutil"
"log"
+ "os"
"path/filepath"
"sort"
@@ -28,17 +28,33 @@ func NewContainer(dir string, l *log.Logger) *Container {
// ListFolders returns a list of maildir folders in the container
func (c *Container) ListFolders() ([]string, error) {
- files, err := ioutil.ReadDir(c.dir)
- if err != nil {
- return nil, fmt.Errorf("error reading folders: %v", err)
- }
- dirnames := []string{}
- for _, f := range files {
- if f.IsDir() {
- dirnames = append(dirnames, f.Name())
+ folders := []string{}
+ err := filepath.Walk(c.dir, func(path string, info os.FileInfo, err error) error {
+ if !info.IsDir() {
+ return nil
}
- }
- return dirnames, nil
+
+ // Skip maildir's default directories
+ n := info.Name()
+ if n == "new" || n == "tmp" || n == "cur" {
+ return filepath.SkipDir
+ }
+
+ // Get the relative path from the parent directory
+ dirPath, err := filepath.Rel(c.dir, path)
+ if err != nil {
+ return err
+ }
+
+ // Skip the parent directory
+ if dirPath == "." {
+ return nil
+ }
+
+ folders = append(folders, dirPath)
+ return nil
+ })
+ return folders, err
}
// OpenDirectory opens an existing maildir in the container by name, moves new