config.go 1.2 KB

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