config.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package main
  2. import (
  3. "encoding/json"
  4. "os"
  5. "path/filepath"
  6. )
  7. const name = "discordo"
  8. type GuildsTreeThemeConfig struct {
  9. Border bool
  10. Graphics bool
  11. }
  12. type MessagesTextThemeConfig struct {
  13. Border bool
  14. }
  15. type MessageInputThemeConfig struct {
  16. Border bool
  17. }
  18. type ThemeConfig struct {
  19. BorderPadding [4]int
  20. GuildsTree GuildsTreeThemeConfig
  21. MessagesText MessagesTextThemeConfig
  22. MessageInput MessageInputThemeConfig
  23. }
  24. type MessagesTextKeysConfig struct {
  25. SelectPreviousMessage string
  26. SelectNextMessage string
  27. }
  28. type KeysConfig struct {
  29. MessagesText MessagesTextKeysConfig
  30. }
  31. type Config struct {
  32. Mouse bool
  33. MessagesLimit uint
  34. Theme ThemeConfig
  35. Keys KeysConfig
  36. }
  37. func newConfig() (*Config, error) {
  38. path, err := os.UserConfigDir()
  39. if err != nil {
  40. return nil, err
  41. }
  42. path = filepath.Join(path, name)
  43. if err = os.MkdirAll(path, os.ModePerm); err != nil {
  44. return nil, err
  45. }
  46. c := Config{
  47. Mouse: true,
  48. MessagesLimit: 50,
  49. Theme: ThemeConfig{
  50. BorderPadding: [...]int{1, 1, 1, 1},
  51. GuildsTree: GuildsTreeThemeConfig{
  52. Border: true,
  53. Graphics: true,
  54. },
  55. MessagesText: MessagesTextThemeConfig{
  56. Border: true,
  57. },
  58. MessageInput: MessageInputThemeConfig{
  59. Border: true,
  60. },
  61. },
  62. Keys: KeysConfig{
  63. MessagesText: MessagesTextKeysConfig{
  64. SelectPreviousMessage: "Up",
  65. SelectNextMessage: "Down",
  66. },
  67. },
  68. }
  69. path = filepath.Join(path, "config.json")
  70. if _, err = os.Stat(path); os.IsNotExist(err) {
  71. f, err := os.Create(path)
  72. if err != nil {
  73. return nil, err
  74. }
  75. defer f.Close()
  76. e := json.NewEncoder(f)
  77. e.SetIndent("", "\t")
  78. if err = e.Encode(c); err != nil {
  79. return nil, err
  80. }
  81. } else {
  82. f, err := os.Open(path)
  83. if err != nil {
  84. return nil, err
  85. }
  86. defer f.Close()
  87. if err = json.NewDecoder(f).Decode(&c); err != nil {
  88. return nil, err
  89. }
  90. }
  91. return &c, nil
  92. }
  93. func (c *Config) BorderPadding() (int, int, int, int) {
  94. pad := c.Theme.BorderPadding
  95. return pad[0], pad[1], pad[2], pad[3]
  96. }