config.go 1.1 KB

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