info.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "io"
  6. "os"
  7. "git.lattuga.net/blallo/papero/cli"
  8. "git.lattuga.net/blallo/papero/imaputils"
  9. )
  10. var infoVerbs cli.CommandMap
  11. func init() {
  12. lsMailbox := LsMailboxCmd{}
  13. lsMessages := LsMsgCmd{}
  14. catMessage := CatMsgCmd{}
  15. infoVerbs = cli.CommandMap{
  16. "list-mailboxes": lsMailbox,
  17. "list-messages": lsMessages,
  18. "display-message": catMessage,
  19. }
  20. }
  21. type InfoCmd struct{}
  22. func (i InfoCmd) Func(args []string) error {
  23. flagset := flag.NewFlagSet(args[0], flag.ExitOnError)
  24. flagset.Usage = func() { i.Help(os.Stdout, flagset) }
  25. flagset.Parse(args[1:])
  26. subArgs := flagset.Args()
  27. if len(subArgs) == 0 {
  28. i.Help(os.Stderr, flagset)
  29. os.Exit(1)
  30. }
  31. cmd := subArgs[0]
  32. if Session.Info.Opts.Debug {
  33. Log.Debug("info verb:", cmd)
  34. }
  35. return infoVerbs[cmd].Func(subArgs)
  36. }
  37. func (i InfoCmd) Help(w io.Writer, set *flag.FlagSet) {
  38. fmt.Fprintf(w, "USAGE: %s info VERB [verb opts]\n", Session.Info.Name)
  39. fmt.Fprintf(w, "\nVERBS:\n")
  40. for verb := range infoVerbs {
  41. fmt.Fprintf(w, "\t%s\n", verb)
  42. }
  43. }
  44. // VERBS
  45. type LsMailboxCmd struct{}
  46. func (l LsMailboxCmd) Func(args []string) error {
  47. if Session.Info.Opts.Debug {
  48. Log.Debug("enter info list-mailboxes")
  49. }
  50. var withAttributes bool
  51. flagset := flag.NewFlagSet(args[0], flag.ExitOnError)
  52. flagset.BoolVar(&withAttributes, "with-attrs", false, "toggle attributes display")
  53. flagset.Usage = func() { l.Help(os.Stdout, flagset) }
  54. flagset.Parse(args[1:])
  55. mboxInfo, err := imaputils.ListMailboxes(Session.Config, Session.Info.Opts.Debug)
  56. if err != nil {
  57. return err
  58. }
  59. if Session.Info.Opts.Debug {
  60. Log.Debug(mboxInfo)
  61. }
  62. for _, box := range mboxInfo {
  63. if withAttributes {
  64. attrs := fmt.Sprint(box.Attributes)
  65. fmt.Printf("%s (attrs: %s)", box.Name, attrs)
  66. } else {
  67. fmt.Println(box.Name)
  68. }
  69. }
  70. return nil
  71. }
  72. func (l LsMailboxCmd) Help(w io.Writer, set *flag.FlagSet) {
  73. fmt.Fprintf(w, "USAGE: %s info list-mailboxes\n", Session.Info.Name)
  74. set.PrintDefaults()
  75. }
  76. type LsMsgCmd struct{}
  77. func (l LsMsgCmd) Func(args []string) error {
  78. if Session.Info.Opts.Debug {
  79. Log.Debug("enter info list-messages")
  80. }
  81. var limit uint
  82. flagset := flag.NewFlagSet(args[0], flag.ExitOnError)
  83. flagset.UintVar(&limit, "limit", 0, "maximum number of messages to display (0 means no limit)")
  84. flagset.Usage = func() { l.Help(os.Stdout, flagset) }
  85. flagset.Parse(args[1:])
  86. subArgs := flagset.Args()
  87. if len(subArgs) != 1 {
  88. l.Help(os.Stderr, flagset)
  89. os.Exit(1)
  90. }
  91. return nil
  92. }
  93. func (l LsMsgCmd) Help(w io.Writer, set *flag.FlagSet) {
  94. fmt.Fprintf(w, "USAGE: %s info list-messages [opts] MAILBOX_NAME\n", Session.Info.Name)
  95. fmt.Fprintf(w, "\nOPTS:\n")
  96. set.PrintDefaults()
  97. }
  98. type CatMsgCmd struct{}
  99. func (c CatMsgCmd) Func(args []string) error {
  100. if Session.Info.Opts.Debug {
  101. Log.Debug("enter info display-message")
  102. }
  103. flagset := flag.NewFlagSet(args[0], flag.ExitOnError)
  104. flagset.Usage = func() { c.Help(os.Stdout, flagset) }
  105. flagset.Parse(args[1:])
  106. subArgs := flagset.Args()
  107. if len(subArgs) != 1 {
  108. c.Help(os.Stderr, flagset)
  109. os.Exit(1)
  110. }
  111. return nil
  112. }
  113. func (c CatMsgCmd) Help(w io.Writer, set *flag.FlagSet) {
  114. fmt.Fprintf(w, "USAGE: %s info display-message MAILBOX_NAME MESSAGE_ID\n", Session.Info.Name)
  115. set.PrintDefaults()
  116. }