M cmd/mb/main.go +8 -29
@@ 132,14 132,10 @@ func main() {
src.Close()
break
}
- // todo: save more than one part?
- // otherwise the channel would make no sense, we can return string
- files := make(chan string)
- go func() {
- err = mb.Save(files, msg, part)
- close(files)
- }()
- for file := range files {
+ // todo: save more than one part by using matchers
+ var files []string
+ files, err = mb.Save(msg, part)
+ for _, file := range files {
os.Stdout.WriteString(file + "\n")
}
if err != nil {
@@ 159,15 155,10 @@ func main() {
src.Close()
break
}
- parts := make(chan string)
- go func() {
- err = mb.Parts(parts, msg)
- close(parts)
- }()
- var i int64 = 1
- for part := range parts {
- os.Stdout.WriteString(strconv.FormatInt(i, 10) + ": " + part + "\n")
- i++
+ var parts []string
+ parts, err = mb.Parts(msg)
+ for i, part := range parts {
+ os.Stdout.WriteString(strconv.Itoa(i+1) + ": " + part + "\n")
}
if err != nil {
src.Close()
@@ 363,18 354,6 @@ func parseRegexpCmd(args []string) (stri
// signature support
// encryption support
-func printParts(msg *mail.Message) (err error) {
- parts := make(chan string)
- go func() {
- err = mb.Parts(parts, msg)
- close(parts)
- }()
- for part := range parts {
- os.Stdout.WriteString(part + "\n")
- }
- return
-}
-
/*
func mainSocket() {
c, err := net.Dial("unix", "/tmp/mbs.sock")
M command.go +10 -7
@@ 62,8 62,9 @@ func partError(no int, msg string) error
return errors.New("mime part " + strconv.Itoa(no) + ": " + msg)
}
-// todo: we need a part matcher or what?
-func Save(files chan string, msg *mail.Message, number int) error {
+// todo: implement matcher
+func Save(msg *mail.Message, number int) ([]string, error) {
+ var files []string
saver := func(p part, no int) error {
if no != number {
return nil
@@ 88,22 89,24 @@ func Save(files chan string, msg *mail.M
if _, err = io.Copy(f, in); err != nil {
return partError(no, err.Error())
}
- files <- f.Name()
+ files = append(files, f.Name())
if err = f.Close(); err != nil {
return partError(no, err.Error())
}
return nil
}
- return parse(msg, saver)
+ return files, parse(msg, saver)
}
// todo: print something like "inbox/33:1 <header>"?
-func Parts(parts chan string, msg *mail.Message) error {
+func Parts(msg *mail.Message) ([]string, error) {
+ var parts []string
+
partsLister := func(p part, no int) error {
- parts <- p.Header.Get("Content-Type")
+ parts = append(parts, p.Header.Get("Content-Type"))
return nil
}
- return parse(msg, partsLister)
+ return parts, parse(msg, partsLister)
}
func ViewPart(dst io.Writer, msg *mail.Message, number int) error {
M list.go +1 -1
@@ 15,7 15,7 @@ var oneDayAhead = time.Now().Add(24 * ti
func List(mbox Mailbox, dst io.Writer, folder string, pick *Sequence) error {
msgs, err := mbox.ReadFolder(folder)
if err != nil && msgs == nil {
- // don't leave now, show as much as we can
+ // don't leave if we have msg, show as much as we can
return err
}
out := bufio.NewWriter(dst)