config.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package config
  2. import (
  3. "os"
  4. "path/filepath"
  5. "gopkg.in/yaml.v3"
  6. )
  7. const Name = "discordo"
  8. type Config struct {
  9. Mouse bool `yaml:"mouse"`
  10. MessagesLimit uint `yaml:"messages_limit"`
  11. Timestamps bool `yaml:"timestamps"`
  12. Editor string `yaml:"editor"`
  13. Keys Keys `yaml:"keys"`
  14. Theme Theme `yaml:"theme"`
  15. }
  16. func new() Config {
  17. return Config{
  18. Mouse: true,
  19. Timestamps: false,
  20. MessagesLimit: 50,
  21. Editor: "default",
  22. Keys: newKeys(),
  23. Theme: newTheme(),
  24. }
  25. }
  26. func Load() (*Config, error) {
  27. path, err := os.UserConfigDir()
  28. if err != nil {
  29. return nil, err
  30. }
  31. path = filepath.Join(path, Name)
  32. err = os.MkdirAll(path, os.ModePerm)
  33. if err != nil {
  34. return nil, err
  35. }
  36. c := new()
  37. path = filepath.Join(path, "config.yml")
  38. _, err = os.Stat(path)
  39. if os.IsNotExist(err) {
  40. f, err := os.Create(path)
  41. if err != nil {
  42. return nil, err
  43. }
  44. defer f.Close()
  45. err = yaml.NewEncoder(f).Encode(c)
  46. if err != nil {
  47. return nil, err
  48. }
  49. } else {
  50. f, err := os.Open(path)
  51. if err != nil {
  52. return nil, err
  53. }
  54. defer f.Close()
  55. err = yaml.NewDecoder(f).Decode(&c)
  56. if err != nil {
  57. return nil, err
  58. }
  59. }
  60. return &c, nil
  61. }