config.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package main
  2. import (
  3. "encoding/json"
  4. "os"
  5. "path/filepath"
  6. )
  7. const name = "discordo"
  8. type ThemeConfig struct {
  9. BorderPadding [4]int
  10. MessageFormat string
  11. }
  12. type Config struct {
  13. Mouse bool
  14. MessagesLimit uint
  15. Theme ThemeConfig
  16. }
  17. func newConfig() (*Config, error) {
  18. path, err := os.UserConfigDir()
  19. if err != nil {
  20. return nil, err
  21. }
  22. path = filepath.Join(path, name)
  23. if err = os.MkdirAll(path, os.ModePerm); err != nil {
  24. return nil, err
  25. }
  26. c := Config{
  27. Mouse: true,
  28. MessagesLimit: 50,
  29. Theme: ThemeConfig{
  30. BorderPadding: [...]int{1, 1, 1, 1},
  31. MessageFormat: `{{.Author.Username}}
  32. {{.Content}}
  33. `,
  34. },
  35. }
  36. path = filepath.Join(path, "config.json")
  37. if _, err = os.Stat(path); os.IsNotExist(err) {
  38. f, err := os.Create(path)
  39. if err != nil {
  40. return nil, err
  41. }
  42. defer f.Close()
  43. e := json.NewEncoder(f)
  44. e.SetIndent("", "\t")
  45. if err = e.Encode(c); err != nil {
  46. return nil, err
  47. }
  48. } else {
  49. f, err := os.Open(path)
  50. if err != nil {
  51. return nil, err
  52. }
  53. defer f.Close()
  54. if err = json.NewDecoder(f).Decode(&c); err != nil {
  55. return nil, err
  56. }
  57. }
  58. return &c, nil
  59. }
  60. func (c *Config) BorderPadding() (int, int, int, int) {
  61. pad := c.Theme.BorderPadding
  62. return pad[0], pad[1], pad[2], pad[3]
  63. }