(msg tea.Msg)
| 38 | } |
| 39 | |
| 40 | func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { |
| 41 | var cmds []tea.Cmd |
| 42 | switch msg := msg.(type) { |
| 43 | case tea.KeyMsg: |
| 44 | switch msg.String() { |
| 45 | case tea.KeyCtrlC.String(), "q": |
| 46 | return m, tea.Quit |
| 47 | case tea.KeyTab.String(): |
| 48 | // Switch between tabs |
| 49 | m.CurrentTab = (m.CurrentTab + 1) % 2 |
| 50 | return m, nil |
| 51 | case "i": |
| 52 | if m.CurrentTab == 0 { |
| 53 | selectedItem := m.List.SelectedItem().(styles.Item) |
| 54 | for _, v := range m.Versions { |
| 55 | if v.Version == selectedItem.Name && !v.Installed { |
| 56 | m.Loading = true |
| 57 | m.InstallingVersion = v.Version |
| 58 | m.Message = "" |
| 59 | return m, utils.DownloadAndInstall(v) |
| 60 | } |
| 61 | } |
| 62 | } |
| 63 | case "u": |
| 64 | if m.CurrentTab == 0 { |
| 65 | selectedItem := m.List.SelectedItem().(styles.Item) |
| 66 | for _, v := range m.Versions { |
| 67 | if v.Version == selectedItem.Name && v.Installed { |
| 68 | m.Loading = true |
| 69 | m.Message = fmt.Sprintf("Switching to Go %s...", v.Version) |
| 70 | return m, utils.SwitchVersion(v) |
| 71 | } |
| 72 | } |
| 73 | m.Message = "You need to install this version first. Press 'i' to install." |
| 74 | m.MessageType = "error" |
| 75 | } |
| 76 | case "r": |
| 77 | m.Loading = true |
| 78 | m.Message = "" |
| 79 | return m, utils.FetchGoVersions |
| 80 | case "d": |
| 81 | if m.CurrentTab == 0 || m.CurrentTab == 1 { |
| 82 | selectedItem := m.List.SelectedItem().(styles.Item) |
| 83 | for _, v := range m.Versions { |
| 84 | if v.Version == selectedItem.Name && v.Installed { |
| 85 | if v.Active { |
| 86 | m.Message = "Cannot delete active version. Switch to another version first." |
| 87 | m.MessageType = "error" |
| 88 | return m, nil |
| 89 | } |
| 90 | |
| 91 | m.ConfirmingDelete = true |
| 92 | m.DeleteVersion = v.Version |
| 93 | m.Message = fmt.Sprintf("Are you sure you want to delete Go %s? Press Y to confirm, N to cancel.", v.Version) |
| 94 | m.MessageType = "warning" |
| 95 | return m, nil |
| 96 | } |
| 97 | } |
nothing calls this directly
no test coverage detected