|
@@ -7,91 +7,56 @@ import (
|
|
|
"github.com/BurntSushi/toml"
|
|
"github.com/BurntSushi/toml"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
-const userAgent = "Mozilla/5.0 (X11; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0"
|
|
|
|
|
-
|
|
|
|
|
-type GeneralConfig struct {
|
|
|
|
|
- UserAgent string `toml:"user_agent"`
|
|
|
|
|
- FetchMessagesLimit int `toml:"fetch_messages_limit"`
|
|
|
|
|
- Mouse bool `toml:"mouse"`
|
|
|
|
|
- Timestamps bool `toml:"timestamps"`
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-type KeybindingsConfig struct {
|
|
|
|
|
- ToggleGuildsList string `toml:"toggle_guilds_list"`
|
|
|
|
|
- ToggleChannelsTreeView string `toml:"toggle_channels_tree_view"`
|
|
|
|
|
- ToggleMessagesTextView string `toml:"toggle_messages_text_view"`
|
|
|
|
|
- ToggleMessageInputField string `toml:"toggle_message_input_field"`
|
|
|
|
|
- ToggleMessageActionsList string `toml:"toggle_message_actions_list"`
|
|
|
|
|
- ToggleExternalEditor string `toml:"toggle_external_editor"`
|
|
|
|
|
-
|
|
|
|
|
- SelectPreviousMessage string `toml:"select_previous_message"`
|
|
|
|
|
- SelectNextMessage string `toml:"select_next_message"`
|
|
|
|
|
- SelectFirstMessage string `toml:"select_first_message"`
|
|
|
|
|
- SelectLastMessage string `toml:"select_last_message"`
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
type Config struct {
|
|
type Config struct {
|
|
|
Keybindings KeybindingsConfig `toml:"keybindings"`
|
|
Keybindings KeybindingsConfig `toml:"keybindings"`
|
|
|
General GeneralConfig `toml:"general"`
|
|
General GeneralConfig `toml:"general"`
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func NewConfig() *Config {
|
|
|
|
|
- return &Config{
|
|
|
|
|
- General: GeneralConfig{
|
|
|
|
|
- UserAgent: userAgent,
|
|
|
|
|
- FetchMessagesLimit: 50,
|
|
|
|
|
- Mouse: true,
|
|
|
|
|
- Timestamps: false,
|
|
|
|
|
- },
|
|
|
|
|
- Keybindings: KeybindingsConfig{
|
|
|
|
|
- ToggleGuildsList: "Rune[g]",
|
|
|
|
|
- ToggleChannelsTreeView: "Rune[c]",
|
|
|
|
|
- ToggleMessagesTextView: "Rune[m]",
|
|
|
|
|
- ToggleMessageInputField: "Rune[i]",
|
|
|
|
|
- ToggleMessageActionsList: "Rune[a]",
|
|
|
|
|
- ToggleExternalEditor: "Ctrl-E",
|
|
|
|
|
-
|
|
|
|
|
- SelectPreviousMessage: "Up",
|
|
|
|
|
- SelectNextMessage: "Down",
|
|
|
|
|
- SelectFirstMessage: "Home",
|
|
|
|
|
- SelectLastMessage: "End",
|
|
|
|
|
- },
|
|
|
|
|
|
|
+func newConfig() Config {
|
|
|
|
|
+ return Config{
|
|
|
|
|
+ General: newGeneralConfig(),
|
|
|
|
|
+ Keybindings: newKeybindingsConfig(),
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func LoadConfig() *Config {
|
|
|
|
|
- configPath, err := os.UserConfigDir()
|
|
|
|
|
|
|
+func NewConfig() *Config {
|
|
|
|
|
+ path, err := os.UserConfigDir()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ panic(err)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ path += "/discordo/config.toml"
|
|
|
|
|
+
|
|
|
|
|
+ err = os.MkdirAll(filepath.Dir(path), os.ModePerm)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
panic(err)
|
|
panic(err)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- configPath += "/discordo/config.toml"
|
|
|
|
|
- // Create a directory as well as create all of the nested directories, recursively.
|
|
|
|
|
- err = os.MkdirAll(filepath.Dir(configPath), os.ModePerm)
|
|
|
|
|
|
|
+ f, err := os.Open(path)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
panic(err)
|
|
panic(err)
|
|
|
}
|
|
}
|
|
|
|
|
+ defer f.Close()
|
|
|
|
|
|
|
|
- c := &Config{}
|
|
|
|
|
- // If the configuration file does not exist, create and write the default configuration to the file.
|
|
|
|
|
- if _, err = os.Stat(configPath); os.IsNotExist(err) {
|
|
|
|
|
- f, err := os.Create(configPath)
|
|
|
|
|
|
|
+ var c Config
|
|
|
|
|
+ if _, err = f.Stat(); os.IsNotExist(err) {
|
|
|
|
|
+ f, err = os.Create(path)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
panic(err)
|
|
panic(err)
|
|
|
}
|
|
}
|
|
|
defer f.Close()
|
|
defer f.Close()
|
|
|
|
|
|
|
|
- c = NewConfig()
|
|
|
|
|
|
|
+ c = newConfig()
|
|
|
err = toml.NewEncoder(f).Encode(c)
|
|
err = toml.NewEncoder(f).Encode(c)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
panic(err)
|
|
panic(err)
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- _, err = toml.DecodeFile(configPath, c)
|
|
|
|
|
|
|
+ _, err = toml.NewDecoder(f).Decode(&c)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
panic(err)
|
|
panic(err)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return c
|
|
|
|
|
|
|
+ return &c
|
|
|
}
|
|
}
|