config.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. }
  11. type GuildsTreeKeysConfig struct {
  12. Graphics bool
  13. }
  14. type MessagesTextKeysConfig struct {
  15. SelectPreviousMessage string
  16. }
  17. type KeysConfig struct {
  18. GuildsTree GuildsTreeKeysConfig
  19. MessagesText MessagesTextKeysConfig
  20. }
  21. type Config struct {
  22. Mouse bool
  23. MessagesLimit uint
  24. Theme ThemeConfig
  25. Keys KeysConfig
  26. }
  27. func newConfig() (*Config, error) {
  28. path, err := os.UserConfigDir()
  29. if err != nil {
  30. return nil, err
  31. }
  32. path = filepath.Join(path, name)
  33. if err = os.MkdirAll(path, os.ModePerm); err != nil {
  34. return nil, err
  35. }
  36. c := Config{
  37. Mouse: true,
  38. MessagesLimit: 50,
  39. Theme: ThemeConfig{
  40. BorderPadding: [...]int{1, 1, 1, 1},
  41. },
  42. Keys: KeysConfig{
  43. GuildsTree: GuildsTreeKeysConfig{Graphics: true},
  44. MessagesText: MessagesTextKeysConfig{SelectPreviousMessage: "Up"},
  45. },
  46. }
  47. path = filepath.Join(path, "config.json")
  48. if _, err = os.Stat(path); os.IsNotExist(err) {
  49. f, err := os.Create(path)
  50. if err != nil {
  51. return nil, err
  52. }
  53. defer f.Close()
  54. e := json.NewEncoder(f)
  55. e.SetIndent("", "\t")
  56. if err = e.Encode(c); err != nil {
  57. return nil, err
  58. }
  59. } else {
  60. f, err := os.Open(path)
  61. if err != nil {
  62. return nil, err
  63. }
  64. defer f.Close()
  65. if err = json.NewDecoder(f).Decode(&c); err != nil {
  66. return nil, err
  67. }
  68. }
  69. return &c, nil
  70. }
  71. func (c *Config) BorderPadding() (int, int, int, int) {
  72. pad := c.Theme.BorderPadding
  73. return pad[0], pad[1], pad[2], pad[3]
  74. }