161 lines
3.2 KiB
Go
161 lines
3.2 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
const name = "discordo"
|
|
|
|
type (
|
|
MessagesTextKeysConfig struct {
|
|
CopyContent string `yaml:"copy_content"`
|
|
|
|
Reply string `yaml:"reply"`
|
|
ReplyMention string `yaml:"reply_mention"`
|
|
SelectReply string `yaml:"select_reply"`
|
|
|
|
SelectPrevious string `yaml:"select_previous"`
|
|
SelectNext string `yaml:"select_next"`
|
|
SelectFirst string `yaml:"select_first"`
|
|
SelectLast string `yaml:"select_last"`
|
|
}
|
|
|
|
MessageInputKeysConfig struct {
|
|
Send string `yaml:"send"`
|
|
Paste string `yaml:"paste"`
|
|
|
|
LaunchEditor string `yaml:"launch_editor"`
|
|
}
|
|
|
|
KeysConfig struct {
|
|
Cancel string `yaml:"cancel"`
|
|
|
|
MessagesText MessagesTextKeysConfig `yaml:"messages_text"`
|
|
MessageInput MessageInputKeysConfig `yaml:"message_input"`
|
|
}
|
|
)
|
|
|
|
type (
|
|
GuildsTreeThemeConfig struct {
|
|
Graphics bool `yaml:"graphics"`
|
|
}
|
|
|
|
MessagesTextThemeConfig struct {
|
|
AuthorColor string `yaml:"author_color"`
|
|
}
|
|
|
|
MessageInputThemeConfig struct{}
|
|
|
|
ThemeConfig struct {
|
|
Border bool `yaml:"border"`
|
|
BorderColor string `yaml:"border_color"`
|
|
BorderPadding [4]int `yaml:"border_padding,flow"`
|
|
|
|
TitleColor string `yaml:"title_color"`
|
|
BackgroundColor string `yaml:"background_color"`
|
|
|
|
GuildsTree GuildsTreeThemeConfig `yaml:"guilds_tree"`
|
|
MessagesText MessagesTextThemeConfig `yaml:"messages_text"`
|
|
MessageInput MessageInputThemeConfig `yaml:"message_input"`
|
|
}
|
|
)
|
|
|
|
type Config struct {
|
|
Mouse bool `yaml:"mouse"`
|
|
MessagesLimit uint `yaml:"messages_limit"`
|
|
Timestamps bool `yaml:"timestamps"`
|
|
Editor string `yaml:"editor"`
|
|
|
|
Keys KeysConfig `yaml:"keys"`
|
|
Theme ThemeConfig `yaml:"theme"`
|
|
}
|
|
|
|
func newConfig() (*Config, error) {
|
|
path, err := os.UserConfigDir()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
path = filepath.Join(path, name)
|
|
err = os.MkdirAll(path, os.ModePerm)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
c := Config{
|
|
Mouse: true,
|
|
Timestamps: false,
|
|
MessagesLimit: 50,
|
|
Editor: "default",
|
|
|
|
Keys: KeysConfig{
|
|
Cancel: "Esc",
|
|
|
|
MessagesText: MessagesTextKeysConfig{
|
|
CopyContent: "Rune[c]",
|
|
|
|
Reply: "Rune[r]",
|
|
ReplyMention: "Rune[R]",
|
|
SelectReply: "Rune[s]",
|
|
|
|
SelectPrevious: "Up",
|
|
SelectNext: "Down",
|
|
SelectFirst: "Home",
|
|
SelectLast: "End",
|
|
},
|
|
MessageInput: MessageInputKeysConfig{
|
|
Send: "Enter",
|
|
|
|
Paste: "Ctrl+V",
|
|
LaunchEditor: "Ctrl+E",
|
|
},
|
|
},
|
|
|
|
Theme: ThemeConfig{
|
|
Border: true,
|
|
BorderColor: "default",
|
|
BorderPadding: [...]int{0, 0, 1, 1},
|
|
|
|
TitleColor: "default",
|
|
BackgroundColor: "default",
|
|
|
|
GuildsTree: GuildsTreeThemeConfig{
|
|
Graphics: true,
|
|
},
|
|
MessagesText: MessagesTextThemeConfig{
|
|
AuthorColor: "aqua",
|
|
},
|
|
MessageInput: MessageInputThemeConfig{},
|
|
},
|
|
}
|
|
path = filepath.Join(path, "config.yml")
|
|
_, err = os.Stat(path)
|
|
if os.IsNotExist(err) {
|
|
f, err := os.Create(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer f.Close()
|
|
|
|
err = yaml.NewEncoder(f).Encode(c)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
} else {
|
|
f, err := os.Open(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer f.Close()
|
|
|
|
err = yaml.NewDecoder(f).Decode(&c)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return &c, nil
|
|
}
|