config.go 2.3 KB

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