mod.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package config
  2. import (
  3. "os"
  4. "github.com/BurntSushi/toml"
  5. )
  6. type GeneralConfig struct {
  7. UserAgent string `json:"userAgent"`
  8. FetchMessagesLimit int `json:"fetchMessagesLimit"`
  9. Mouse bool `json:"mouse"`
  10. Notifications bool `json:"notifications"`
  11. Timestamps bool `json:"timestamps"`
  12. }
  13. type KeybindingsConfig struct {
  14. ToggleGuildsList string `toml:"toggle_guilds_list"`
  15. ToggleChannelsTreeView string `toml:"toggle_channels_tree_view"`
  16. ToggleMessagesTextView string `toml:"toggle_messages_text_view"`
  17. ToggleMessageInputField string `toml:"toggle_message_input_field"`
  18. ToggleMessageActionsList string `toml:"toggle_message_actions_list"`
  19. ToggleExternalEditor string `toml:"toggle_external_editor"`
  20. SelectPreviousMessage string `toml:"select_previous_message"`
  21. SelectNextMessage string `toml:"select_next_message"`
  22. SelectFirstMessage string `toml:"select_first_message"`
  23. SelectLastMessage string `toml:"select_last_message"`
  24. }
  25. type Config struct {
  26. Keybindings KeybindingsConfig `json:"keybindings"`
  27. General GeneralConfig `json:"general"`
  28. }
  29. func Load() Config {
  30. configPath, err := os.UserConfigDir()
  31. if err != nil {
  32. panic(err)
  33. }
  34. configPath += "/discordo.toml"
  35. c := Config{}
  36. // If the configuration file does not exist, create and write the default configuration to the file.
  37. if _, err = os.Stat(configPath); os.IsNotExist(err) {
  38. f, err := os.Create(configPath)
  39. if err != nil {
  40. panic(err)
  41. }
  42. defer f.Close()
  43. c = newDefaultConfig()
  44. err = toml.NewEncoder(f).Encode(c)
  45. if err != nil {
  46. panic(err)
  47. }
  48. } else {
  49. _, err = toml.DecodeFile(configPath, &c)
  50. if err != nil {
  51. panic(err)
  52. }
  53. }
  54. return c
  55. }
  56. func newDefaultConfig() Config {
  57. return Config{
  58. General: GeneralConfig{
  59. UserAgent: "Mozilla/5.0 (X11; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0",
  60. FetchMessagesLimit: 50,
  61. Mouse: true,
  62. Notifications: true,
  63. Timestamps: false,
  64. },
  65. Keybindings: KeybindingsConfig{
  66. ToggleGuildsList: "g",
  67. ToggleChannelsTreeView: "c",
  68. ToggleMessagesTextView: "m",
  69. ToggleMessageInputField: "i",
  70. ToggleMessageActionsList: "a",
  71. ToggleExternalEditor: "Ctrl-E",
  72. SelectPreviousMessage: "Up",
  73. SelectNextMessage: "Down",
  74. SelectFirstMessage: "Home",
  75. SelectLastMessage: "End",
  76. },
  77. }
  78. }