main.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package main
  2. import (
  3. "flag"
  4. "os"
  5. "git.sr.ht/~blallo/papero/cli"
  6. "git.sr.ht/~blallo/papero/config"
  7. "github.com/withmandala/go-log"
  8. )
  9. var Session struct {
  10. Info cli.ProgramInfo
  11. Config *config.AccountData
  12. }
  13. var Log *log.Logger
  14. func init() {
  15. info := InfoCmd{}
  16. set := SetCmd{}
  17. Session.Info.Commands = cli.CommandMap{
  18. "info": info,
  19. "set": set,
  20. }
  21. Session.Info.Name = "papero"
  22. flag.Usage = func() { cli.Usage(os.Stdout, Session.Info) }
  23. Log = log.New(os.Stdout)
  24. }
  25. func main() {
  26. var configPath string
  27. flag.StringVar(&Session.Info.Opts.ConfigPath, "config", "", "path to the configuration")
  28. flag.BoolVar(&Session.Info.Opts.Debug, "debug", false, "execute in debug mode")
  29. flag.StringVar(&Session.Info.Opts.ConfigStanza, "account", "", "specify which account to use")
  30. flag.Parse()
  31. args := flag.Args()
  32. if len(args) == 0 {
  33. cli.Usage(os.Stderr, Session.Info)
  34. os.Exit(1)
  35. }
  36. if Session.Info.Opts.Debug {
  37. Log.WithDebug()
  38. Log.Debugf(
  39. "opts -> config: %s\tdebug: %v\taccount: %s\n",
  40. Session.Info.Opts.ConfigPath,
  41. Session.Info.Opts.Debug,
  42. Session.Info.Opts.ConfigStanza,
  43. )
  44. }
  45. if Session.Info.Opts.ConfigPath == "" {
  46. var err error
  47. configPath, err = config.Find()
  48. if err != nil {
  49. Log.Fatal(err)
  50. }
  51. } else {
  52. configPath = Session.Info.Opts.ConfigPath
  53. }
  54. fullConfig, err := config.Parse(configPath)
  55. if err != nil {
  56. os.Exit(2)
  57. }
  58. var ok bool
  59. var account string
  60. if Session.Info.Opts.ConfigStanza != "" {
  61. account = Session.Info.Opts.ConfigStanza
  62. Session.Config, ok = fullConfig.Accounts[account]
  63. } else {
  64. account = fullConfig.Default
  65. Session.Config, ok = fullConfig.Accounts[account]
  66. }
  67. if !ok {
  68. Log.Error("Account not found in config:", account)
  69. os.Exit(2)
  70. }
  71. err = Session.Info.Commands[args[0]].Func(args)
  72. if err != nil {
  73. Log.Error(err)
  74. os.Exit(-1)
  75. }
  76. }