discordo/util/config.go
2022-02-09 21:52:06 +04:00

97 lines
2.5 KiB
Go

package util
import (
"os"
"path/filepath"
"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 {
Keybindings KeybindingsConfig `toml:"keybindings"`
General GeneralConfig `toml:"general"`
}
func LoadConfig() *Config {
configPath, err := os.UserConfigDir()
if err != nil {
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)
if err != nil {
panic(err)
}
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)
if err != nil {
panic(err)
}
defer f.Close()
c = newDefaultConfig()
err = toml.NewEncoder(f).Encode(c)
if err != nil {
panic(err)
}
} else {
_, err = toml.DecodeFile(configPath, c)
if err != nil {
panic(err)
}
}
return c
}
func newDefaultConfig() *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",
},
}
}