ソースを参照

refactor: merge CLI struct into Config

ayntgl 4 年 前
コミット
252548606b
5 ファイル変更38 行追加41 行削除
  1. 3 3
      config/keys.go
  2. 16 11
      config/pkg.go
  3. 7 17
      main.go
  4. 6 4
      ui/app.go
  5. 6 6
      ui/messages.go

+ 3 - 3
config/keybindings.go → config/keys.go

@@ -1,6 +1,6 @@
 package config
 
-type KeybindingsConfig struct {
+type KeysConfig struct {
 	ToggleGuildsList        string `toml:"toggle_guilds_list"`
 	ToggleChannelsTreeView  string `toml:"toggle_channels_tree_view"`
 	ToggleMessagesTextView  string `toml:"toggle_messages_text_view"`
@@ -15,8 +15,8 @@ type KeybindingsConfig struct {
 	SelectLastMessage     string `toml:"select_last_message"`
 }
 
-func newKeybindingsConfig() KeybindingsConfig {
-	return KeybindingsConfig{
+func newKeysConfig() KeysConfig {
+	return KeysConfig{
 		ToggleGuildsList:        "Rune[g]",
 		ToggleChannelsTreeView:  "Rune[c]",
 		ToggleMessagesTextView:  "Rune[m]",

+ 16 - 11
config/pkg.go

@@ -8,27 +8,32 @@ import (
 )
 
 type Config struct {
-	General     GeneralConfig     `toml:"general"`
-	Theme       ThemeConfig       `toml:"theme"`
-	Keybindings KeybindingsConfig `toml:"keybindings"`
+	Token  string `toml:"-" name:"token" help:"The authentication token." short:"T"`
+	Config string `toml:"-" name:"config" help:"The path of the configuration file." type:"path" short:"C"`
+
+	General GeneralConfig `toml:"general" kong:"-"`
+	Theme   ThemeConfig   `toml:"theme" kong:"-"`
+	Keys    KeysConfig    `toml:"keys" kong:"-"`
 }
 
 func New() *Config {
 	return &Config{
-		General:     newGeneralConfig(),
-		Theme:       newThemeConfig(),
-		Keybindings: newKeybindingsConfig(),
+		Config: DefaultPath(),
+
+		General: newGeneralConfig(),
+		Theme:   newThemeConfig(),
+		Keys:    newKeysConfig(),
 	}
 }
 
-func (c *Config) Load(path string) {
-	err := os.MkdirAll(filepath.Dir(path), os.ModePerm)
+func (c *Config) Load() {
+	err := os.MkdirAll(filepath.Dir(c.Config), os.ModePerm)
 	if err != nil {
 		panic(err)
 	}
 
-	if _, err = os.Stat(path); os.IsNotExist(err) {
-		f, err := os.Create(path)
+	if _, err = os.Stat(c.Config); os.IsNotExist(err) {
+		f, err := os.Create(c.Config)
 		if err != nil {
 			panic(err)
 		}
@@ -38,7 +43,7 @@ func (c *Config) Load(path string) {
 			panic(err)
 		}
 	} else {
-		_, err = toml.DecodeFile(path, &c)
+		_, err = toml.DecodeFile(c.Config, &c)
 		if err != nil {
 			panic(err)
 		}

+ 7 - 17
main.go

@@ -13,26 +13,16 @@ import (
 const name = "discordo"
 
 func main() {
-	var cli struct {
-		Token  string `name:"token" help:"The authentication token." short:"T"`
-		Config string `name:"config" help:"The path of the configuration file." short:"C"`
-	}
-	kong.Parse(&cli, kong.Name(name), kong.UsageOnError())
-
-	if cli.Token == "" {
-		cli.Token, _ = keyring.Get(name, "token")
-	}
+	cfg := config.New()
+	kong.Parse(cfg, kong.Name(name), kong.UsageOnError())
 
-	if cli.Config == "" {
-		cli.Config = config.DefaultPath()
+	if cfg.Token == "" {
+		cfg.Token, _ = keyring.Get(name, "token")
 	}
 
-	c := config.New()
-	c.Load(cli.Config)
-
-	app := ui.NewApp(c)
-	if cli.Token != "" {
-		err := app.Connect(cli.Token)
+	app := ui.NewApp(cfg)
+	if cfg.Token != "" {
+		err := app.Connect(cfg.Token)
 		if err != nil {
 			panic(err)
 		}

+ 6 - 4
ui/app.go

@@ -30,6 +30,8 @@ func NewApp(c *config.Config) *App {
 		SelectedMessage: -1,
 	}
 
+	c.Load()
+
 	app.GuildsList = NewGuildsList(app)
 	app.ChannelsTreeView = NewChannelsTreeView(app)
 	app.MessagesTextView = NewMessagesTextView(app)
@@ -76,16 +78,16 @@ func (app *App) onInputCapture(e *tcell.EventKey) *tcell.EventKey {
 
 	if app.MainFlex.GetItemCount() != 0 {
 		switch e.Name() {
-		case app.Config.Keybindings.ToggleGuildsList:
+		case app.Config.Keys.ToggleGuildsList:
 			app.SetFocus(app.GuildsList)
 			return nil
-		case app.Config.Keybindings.ToggleChannelsTreeView:
+		case app.Config.Keys.ToggleChannelsTreeView:
 			app.SetFocus(app.ChannelsTreeView)
 			return nil
-		case app.Config.Keybindings.ToggleMessagesTextView:
+		case app.Config.Keys.ToggleMessagesTextView:
 			app.SetFocus(app.MessagesTextView)
 			return nil
-		case app.Config.Keybindings.ToggleMessageInputField:
+		case app.Config.Keys.ToggleMessageInputField:
 			app.SetFocus(app.MessageInputField)
 			return nil
 		}

+ 6 - 6
ui/messages.go

@@ -54,7 +54,7 @@ func (mtv *MessagesTextView) onInputCapture(e *tcell.EventKey) *tcell.EventKey {
 	}
 
 	switch e.Name() {
-	case mtv.app.Config.Keybindings.SelectPreviousMessage:
+	case mtv.app.Config.Keys.SelectPreviousMessage:
 		if len(mtv.app.MessagesTextView.GetHighlights()) == 0 {
 			mtv.app.SelectedMessage = len(ms) - 1
 		} else {
@@ -69,7 +69,7 @@ func (mtv *MessagesTextView) onInputCapture(e *tcell.EventKey) *tcell.EventKey {
 			ScrollToHighlight()
 
 		return nil
-	case mtv.app.Config.Keybindings.SelectNextMessage:
+	case mtv.app.Config.Keys.SelectNextMessage:
 		if len(mtv.app.MessagesTextView.GetHighlights()) == 0 {
 			mtv.app.SelectedMessage = len(ms) - 1
 		} else {
@@ -84,21 +84,21 @@ func (mtv *MessagesTextView) onInputCapture(e *tcell.EventKey) *tcell.EventKey {
 			ScrollToHighlight()
 
 		return nil
-	case mtv.app.Config.Keybindings.SelectFirstMessage:
+	case mtv.app.Config.Keys.SelectFirstMessage:
 		mtv.app.SelectedMessage = 0
 		mtv.app.MessagesTextView.
 			Highlight(ms[mtv.app.SelectedMessage].ID).
 			ScrollToHighlight()
 
 		return nil
-	case mtv.app.Config.Keybindings.SelectLastMessage:
+	case mtv.app.Config.Keys.SelectLastMessage:
 		mtv.app.SelectedMessage = len(ms) - 1
 		mtv.app.MessagesTextView.
 			Highlight(ms[mtv.app.SelectedMessage].ID).
 			ScrollToHighlight()
 
 		return nil
-	case mtv.app.Config.Keybindings.OpenMessageActionsList:
+	case mtv.app.Config.Keys.OpenMessageActionsList:
 		messageActionsList := tview.NewList()
 
 		hs := mtv.app.MessagesTextView.GetHighlights()
@@ -327,7 +327,7 @@ func (mi *MessageInputField) onInputCapture(e *tcell.EventKey) *tcell.EventKey {
 		mi.app.MessagesTextView.Highlight()
 
 		return nil
-	case mi.app.Config.Keybindings.OpenExternalEditor:
+	case mi.app.Config.Keys.OpenExternalEditor:
 		e := os.Getenv("EDITOR")
 		if e == "" {
 			return nil