From a92ea6df48453564c4bc209ee4afac3d31e253dd Mon Sep 17 00:00:00 2001 From: Samuel Recker Date: Mon, 16 Jan 2023 00:56:52 +0100 Subject: [PATCH 1/8] add vscode debug stuff, adjust gitignore --- .gitignore | 13 +++++++++++++ .vscode/launch.json | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 .vscode/launch.json diff --git a/.gitignore b/.gitignore index dd0e828..59e018d 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,19 @@ /vendor/ /Godeps/ +### VS Code +# Reference: https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets +# Local History for Visual Studio Code +.history/ +# Built Visual Studio Code Extensions +*.vsix + ### JetBrains+all ### # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..bbe40be --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + // needs to attach to running dlv process execute + // dlv debug --headless --listen=:2345 . + // in the root of the package first + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to Process", + "type": "go", + "debugAdapter": "dlv-dap", + "request": "attach", + "mode": "remote", + "remotePath": "${workspaceFolder}", + "host": "127.0.0.1", + "port": 2345 + } + ] +} From e8361766b36060f5fcae35d9eecebdb4260ccf4c Mon Sep 17 00:00:00 2001 From: Samuel Recker Date: Mon, 16 Jan 2023 00:57:11 +0100 Subject: [PATCH 2/8] fix back hint in help views --- tea/scenes/installation.go | 15 +--------- tea/scenes/installations.go | 7 +---- tea/scenes/installed_mods.go | 5 +--- tea/scenes/main_menu.go | 1 - tea/scenes/mod.go | 16 +---------- tea/scenes/mod_version.go | 16 +---------- tea/scenes/mods.go | 9 +----- tea/scenes/new_installation.go | 26 ++++++++---------- tea/scenes/new_profile.go | 47 ++++++++++++++++++++++++++++---- tea/scenes/profile.go | 15 +--------- tea/scenes/profiles.go | 7 +---- tea/scenes/select_mod_version.go | 14 ---------- 12 files changed, 61 insertions(+), 117 deletions(-) diff --git a/tea/scenes/installation.go b/tea/scenes/installation.go index aab0db7..d4331fd 100644 --- a/tea/scenes/installation.go +++ b/tea/scenes/installation.go @@ -4,7 +4,6 @@ import ( "fmt" "time" - "github.com/charmbracelet/bubbles/key" "github.com/charmbracelet/bubbles/list" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" @@ -66,19 +65,7 @@ func NewInstallation(root components.RootModel, parent tea.Model, installationDa model.list.Styles = utils.ListStyles model.list.SetSize(model.list.Width(), model.list.Height()) model.list.StatusMessageLifetime = time.Second * 3 - model.list.DisableQuitKeybindings() - - model.list.AdditionalShortHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } - - model.list.AdditionalFullHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } + model.list.KeyMap.Quit.SetHelp("q", "back") return model } diff --git a/tea/scenes/installations.go b/tea/scenes/installations.go index 2077b48..1a00802 100644 --- a/tea/scenes/installations.go +++ b/tea/scenes/installations.go @@ -28,12 +28,10 @@ func NewInstallations(root components.RootModel, parent tea.Model) tea.Model { l.Styles = utils.ListStyles l.SetSize(l.Width(), l.Height()) l.KeyMap.Quit.SetHelp("q", "back") - l.DisableQuitKeybindings() l.AdditionalShortHelpKeys = func() []key.Binding { return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - key.NewBinding(key.WithHelp("n", "new installation")), + key.NewBinding(key.WithKeys("n"), key.WithHelp("n", "new installation")), } } @@ -51,9 +49,6 @@ func (m installations) Init() tea.Cmd { } func (m installations) Update(msg tea.Msg) (tea.Model, tea.Cmd) { - // List enables its own keybindings when they were previously disabled - m.list.DisableQuitKeybindings() - switch msg := msg.(type) { case tea.KeyMsg: if m.list.SettingFilter() { diff --git a/tea/scenes/installed_mods.go b/tea/scenes/installed_mods.go index dfe8b48..8331fcd 100644 --- a/tea/scenes/installed_mods.go +++ b/tea/scenes/installed_mods.go @@ -42,8 +42,6 @@ func NewInstalledMods(root components.RootModel, parent tea.Model) tea.Model { l.Title = "Installed Mods" l.Styles = utils.ListStyles l.SetSize(l.Width(), l.Height()) - l.KeyMap.Quit.SetHelp("q", "back") - l.DisableQuitKeybindings() l.AdditionalShortHelpKeys = func() []key.Binding { return []key.Binding{ @@ -160,8 +158,7 @@ func (m installedModsList) LoadModData() { } func (m installedModsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) { - // List enables its own keybindings when they were previously disabled - m.list.DisableQuitKeybindings() + m.list.KeyMap.Quit.SetHelp("q", "back") switch msg := msg.(type) { case tea.KeyMsg: diff --git a/tea/scenes/main_menu.go b/tea/scenes/main_menu.go index 640a6c0..107982f 100644 --- a/tea/scenes/main_menu.go +++ b/tea/scenes/main_menu.go @@ -127,7 +127,6 @@ func NewMainMenu(root components.RootModel) tea.Model { model.list.SetFilteringEnabled(false) model.list.Title = "Main Menu" model.list.Styles = utils.ListStyles - model.list.DisableQuitKeybindings() return model } diff --git a/tea/scenes/mod.go b/tea/scenes/mod.go index b44a017..aa0c18d 100644 --- a/tea/scenes/mod.go +++ b/tea/scenes/mod.go @@ -3,7 +3,6 @@ package scenes import ( "time" - "github.com/charmbracelet/bubbles/key" "github.com/charmbracelet/bubbles/list" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" @@ -101,21 +100,8 @@ func NewModMenu(root components.RootModel, parent tea.Model, mod utils.Mod) tea. model.list.Title = mod.Name model.list.Styles = utils.ListStyles model.list.SetSize(model.list.Width(), model.list.Height()) - model.list.KeyMap.Quit.SetHelp("q", "back") model.list.StatusMessageLifetime = time.Second * 3 - model.list.DisableQuitKeybindings() - - model.list.AdditionalShortHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } - - model.list.AdditionalFullHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } + model.list.KeyMap.Quit.SetHelp("q", "back") return model } diff --git a/tea/scenes/mod_version.go b/tea/scenes/mod_version.go index df072c5..8025a48 100644 --- a/tea/scenes/mod_version.go +++ b/tea/scenes/mod_version.go @@ -3,7 +3,6 @@ package scenes import ( "time" - "github.com/charmbracelet/bubbles/key" "github.com/charmbracelet/bubbles/list" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" @@ -67,21 +66,8 @@ func NewModVersion(root components.RootModel, parent tea.Model, mod utils.Mod) t model.list.Title = mod.Name model.list.Styles = utils.ListStyles model.list.SetSize(model.list.Width(), model.list.Height()) - model.list.KeyMap.Quit.SetHelp("q", "back") model.list.StatusMessageLifetime = time.Second * 3 - model.list.DisableQuitKeybindings() - - model.list.AdditionalShortHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } - - model.list.AdditionalFullHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } + model.list.KeyMap.Quit.SetHelp("q", "back") return model } diff --git a/tea/scenes/mods.go b/tea/scenes/mods.go index 4ded8d0..86e4f84 100644 --- a/tea/scenes/mods.go +++ b/tea/scenes/mods.go @@ -63,8 +63,6 @@ func NewMods(root components.RootModel, parent tea.Model) tea.Model { l.Title = modsTitle l.Styles = utils.ListStyles l.SetSize(l.Width(), l.Height()) - l.KeyMap.Quit.SetHelp("q", "back") - l.DisableQuitKeybindings() l.AdditionalShortHelpKeys = func() []key.Binding { return []key.Binding{ @@ -167,8 +165,6 @@ func NewMods(root components.RootModel, parent tea.Model) tea.Model { sortFieldList.Title = modsTitle sortFieldList.Styles = utils.ListStyles sortFieldList.SetSize(l.Width(), l.Height()) - sortFieldList.KeyMap.Quit.SetHelp("q", "back") - sortFieldList.DisableQuitKeybindings() sortOrderList := list.New([]list.Item{ utils.SimpleItemExtra[modsList, ficsit.ModsModsGetModsModsMod]{ @@ -200,8 +196,6 @@ func NewMods(root components.RootModel, parent tea.Model) tea.Model { sortOrderList.Title = modsTitle sortOrderList.Styles = utils.ListStyles sortOrderList.SetSize(l.Width(), l.Height()) - sortOrderList.KeyMap.Quit.SetHelp("q", "back") - sortOrderList.DisableQuitKeybindings() m := &modsList{ root: root, @@ -281,8 +275,7 @@ func (m modsList) Init() tea.Cmd { } func (m modsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) { - // List enables its own keybindings when they were previously disabled - m.list.DisableQuitKeybindings() + m.list.KeyMap.Quit.SetHelp("q", "back") switch msg := msg.(type) { case tea.KeyMsg: diff --git a/tea/scenes/new_installation.go b/tea/scenes/new_installation.go index cb2ffe8..679e4df 100644 --- a/tea/scenes/new_installation.go +++ b/tea/scenes/new_installation.go @@ -43,8 +43,6 @@ func NewNewInstallation(root components.RootModel, parent tea.Model) tea.Model { l.Styles = utils.ListStyles l.SetSize(l.Width(), l.Height()) l.KeyMap.Quit.SetHelp("esc", "back") - l.DisableQuitKeybindings() - l.SetShowHelp(false) l.SetShowStatusBar(false) model := newInstallation{ @@ -149,7 +147,8 @@ func (m newInstallation) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } func (m newInstallation) View() string { - inputView := lipgloss.NewStyle().Padding(1, 2).Render(m.input.View()) + style := lipgloss.NewStyle().Padding(1, 2) + inputView := style.Render(m.input.View()) mandatory := lipgloss.JoinVertical(lipgloss.Left, m.root.View(), m.title, inputView) @@ -157,19 +156,18 @@ func (m newInstallation) View() string { return lipgloss.JoinVertical(lipgloss.Left, mandatory, m.error.View()) } - if len(m.dirList.Items()) > 0 { - m.dirList.SetSize(m.dirList.Width(), m.root.Size().Height-lipgloss.Height(mandatory)-1) - return lipgloss.JoinVertical(lipgloss.Left, mandatory, m.dirList.View()) + if len(m.dirList.Items()) == 0 { + infoBox := lipgloss.NewStyle(). + BorderStyle(lipgloss.ThickBorder()). + BorderForeground(lipgloss.Color("39")). + Padding(0, 1). + Margin(0, 0, 0, 2). + Render("Enter the path to the satisfactory installation") + mandatory = lipgloss.JoinVertical(lipgloss.Left, mandatory, infoBox) } - infoBox := lipgloss.NewStyle(). - BorderStyle(lipgloss.ThickBorder()). - BorderForeground(lipgloss.Color("39")). - Padding(0, 1). - Margin(0, 0, 0, 2). - Render("Enter the path to the satisfactory installation") - - return lipgloss.JoinVertical(lipgloss.Left, mandatory, infoBox) + m.dirList.SetSize(m.dirList.Width(), m.root.Size().Height-lipgloss.Height(mandatory)-1) + return lipgloss.JoinVertical(lipgloss.Left, mandatory, style.Render(m.dirList.View())) } // I know this is awful, but beats re-implementing the entire list model diff --git a/tea/scenes/new_profile.go b/tea/scenes/new_profile.go index 458e1d2..945b94e 100644 --- a/tea/scenes/new_profile.go +++ b/tea/scenes/new_profile.go @@ -3,6 +3,8 @@ package scenes import ( "time" + "github.com/charmbracelet/bubbles/help" + "github.com/charmbracelet/bubbles/key" "github.com/charmbracelet/bubbles/textinput" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" @@ -13,12 +15,30 @@ import ( var _ tea.Model = (*newProfile)(nil) +type keyMap struct { + Back key.Binding + Quit key.Binding + Enter key.Binding +} + +func (k keyMap) ShortHelp() []key.Binding { + return []key.Binding{k.Enter, k.Back} +} + +func (k keyMap) FullHelp() [][]key.Binding { + return [][]key.Binding{ + {k.Enter, k.Back}, // second column + } +} + type newProfile struct { input textinput.Model root components.RootModel parent tea.Model error *components.ErrorComponent title string + help help.Model + keys keyMap } func NewNewProfile(root components.RootModel, parent tea.Model) tea.Model { @@ -27,6 +47,20 @@ func NewNewProfile(root components.RootModel, parent tea.Model) tea.Model { parent: parent, input: textinput.New(), title: utils.NonListTitleStyle.Render("New Profile"), + help: help.New(), + keys: keyMap{ + Back: key.NewBinding( + key.WithKeys(KeyEscape, KeyControlC), + key.WithHelp(KeyEscape, "back"), + ), + Enter: key.NewBinding( + key.WithKeys(KeyEnter), + key.WithHelp(KeyEnter, "create"), + ), + Quit: key.NewBinding( + key.WithKeys(KeyControlC), + ), + }, } model.input.Focus() @@ -42,12 +76,12 @@ func (m newProfile) Init() tea.Cmd { func (m newProfile) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: - switch keypress := msg.String(); keypress { - case KeyControlC: + switch { + case key.Matches(msg, m.keys.Quit): return m, tea.Quit - case KeyEscape: + case key.Matches(msg, m.keys.Back): return m.parent, nil - case KeyEnter: + case key.Matches(msg, m.keys.Enter): if _, err := m.root.GetGlobal().Profiles.AddProfile(m.input.Value()); err != nil { errorComponent, cmd := components.NewErrorComponent(err.Error(), time.Second*5) m.error = errorComponent @@ -74,7 +108,8 @@ func (m newProfile) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } func (m newProfile) View() string { - inputView := lipgloss.NewStyle().Padding(1, 2).Render(m.input.View()) + style := lipgloss.NewStyle().Padding(1, 2) + inputView := style.Render(m.input.View()) if m.error != nil { return lipgloss.JoinVertical(lipgloss.Left, m.root.View(), m.title, m.error.View(), inputView) @@ -87,5 +122,5 @@ func (m newProfile) View() string { Margin(0, 0, 0, 2). Render("Enter the name of the profile") - return lipgloss.JoinVertical(lipgloss.Left, m.root.View(), m.title, inputView, infoBox) + return lipgloss.JoinVertical(lipgloss.Left, m.root.View(), m.title, inputView, infoBox, style.Render(m.help.View(m.keys))) } diff --git a/tea/scenes/profile.go b/tea/scenes/profile.go index 2e64a1a..f45535c 100644 --- a/tea/scenes/profile.go +++ b/tea/scenes/profile.go @@ -4,7 +4,6 @@ import ( "fmt" "time" - "github.com/charmbracelet/bubbles/key" "github.com/charmbracelet/bubbles/list" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" @@ -78,19 +77,7 @@ func NewProfile(root components.RootModel, parent tea.Model, profileData *cli.Pr model.list.Styles = utils.ListStyles model.list.SetSize(model.list.Width(), model.list.Height()) model.list.StatusMessageLifetime = time.Second * 3 - model.list.DisableQuitKeybindings() - - model.list.AdditionalShortHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } - - model.list.AdditionalFullHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } + model.list.KeyMap.Quit.SetHelp("q", "back") return model } diff --git a/tea/scenes/profiles.go b/tea/scenes/profiles.go index 9478871..1bd63b0 100644 --- a/tea/scenes/profiles.go +++ b/tea/scenes/profiles.go @@ -28,12 +28,10 @@ func NewProfiles(root components.RootModel, parent tea.Model) tea.Model { l.Styles = utils.ListStyles l.SetSize(l.Width(), l.Height()) l.KeyMap.Quit.SetHelp("q", "back") - l.DisableQuitKeybindings() l.AdditionalShortHelpKeys = func() []key.Binding { return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - key.NewBinding(key.WithHelp("n", "new profile")), + key.NewBinding(key.WithKeys("n"), key.WithHelp("n", "new profile")), } } @@ -51,9 +49,6 @@ func (m profiles) Init() tea.Cmd { } func (m profiles) Update(msg tea.Msg) (tea.Model, tea.Cmd) { - // List enables its own keybindings when they were previously disabled - m.list.DisableQuitKeybindings() - switch msg := msg.(type) { case tea.KeyMsg: if m.list.SettingFilter() { diff --git a/tea/scenes/select_mod_version.go b/tea/scenes/select_mod_version.go index 71ced35..23897c7 100644 --- a/tea/scenes/select_mod_version.go +++ b/tea/scenes/select_mod_version.go @@ -5,7 +5,6 @@ import ( "fmt" "time" - "github.com/charmbracelet/bubbles/key" "github.com/charmbracelet/bubbles/list" "github.com/charmbracelet/bubbles/spinner" tea "github.com/charmbracelet/bubbletea" @@ -36,19 +35,6 @@ func NewModVersionList(root components.RootModel, parent tea.Model, mod utils.Mo l.Styles = utils.ListStyles l.SetSize(l.Width(), l.Height()) l.KeyMap.Quit.SetHelp("q", "back") - l.DisableQuitKeybindings() - - l.AdditionalShortHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } - - l.AdditionalFullHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } m := &selectModVersionList{ root: root, From 29e82341fdb3a05c6cee148b56e76af8ff978454 Mon Sep 17 00:00:00 2001 From: Samuel Recker Date: Mon, 16 Jan 2023 00:58:29 +0100 Subject: [PATCH 3/8] remove wrong comment --- tea/scenes/new_profile.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tea/scenes/new_profile.go b/tea/scenes/new_profile.go index 945b94e..021bf09 100644 --- a/tea/scenes/new_profile.go +++ b/tea/scenes/new_profile.go @@ -27,7 +27,7 @@ func (k keyMap) ShortHelp() []key.Binding { func (k keyMap) FullHelp() [][]key.Binding { return [][]key.Binding{ - {k.Enter, k.Back}, // second column + {k.Enter, k.Back}, } } From ca84300ef3635f1d849fca70be1ca33c3bbfd713 Mon Sep 17 00:00:00 2001 From: Samuel Recker Date: Mon, 16 Jan 2023 22:42:36 +0100 Subject: [PATCH 4/8] fix help in new_installation, follow symlinks --- tea/scenes/new_installation.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/tea/scenes/new_installation.go b/tea/scenes/new_installation.go index 679e4df..26398db 100644 --- a/tea/scenes/new_installation.go +++ b/tea/scenes/new_installation.go @@ -3,6 +3,7 @@ package scenes import ( "fmt" "io" + "io/fs" "os" "path/filepath" "sort" @@ -42,8 +43,16 @@ func NewNewInstallation(root components.RootModel, parent tea.Model) tea.Model { l.SetShowTitle(false) l.Styles = utils.ListStyles l.SetSize(l.Width(), l.Height()) - l.KeyMap.Quit.SetHelp("esc", "back") l.SetShowStatusBar(false) + l.KeyMap.ShowFullHelp.Unbind() + l.KeyMap.Quit.SetHelp("esc", "back") + l.KeyMap.CursorDown.SetHelp("↓", "down") + l.KeyMap.CursorUp.SetHelp("↑", "up") + l.AdditionalShortHelpKeys = func() []key.Binding { + return []key.Binding{ + key.NewBinding(key.WithKeys(KeyTab), key.WithHelp(KeyTab, "select")), + } + } model := newInstallation{ root: root, @@ -167,7 +176,7 @@ func (m newInstallation) View() string { } m.dirList.SetSize(m.dirList.Width(), m.root.Size().Height-lipgloss.Height(mandatory)-1) - return lipgloss.JoinVertical(lipgloss.Left, mandatory, style.Render(m.dirList.View())) + return lipgloss.JoinVertical(lipgloss.Left, mandatory, m.dirList.View()) } // I know this is awful, but beats re-implementing the entire list model @@ -191,7 +200,7 @@ func getDirItems(inputValue string) []list.Item { if filter != "" { dirNames := make([]string, 0) for _, entry := range dir { - if entry.IsDir() { + if entry.IsDir() || entry.Type() == fs.ModeSymlink { dirNames = append(dirNames, entry.Name()) } } @@ -211,7 +220,7 @@ func getDirItems(inputValue string) []list.Item { globalMatches = matches } else { for _, entry := range dir { - if entry.IsDir() { + if entry.IsDir() || entry.Type() == fs.ModeSymlink { newItems = append(newItems, utils.SimpleItemExtra[newInstallation, string]{ SimpleItem: utils.SimpleItem[newInstallation]{ ItemTitle: entry.Name(), From ba6413e9c7e8cbee9cfb823fdb836409715a2010 Mon Sep 17 00:00:00 2001 From: Samuel Recker Date: Mon, 16 Jan 2023 22:52:24 +0100 Subject: [PATCH 5/8] set height of main menu help to match other scenes --- tea/scenes/main_menu.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tea/scenes/main_menu.go b/tea/scenes/main_menu.go index 107982f..ac185a2 100644 --- a/tea/scenes/main_menu.go +++ b/tea/scenes/main_menu.go @@ -201,6 +201,6 @@ func (m mainMenu) View() string { return lipgloss.JoinVertical(lipgloss.Left, header, err, m.list.View()) } - m.list.SetSize(m.list.Width(), m.root.Size().Height-lipgloss.Height(header)) + m.list.SetSize(m.list.Width(), m.root.Size().Height-lipgloss.Height(header)-1) return lipgloss.JoinVertical(lipgloss.Left, header, m.list.View()) } From 3e2a61615b7371186eaf679a092297db6549ead0 Mon Sep 17 00:00:00 2001 From: Samuel Recker Date: Mon, 16 Jan 2023 23:48:14 +0100 Subject: [PATCH 6/8] split scene pkg into smaller independent sub pkgs --- tea/scenes/apply.go | 7 +++--- tea/scenes/{ => errors}/errors.go | 2 +- tea/scenes/{ => installation}/installation.go | 7 +++--- .../{ => installation}/installations.go | 7 +++--- tea/scenes/installation/messages.go | 15 ++++++++++++ .../{ => installation}/new_installation.go | 13 +++++----- tea/scenes/{ => keys}/keys.go | 2 +- tea/scenes/main_menu.go | 21 +++++++++------- tea/scenes/{ => mods}/installed_mods.go | 23 ++++-------------- tea/scenes/{ => mods}/mod.go | 12 ++++++---- tea/scenes/{ => mods}/mod_info.go | 5 ++-- tea/scenes/{ => mods}/mod_semver.go | 9 +++---- tea/scenes/{ => mods}/mod_version.go | 12 ++++++---- tea/scenes/{ => mods}/mods.go | 24 ++++++++----------- tea/scenes/{ => mods}/select_mod_version.go | 7 +++--- tea/scenes/{ => profile}/messages.go | 14 +---------- tea/scenes/{ => profile}/new_profile.go | 13 +++++----- tea/scenes/{ => profile}/profile.go | 7 +++--- tea/scenes/{ => profile}/profiles.go | 7 +++--- tea/scenes/{ => profile}/rename_profile.go | 9 +++---- 20 files changed, 111 insertions(+), 105 deletions(-) rename tea/scenes/{ => errors}/errors.go (77%) rename tea/scenes/{ => installation}/installation.go (96%) rename tea/scenes/{ => installation}/installations.go (96%) create mode 100644 tea/scenes/installation/messages.go rename tea/scenes/{ => installation}/new_installation.go (96%) rename tea/scenes/{ => keys}/keys.go (86%) rename tea/scenes/{ => mods}/installed_mods.go (93%) rename tea/scenes/{ => mods}/mod.go (93%) rename tea/scenes/{ => mods}/mod_info.go (98%) rename tea/scenes/{ => mods}/mod_semver.go (93%) rename tea/scenes/{ => mods}/mod_version.go (90%) rename tea/scenes/{ => mods}/mods.go (97%) rename tea/scenes/{ => mods}/select_mod_version.go (97%) rename tea/scenes/{ => profile}/messages.go (50%) rename tea/scenes/{ => profile}/new_profile.go (90%) rename tea/scenes/{ => profile}/profile.go (96%) rename tea/scenes/{ => profile}/profiles.go (96%) rename tea/scenes/{ => profile}/rename_profile.go (93%) diff --git a/tea/scenes/apply.go b/tea/scenes/apply.go index 03b2d51..4162fbe 100644 --- a/tea/scenes/apply.go +++ b/tea/scenes/apply.go @@ -7,6 +7,7 @@ import ( "github.com/satisfactorymodding/ficsit-cli/cli" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -149,13 +150,13 @@ func (m apply) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit - case KeyEscape: + case keys.KeyEscape: m.cancelled = true m.cancelChannel <- true return m, nil - case KeyEnter: + case keys.KeyEnter: if m.status.done { if m.parent != nil { return m.parent, m.parent.Init() diff --git a/tea/scenes/errors.go b/tea/scenes/errors/errors.go similarity index 77% rename from tea/scenes/errors.go rename to tea/scenes/errors/errors.go index bd672be..d8bd32e 100644 --- a/tea/scenes/errors.go +++ b/tea/scenes/errors/errors.go @@ -1,4 +1,4 @@ -package scenes +package errors const ( ErrorFailedAddMod = "failed to add mod" diff --git a/tea/scenes/installation.go b/tea/scenes/installation/installation.go similarity index 96% rename from tea/scenes/installation.go rename to tea/scenes/installation/installation.go index d4331fd..fe81709 100644 --- a/tea/scenes/installation.go +++ b/tea/scenes/installation/installation.go @@ -1,4 +1,4 @@ -package scenes +package installation import ( "fmt" @@ -10,6 +10,7 @@ import ( "github.com/satisfactorymodding/ficsit-cli/cli" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -78,7 +79,7 @@ func (m installation) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit case "q": if m.parent != nil { @@ -91,7 +92,7 @@ func (m installation) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m.parent, nil } return m, nil - case KeyEnter: + case keys.KeyEnter: i, ok := m.list.SelectedItem().(utils.SimpleItem[installation]) if ok { if i.Activate != nil { diff --git a/tea/scenes/installations.go b/tea/scenes/installation/installations.go similarity index 96% rename from tea/scenes/installations.go rename to tea/scenes/installation/installations.go index 1a00802..161d235 100644 --- a/tea/scenes/installations.go +++ b/tea/scenes/installation/installations.go @@ -1,4 +1,4 @@ -package scenes +package installation import ( "github.com/charmbracelet/bubbles/key" @@ -8,6 +8,7 @@ import ( "github.com/charmbracelet/lipgloss" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -61,7 +62,7 @@ func (m installations) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case "n": newModel := NewNewInstallation(m.root, m) return newModel, newModel.Init() - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit case "q": if m.parent != nil { @@ -69,7 +70,7 @@ func (m installations) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m.parent, nil } return m, tea.Quit - case KeyEnter: + case keys.KeyEnter: i, ok := m.list.SelectedItem().(utils.SimpleItem[installations]) if ok { if i.Activate != nil { diff --git a/tea/scenes/installation/messages.go b/tea/scenes/installation/messages.go new file mode 100644 index 0000000..c85cf6b --- /dev/null +++ b/tea/scenes/installation/messages.go @@ -0,0 +1,15 @@ +package installation + +import tea "github.com/charmbracelet/bubbletea" + +type updateInstallationList struct{} + +func updateInstallationListCmd() tea.Msg { + return updateInstallationList{} +} + +type updateInstallationNames struct{} + +func updateInstallationNamesCmd() tea.Msg { + return updateInstallationNames{} +} diff --git a/tea/scenes/new_installation.go b/tea/scenes/installation/new_installation.go similarity index 96% rename from tea/scenes/new_installation.go rename to tea/scenes/installation/new_installation.go index 26398db..331e1ad 100644 --- a/tea/scenes/new_installation.go +++ b/tea/scenes/installation/new_installation.go @@ -1,4 +1,4 @@ -package scenes +package installation import ( "fmt" @@ -19,6 +19,7 @@ import ( "github.com/sahilm/fuzzy" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -50,7 +51,7 @@ func NewNewInstallation(root components.RootModel, parent tea.Model) tea.Model { l.KeyMap.CursorUp.SetHelp("↑", "up") l.AdditionalShortHelpKeys = func() []key.Binding { return []key.Binding{ - key.NewBinding(key.WithKeys(KeyTab), key.WithHelp(KeyTab, "select")), + key.NewBinding(key.WithKeys(keys.KeyTab), key.WithHelp(keys.KeyTab, "select")), } } @@ -76,11 +77,11 @@ func (m newInstallation) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit - case KeyEscape: + case keys.KeyEscape: return m.parent, nil - case KeyEnter: + case keys.KeyEnter: newInstall, err := m.root.GetGlobal().Installations.AddInstallation(m.root.GetGlobal(), m.input.Value(), m.root.GetGlobal().Profiles.SelectedProfile) if err != nil { errorComponent, cmd := components.NewErrorComponent(err.Error(), time.Second*5) @@ -97,7 +98,7 @@ func (m newInstallation) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } return m.parent, updateInstallationListCmd - case KeyTab: + case keys.KeyTab: var cmd tea.Cmd m.input, cmd = m.input.Update(msg) diff --git a/tea/scenes/keys.go b/tea/scenes/keys/keys.go similarity index 86% rename from tea/scenes/keys.go rename to tea/scenes/keys/keys.go index 9daaf32..56e88b5 100644 --- a/tea/scenes/keys.go +++ b/tea/scenes/keys/keys.go @@ -1,4 +1,4 @@ -package scenes +package keys const ( KeyControlC = "ctrl+c" diff --git a/tea/scenes/main_menu.go b/tea/scenes/main_menu.go index ac185a2..03990b6 100644 --- a/tea/scenes/main_menu.go +++ b/tea/scenes/main_menu.go @@ -11,6 +11,11 @@ import ( "github.com/spf13/viper" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/errors" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/installation" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/mods" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/profile" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -63,28 +68,28 @@ func NewMainMenu(root components.RootModel) tea.Model { utils.SimpleItem[mainMenu]{ ItemTitle: "Installations", Activate: func(msg tea.Msg, currentModel mainMenu) (tea.Model, tea.Cmd) { - newModel := NewInstallations(root, currentModel) + newModel := installation.NewInstallations(root, currentModel) return newModel, newModel.Init() }, }, utils.SimpleItem[mainMenu]{ ItemTitle: "Profiles", Activate: func(msg tea.Msg, currentModel mainMenu) (tea.Model, tea.Cmd) { - newModel := NewProfiles(root, currentModel) + newModel := profile.NewProfiles(root, currentModel) return newModel, newModel.Init() }, }, utils.SimpleItem[mainMenu]{ ItemTitle: "All Mods", Activate: func(msg tea.Msg, currentModel mainMenu) (tea.Model, tea.Cmd) { - newModel := NewMods(root, currentModel) + newModel := mods.NewMods(root, currentModel) return newModel, newModel.Init() }, }, utils.SimpleItem[mainMenu]{ ItemTitle: "Installed Mods", Activate: func(msg tea.Msg, currentModel mainMenu) (tea.Model, tea.Cmd) { - newModel := NewInstalledMods(root, currentModel) + newModel := mods.NewInstalledMods(root, currentModel) return newModel, newModel.Init() }, }, @@ -92,7 +97,7 @@ func NewMainMenu(root components.RootModel) tea.Model { ItemTitle: "Apply Changes", Activate: func(msg tea.Msg, currentModel mainMenu) (tea.Model, tea.Cmd) { if err := root.GetGlobal().Save(); err != nil { - log.Error().Err(err).Msg(ErrorFailedAddMod) + log.Error().Err(err).Msg(errors.ErrorFailedAddMod) errorComponent, cmd := components.NewErrorComponent(err.Error(), time.Second*5) currentModel.error = errorComponent return currentModel, cmd @@ -106,7 +111,7 @@ func NewMainMenu(root components.RootModel) tea.Model { ItemTitle: "Save", Activate: func(msg tea.Msg, currentModel mainMenu) (tea.Model, tea.Cmd) { if err := root.GetGlobal().Save(); err != nil { - log.Error().Err(err).Msg(ErrorFailedAddMod) + log.Error().Err(err).Msg(errors.ErrorFailedAddMod) errorComponent, cmd := components.NewErrorComponent(err.Error(), time.Second*5) currentModel.error = errorComponent return currentModel, cmd @@ -139,11 +144,11 @@ func (m mainMenu) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit case "q": return m, tea.Quit - case KeyEnter: + case keys.KeyEnter: i, ok := m.list.SelectedItem().(utils.SimpleItem[mainMenu]) if ok { if i.Activate != nil { diff --git a/tea/scenes/installed_mods.go b/tea/scenes/mods/installed_mods.go similarity index 93% rename from tea/scenes/installed_mods.go rename to tea/scenes/mods/installed_mods.go index 8331fcd..b3fcc5d 100644 --- a/tea/scenes/installed_mods.go +++ b/tea/scenes/mods/installed_mods.go @@ -1,11 +1,10 @@ -package scenes +package mods import ( "context" "sort" "time" - "github.com/charmbracelet/bubbles/key" "github.com/charmbracelet/bubbles/list" "github.com/charmbracelet/bubbles/spinner" tea "github.com/charmbracelet/bubbletea" @@ -13,6 +12,7 @@ import ( "github.com/satisfactorymodding/ficsit-cli/ficsit" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -42,18 +42,7 @@ func NewInstalledMods(root components.RootModel, parent tea.Model) tea.Model { l.Title = "Installed Mods" l.Styles = utils.ListStyles l.SetSize(l.Width(), l.Height()) - - l.AdditionalShortHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } - - l.AdditionalFullHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - } - } + l.KeyMap.Quit.SetHelp("q", "back") m := &installedModsList{ root: root, @@ -158,8 +147,6 @@ func (m installedModsList) LoadModData() { } func (m installedModsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) { - m.list.KeyMap.Quit.SetHelp("q", "back") - switch msg := msg.(type) { case tea.KeyMsg: if m.list.SettingFilter() { @@ -169,7 +156,7 @@ func (m installedModsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit case "q": if m.parent != nil { @@ -177,7 +164,7 @@ func (m installedModsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m.parent, nil } return m, tea.Quit - case KeyEnter: + case keys.KeyEnter: i, ok := m.list.SelectedItem().(utils.SimpleItem[installedModsList]) if ok { return m.processActivation(i, msg) diff --git a/tea/scenes/mod.go b/tea/scenes/mods/mod.go similarity index 93% rename from tea/scenes/mod.go rename to tea/scenes/mods/mod.go index aa0c18d..1522f27 100644 --- a/tea/scenes/mod.go +++ b/tea/scenes/mods/mod.go @@ -1,4 +1,4 @@ -package scenes +package mods import ( "time" @@ -9,6 +9,8 @@ import ( "github.com/rs/zerolog/log" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/errors" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -69,8 +71,8 @@ func NewModMenu(root components.RootModel, parent tea.Model, mod utils.Mod) tea. Activate: func(msg tea.Msg, currentModel modMenu) (tea.Model, tea.Cmd) { err := root.GetCurrentProfile().AddMod(mod.Reference, ">=0.0.0") if err != nil { - log.Error().Err(err).Msg(ErrorFailedAddMod) - cmd := currentModel.list.NewStatusMessage(ErrorFailedAddMod) + log.Error().Err(err).Msg(errors.ErrorFailedAddMod) + cmd := currentModel.list.NewStatusMessage(errors.ErrorFailedAddMod) return currentModel, cmd } return currentModel.parent, nil @@ -114,7 +116,7 @@ func (m modMenu) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit case "q": if m.parent != nil { @@ -122,7 +124,7 @@ func (m modMenu) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m.parent, nil } return m, tea.Quit - case KeyEnter: + case keys.KeyEnter: i, ok := m.list.SelectedItem().(utils.SimpleItem[modMenu]) if ok { if i.Activate != nil { diff --git a/tea/scenes/mod_info.go b/tea/scenes/mods/mod_info.go similarity index 98% rename from tea/scenes/mod_info.go rename to tea/scenes/mods/mod_info.go index 800454c..8724c1d 100644 --- a/tea/scenes/mod_info.go +++ b/tea/scenes/mods/mod_info.go @@ -1,4 +1,4 @@ -package scenes +package mods import ( "context" @@ -19,6 +19,7 @@ import ( "github.com/satisfactorymodding/ficsit-cli/ficsit" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -133,7 +134,7 @@ func (m modInfo) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit case "q": if m.parent != nil { diff --git a/tea/scenes/mod_semver.go b/tea/scenes/mods/mod_semver.go similarity index 93% rename from tea/scenes/mod_semver.go rename to tea/scenes/mods/mod_semver.go index b76e8d4..63bca69 100644 --- a/tea/scenes/mod_semver.go +++ b/tea/scenes/mods/mod_semver.go @@ -1,4 +1,4 @@ -package scenes +package mods import ( "time" @@ -8,6 +8,7 @@ import ( "github.com/charmbracelet/lipgloss" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -46,11 +47,11 @@ func (m modSemver) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit - case KeyEscape: + case keys.KeyEscape: return m.parent, nil - case KeyEnter: + case keys.KeyEnter: err := m.root.GetCurrentProfile().AddMod(m.mod.Reference, m.input.Value()) if err != nil { errorComponent, cmd := components.NewErrorComponent(err.Error(), time.Second*5) diff --git a/tea/scenes/mod_version.go b/tea/scenes/mods/mod_version.go similarity index 90% rename from tea/scenes/mod_version.go rename to tea/scenes/mods/mod_version.go index 8025a48..342a2df 100644 --- a/tea/scenes/mod_version.go +++ b/tea/scenes/mods/mod_version.go @@ -1,4 +1,4 @@ -package scenes +package mods import ( "time" @@ -9,6 +9,8 @@ import ( "github.com/rs/zerolog/log" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/errors" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -50,8 +52,8 @@ func NewModVersion(root components.RootModel, parent tea.Model, mod utils.Mod) t Activate: func(msg tea.Msg, currentModel modVersionMenu) (tea.Model, tea.Cmd) { err := root.GetCurrentProfile().AddMod(mod.Reference, ">=0.0.0") if err != nil { - log.Error().Err(err).Msg(ErrorFailedAddMod) - cmd := currentModel.list.NewStatusMessage(ErrorFailedAddMod) + log.Error().Err(err).Msg(errors.ErrorFailedAddMod) + cmd := currentModel.list.NewStatusMessage(errors.ErrorFailedAddMod) return currentModel, cmd } return currentModel.parent, nil @@ -80,7 +82,7 @@ func (m modVersionMenu) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit case "q": if m.parent != nil { @@ -88,7 +90,7 @@ func (m modVersionMenu) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m.parent, nil } return m, tea.Quit - case KeyEnter: + case keys.KeyEnter: i, ok := m.list.SelectedItem().(utils.SimpleItem[modVersionMenu]) if ok { if i.Activate != nil { diff --git a/tea/scenes/mods.go b/tea/scenes/mods/mods.go similarity index 97% rename from tea/scenes/mods.go rename to tea/scenes/mods/mods.go index 86e4f84..4a431d9 100644 --- a/tea/scenes/mods.go +++ b/tea/scenes/mods/mods.go @@ -1,4 +1,4 @@ -package scenes +package mods import ( "context" @@ -17,6 +17,7 @@ import ( "github.com/satisfactorymodding/ficsit-cli/cli" "github.com/satisfactorymodding/ficsit-cli/ficsit" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -36,6 +37,8 @@ type listUpdate struct { Done bool } +// type keys + type modsList struct { list list.Model sortFieldList list.Model @@ -63,22 +66,15 @@ func NewMods(root components.RootModel, parent tea.Model) tea.Model { l.Title = modsTitle l.Styles = utils.ListStyles l.SetSize(l.Width(), l.Height()) + l.KeyMap.Quit.SetHelp("q", "back") l.AdditionalShortHelpKeys = func() []key.Binding { return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - key.NewBinding(key.WithHelp("s", "sort")), - key.NewBinding(key.WithHelp("o", "order")), - } - } - - l.AdditionalFullHelpKeys = func() []key.Binding { - return []key.Binding{ - key.NewBinding(key.WithHelp("q", "back")), - key.NewBinding(key.WithHelp("s", "sort")), - key.NewBinding(key.WithHelp("o", "order")), + key.NewBinding(key.WithKeys("s"), key.WithHelp("s", "sort")), + key.NewBinding(key.WithKeys("o"), key.WithHelp("o", "order")), } } + l.AdditionalFullHelpKeys = l.AdditionalShortHelpKeys sortFieldList := list.New([]list.Item{ utils.SimpleItemExtra[modsList, ficsit.ModsModsGetModsModsMod]{ @@ -292,7 +288,7 @@ func (m modsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case "o": m.showSortOrderList = !m.showSortOrderList return m, nil - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit case "q": if m.showSortFieldList { @@ -310,7 +306,7 @@ func (m modsList) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m.parent, nil } return m, tea.Quit - case KeyEnter: + case keys.KeyEnter: if m.showSortFieldList { m.showSortFieldList = false i, ok := m.sortFieldList.SelectedItem().(utils.SimpleItemExtra[modsList, ficsit.ModsModsGetModsModsMod]) diff --git a/tea/scenes/select_mod_version.go b/tea/scenes/mods/select_mod_version.go similarity index 97% rename from tea/scenes/select_mod_version.go rename to tea/scenes/mods/select_mod_version.go index 23897c7..0d49b33 100644 --- a/tea/scenes/select_mod_version.go +++ b/tea/scenes/mods/select_mod_version.go @@ -1,4 +1,4 @@ -package scenes +package mods import ( "context" @@ -12,6 +12,7 @@ import ( "github.com/satisfactorymodding/ficsit-cli/ficsit" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -101,7 +102,7 @@ func (m selectModVersionList) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit case "q": if m.parent != nil { @@ -109,7 +110,7 @@ func (m selectModVersionList) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m.parent, nil } return m, tea.Quit - case KeyEnter: + case keys.KeyEnter: i, ok := m.list.SelectedItem().(utils.SimpleItem[selectModVersionList]) if ok { if i.Activate != nil { diff --git a/tea/scenes/messages.go b/tea/scenes/profile/messages.go similarity index 50% rename from tea/scenes/messages.go rename to tea/scenes/profile/messages.go index 40be2f7..fb18969 100644 --- a/tea/scenes/messages.go +++ b/tea/scenes/profile/messages.go @@ -1,4 +1,4 @@ -package scenes +package profile import ( tea "github.com/charmbracelet/bubbletea" @@ -15,15 +15,3 @@ type updateProfileNames struct{} func updateProfileNamesCmd() tea.Msg { return updateProfileNames{} } - -type updateInstallationList struct{} - -func updateInstallationListCmd() tea.Msg { - return updateInstallationList{} -} - -type updateInstallationNames struct{} - -func updateInstallationNamesCmd() tea.Msg { - return updateInstallationNames{} -} diff --git a/tea/scenes/new_profile.go b/tea/scenes/profile/new_profile.go similarity index 90% rename from tea/scenes/new_profile.go rename to tea/scenes/profile/new_profile.go index 021bf09..48c1eee 100644 --- a/tea/scenes/new_profile.go +++ b/tea/scenes/profile/new_profile.go @@ -1,4 +1,4 @@ -package scenes +package profile import ( "time" @@ -10,6 +10,7 @@ import ( "github.com/charmbracelet/lipgloss" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -50,15 +51,15 @@ func NewNewProfile(root components.RootModel, parent tea.Model) tea.Model { help: help.New(), keys: keyMap{ Back: key.NewBinding( - key.WithKeys(KeyEscape, KeyControlC), - key.WithHelp(KeyEscape, "back"), + key.WithKeys(keys.KeyEscape, keys.KeyControlC), + key.WithHelp(keys.KeyEscape, "back"), ), Enter: key.NewBinding( - key.WithKeys(KeyEnter), - key.WithHelp(KeyEnter, "create"), + key.WithKeys(keys.KeyEnter), + key.WithHelp(keys.KeyEnter, "create"), ), Quit: key.NewBinding( - key.WithKeys(KeyControlC), + key.WithKeys(keys.KeyControlC), ), }, } diff --git a/tea/scenes/profile.go b/tea/scenes/profile/profile.go similarity index 96% rename from tea/scenes/profile.go rename to tea/scenes/profile/profile.go index f45535c..8fde788 100644 --- a/tea/scenes/profile.go +++ b/tea/scenes/profile/profile.go @@ -1,4 +1,4 @@ -package scenes +package profile import ( "fmt" @@ -10,6 +10,7 @@ import ( "github.com/satisfactorymodding/ficsit-cli/cli" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -90,7 +91,7 @@ func (m profile) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit case "q": if m.parent != nil { @@ -103,7 +104,7 @@ func (m profile) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m.parent, nil } return m, nil - case KeyEnter: + case keys.KeyEnter: i, ok := m.list.SelectedItem().(utils.SimpleItem[profile]) if ok { if i.Activate != nil { diff --git a/tea/scenes/profiles.go b/tea/scenes/profile/profiles.go similarity index 96% rename from tea/scenes/profiles.go rename to tea/scenes/profile/profiles.go index 1bd63b0..8b8b01d 100644 --- a/tea/scenes/profiles.go +++ b/tea/scenes/profile/profiles.go @@ -1,4 +1,4 @@ -package scenes +package profile import ( "github.com/charmbracelet/bubbles/key" @@ -8,6 +8,7 @@ import ( "github.com/charmbracelet/lipgloss" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -61,7 +62,7 @@ func (m profiles) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case "n": newModel := NewNewProfile(m.root, m) return newModel, newModel.Init() - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit case "q": if m.parent != nil { @@ -69,7 +70,7 @@ func (m profiles) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m.parent, nil } return m, tea.Quit - case KeyEnter: + case keys.KeyEnter: i, ok := m.list.SelectedItem().(utils.SimpleItem[profiles]) if ok { if i.Activate != nil { diff --git a/tea/scenes/rename_profile.go b/tea/scenes/profile/rename_profile.go similarity index 93% rename from tea/scenes/rename_profile.go rename to tea/scenes/profile/rename_profile.go index f8a108f..86fdd2c 100644 --- a/tea/scenes/rename_profile.go +++ b/tea/scenes/profile/rename_profile.go @@ -1,4 +1,4 @@ -package scenes +package profile import ( "fmt" @@ -10,6 +10,7 @@ import ( "github.com/satisfactorymodding/ficsit-cli/cli" "github.com/satisfactorymodding/ficsit-cli/tea/components" + "github.com/satisfactorymodding/ficsit-cli/tea/scenes/keys" "github.com/satisfactorymodding/ficsit-cli/tea/utils" ) @@ -48,11 +49,11 @@ func (m renameProfile) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: switch keypress := msg.String(); keypress { - case KeyControlC: + case keys.KeyControlC: return m, tea.Quit - case KeyEscape: + case keys.KeyEscape: return m.parent, nil - case KeyEnter: + case keys.KeyEnter: if err := m.root.GetGlobal().Profiles.RenameProfile(m.root.GetGlobal(), m.oldName, m.input.Value()); err != nil { errorComponent, cmd := components.NewErrorComponent(err.Error(), time.Second*5) m.error = errorComponent From 61167b8a7d868e2a06331be2e806ae4889aff5a6 Mon Sep 17 00:00:00 2001 From: samuel Date: Sun, 18 Jun 2023 17:41:24 +0200 Subject: [PATCH 7/8] fix linting error --- tea/scenes/mods/mods.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tea/scenes/mods/mods.go b/tea/scenes/mods/mods.go index 4a431d9..2714f1a 100644 --- a/tea/scenes/mods/mods.go +++ b/tea/scenes/mods/mods.go @@ -55,7 +55,7 @@ type modsList struct { } func NewMods(root components.RootModel, parent tea.Model) tea.Model { - l := list.New([]list.Item{}, ModsListDelegate{ + l := list.New([]list.Item{}, ListDelegate{ ItemDelegate: utils.NewItemDelegate(), Context: root.GetGlobal(), }, root.Size().Width, root.Size().Height-root.Height()) @@ -462,12 +462,12 @@ func ascDesc(order sortOrder, result bool) bool { return !result } -type ModsListDelegate struct { +type ListDelegate struct { list.ItemDelegate Context *cli.GlobalContext } -func (c ModsListDelegate) Render(w io.Writer, m list.Model, index int, item list.Item) { +func (c ListDelegate) Render(w io.Writer, m list.Model, index int, item list.Item) { realItem := item.(utils.SimpleItemExtra[modsList, ficsit.ModsModsGetModsModsMod]) realDelegate := c.ItemDelegate.(list.DefaultDelegate) From c57a91700374dc4307582b93662142afaab3b272 Mon Sep 17 00:00:00 2001 From: samuel Date: Sun, 18 Jun 2023 17:48:53 +0200 Subject: [PATCH 8/8] fix other linting errors --- tea/components/error.go | 2 +- tea/components/header.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tea/components/error.go b/tea/components/error.go index 7e72593..d1369ea 100644 --- a/tea/components/error.go +++ b/tea/components/error.go @@ -32,7 +32,7 @@ func (e ErrorComponent) Init() tea.Cmd { return nil } -func (e ErrorComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) { +func (e ErrorComponent) Update(_ tea.Msg) (tea.Model, tea.Cmd) { return e, nil } diff --git a/tea/components/header.go b/tea/components/header.go index 62c5522..54cd599 100644 --- a/tea/components/header.go +++ b/tea/components/header.go @@ -25,7 +25,7 @@ func (h headerComponent) Init() tea.Cmd { return nil } -func (h headerComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) { +func (h headerComponent) Update(_ tea.Msg) (tea.Model, tea.Cmd) { return h, nil }