123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- 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()
- }
|