rootCmd.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "path/filepath"
  7. "regexp"
  8. "strings"
  9. "time"
  10. "code.osinet.fr/fgm/kurz/web/i18n"
  11. "github.com/spf13/cobra"
  12. "github.com/spf13/viper"
  13. "golang.org/x/text/language"
  14. )
  15. var cmd = &cobra.Command{
  16. Use: "kurzd",
  17. Short: "kurzd is the Kurz daemon and back-office command",
  18. Long: `kurzd is the actual engine for Kurz. Use it as the server for your Kurz clients.
  19. Configure it by copying dist.config.yml to ~/.kurz/config.yml and editing the copy.`,
  20. }
  21. var verbose bool
  22. func initConfig() {
  23. viper.SetConfigName("config")
  24. viper.AddConfigPath(".")
  25. viper.AddConfigPath("$HOME/.kurz")
  26. err := viper.ReadInConfig()
  27. if err != nil {
  28. fmt.Fprintln(os.Stderr, err)
  29. os.Exit(2)
  30. }
  31. }
  32. func init() {
  33. cobra.OnInitialize(initConfig)
  34. verbose = *cmd.PersistentFlags().BoolP("verbose", "v", false, "Add -v for verbose operation")
  35. setupI18n()
  36. }
  37. func setupI18n() {
  38. cwd, err := os.Getwd()
  39. if err != nil {
  40. panic(err)
  41. }
  42. t0 := time.Now()
  43. log.Printf("Finding message catalogs below %s\n", cwd)
  44. tags := []string{language.English.String(), language.French.String()}
  45. // Build the regex matching message file names.
  46. re := regexp.MustCompile("messages\\.(?:" + strings.Join(tags, "|") + ")\\.yaml")
  47. scanned := 0
  48. catalogCount := 0
  49. walkErr := filepath.Walk(cwd, func(path string, info os.FileInfo, err error) error {
  50. scanned++
  51. if err != nil {
  52. panic(err)
  53. }
  54. if info.IsDir() {
  55. return nil
  56. }
  57. if !re.MatchString(info.Name()) {
  58. return nil
  59. }
  60. _, err = i18n.Bundle.LoadMessageFile(path)
  61. catalogCount++
  62. return err
  63. })
  64. if walkErr != nil {
  65. panic(walkErr)
  66. }
  67. t1 := time.Now()
  68. diff := t1.Sub(t0)
  69. log.Printf("%d items scanned, %d catalogs loaded in %d msec\n", scanned, catalogCount, diff/time.Millisecond)
  70. }