|
@@ -0,0 +1,137 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "flag"
|
|
|
+ "fmt"
|
|
|
+ "io"
|
|
|
+ "os"
|
|
|
+
|
|
|
+ "git.lattuga.net/blallo/papero/cli"
|
|
|
+ "git.lattuga.net/blallo/papero/imaputils"
|
|
|
+)
|
|
|
+
|
|
|
+var infoVerbs cli.CommandMap
|
|
|
+
|
|
|
+func init() {
|
|
|
+ lsMailbox := LsMailboxCmd{}
|
|
|
+ lsMessages := LsMsgCmd{}
|
|
|
+ catMessage := CatMsgCmd{}
|
|
|
+ infoVerbs = cli.CommandMap{
|
|
|
+ "list-mailboxes": lsMailbox,
|
|
|
+ "list-messages": lsMessages,
|
|
|
+ "display-message": catMessage,
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+type InfoCmd struct{}
|
|
|
+
|
|
|
+func (i InfoCmd) Func(args []string) error {
|
|
|
+ flagset := flag.NewFlagSet(args[0], flag.ExitOnError)
|
|
|
+ flagset.Usage = func() { i.Help(os.Stdout, flagset) }
|
|
|
+ flagset.Parse(args[1:])
|
|
|
+ subArgs := flagset.Args()
|
|
|
+ if len(subArgs) == 0 {
|
|
|
+ i.Help(os.Stderr, flagset)
|
|
|
+ os.Exit(1)
|
|
|
+ }
|
|
|
+ cmd := subArgs[0]
|
|
|
+ if Session.Info.Opts.Debug {
|
|
|
+ Log.Debug("info verb:", cmd)
|
|
|
+ }
|
|
|
+
|
|
|
+ return infoVerbs[cmd].Func(subArgs)
|
|
|
+}
|
|
|
+
|
|
|
+func (i InfoCmd) Help(w io.Writer, set *flag.FlagSet) {
|
|
|
+ fmt.Fprintf(w, "USAGE: %s info VERB [verb opts]\n", Session.Info.Name)
|
|
|
+ fmt.Fprintf(w, "\nVERBS:\n")
|
|
|
+ for verb := range infoVerbs {
|
|
|
+ fmt.Fprintf(w, "\t%s\n", verb)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// VERBS
|
|
|
+
|
|
|
+type LsMailboxCmd struct{}
|
|
|
+
|
|
|
+func (l LsMailboxCmd) Func(args []string) error {
|
|
|
+ if Session.Info.Opts.Debug {
|
|
|
+ Log.Debug("enter info list-mailboxes")
|
|
|
+ }
|
|
|
+ var withAttributes bool
|
|
|
+ flagset := flag.NewFlagSet(args[0], flag.ExitOnError)
|
|
|
+ flagset.BoolVar(&withAttributes, "with-attrs", false, "toggle attributes display")
|
|
|
+ flagset.Usage = func() { l.Help(os.Stdout, flagset) }
|
|
|
+ flagset.Parse(args[1:])
|
|
|
+
|
|
|
+ mboxInfo, err := imaputils.ListMailboxes(Session.Config, Session.Info.Opts.Debug)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if Session.Info.Opts.Debug {
|
|
|
+ Log.Debug(mboxInfo)
|
|
|
+ }
|
|
|
+ for _, box := range mboxInfo {
|
|
|
+ if withAttributes {
|
|
|
+ attrs := fmt.Sprint(box.Attributes)
|
|
|
+ fmt.Printf("%s (attrs: %s)", box.Name, attrs)
|
|
|
+ } else {
|
|
|
+ fmt.Println(box.Name)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (l LsMailboxCmd) Help(w io.Writer, set *flag.FlagSet) {
|
|
|
+ fmt.Fprintf(w, "USAGE: %s info list-mailboxes\n", Session.Info.Name)
|
|
|
+ set.PrintDefaults()
|
|
|
+}
|
|
|
+
|
|
|
+type LsMsgCmd struct{}
|
|
|
+
|
|
|
+func (l LsMsgCmd) Func(args []string) error {
|
|
|
+ if Session.Info.Opts.Debug {
|
|
|
+ Log.Debug("enter info list-messages")
|
|
|
+ }
|
|
|
+ var limit uint
|
|
|
+ flagset := flag.NewFlagSet(args[0], flag.ExitOnError)
|
|
|
+ flagset.UintVar(&limit, "limit", 0, "maximum number of messages to display (0 means no limit)")
|
|
|
+ flagset.Usage = func() { l.Help(os.Stdout, flagset) }
|
|
|
+ flagset.Parse(args[1:])
|
|
|
+
|
|
|
+ subArgs := flagset.Args()
|
|
|
+ if len(subArgs) != 1 {
|
|
|
+ l.Help(os.Stderr, flagset)
|
|
|
+ os.Exit(1)
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (l LsMsgCmd) Help(w io.Writer, set *flag.FlagSet) {
|
|
|
+ fmt.Fprintf(w, "USAGE: %s info list-messages [opts] MAILBOX_NAME\n", Session.Info.Name)
|
|
|
+ fmt.Fprintf(w, "\nOPTS:\n")
|
|
|
+ set.PrintDefaults()
|
|
|
+}
|
|
|
+
|
|
|
+type CatMsgCmd struct{}
|
|
|
+
|
|
|
+func (c CatMsgCmd) Func(args []string) error {
|
|
|
+ if Session.Info.Opts.Debug {
|
|
|
+ Log.Debug("enter info display-message")
|
|
|
+ }
|
|
|
+ flagset := flag.NewFlagSet(args[0], flag.ExitOnError)
|
|
|
+ flagset.Usage = func() { c.Help(os.Stdout, flagset) }
|
|
|
+ flagset.Parse(args[1:])
|
|
|
+
|
|
|
+ subArgs := flagset.Args()
|
|
|
+ if len(subArgs) != 1 {
|
|
|
+ c.Help(os.Stderr, flagset)
|
|
|
+ os.Exit(1)
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c CatMsgCmd) Help(w io.Writer, set *flag.FlagSet) {
|
|
|
+ fmt.Fprintf(w, "USAGE: %s info display-message MAILBOX_NAME MESSAGE_ID\n", Session.Info.Name)
|
|
|
+ set.PrintDefaults()
|
|
|
+}
|