MCPcopy
hub / github.com/cli/cli / toggleSelected

Method toggleSelected

pkg/cmd/extension/browse/browse.go:144–220  ·  view source on GitHub ↗
(verb string)

Source from the content-addressed store, hash-verified

142}
143
144func (el *extList) toggleSelected(verb string) {
145 ee, ix := el.FindSelected()
146 if ix < 0 {
147 el.opts.Logger.Println("failed to find selected entry")
148 return
149 }
150 modal := el.createModal()
151
152 if (ee.Installed && verb == "install") || (!ee.Installed && verb == "remove") {
153 return
154 }
155
156 var action func() error
157
158 if !ee.Installed {
159 modal.SetText(fmt.Sprintf("Installing %s...", ee.FullName))
160 action = func() error {
161 repo, err := ghrepo.FromFullName(ee.FullName)
162 if err != nil {
163 el.opts.Logger.Println(fmt.Errorf("failed to install '%s': %w", ee.FullName, err))
164 return err
165 }
166 err = el.opts.Em.Install(repo, "")
167 if err != nil {
168 return fmt.Errorf("failed to install %s: %w", ee.FullName, err)
169 }
170 return nil
171 }
172 } else {
173 modal.SetText(fmt.Sprintf("Removing %s...", ee.FullName))
174 action = func() error {
175 name := strings.TrimPrefix(ee.Name, "gh-")
176 err := el.opts.Em.Remove(name)
177 if err != nil {
178 return fmt.Errorf("failed to remove %s: %w", ee.FullName, err)
179 }
180 return nil
181 }
182 }
183
184 el.ui.CmdFlex.Clear()
185 el.ui.CmdFlex.AddItem(modal, 0, 1, true)
186 var err error
187 wg := el.WaitGroup
188 wg.Add(1)
189
190 go func() {
191 el.QueueUpdateDraw(func() {
192 el.ui.Pages.SwitchToPage("command")
193 wg.Add(1)
194 wg.Done()
195 go func() {
196 el.QueueUpdateDraw(func() {
197 err = action()
198 if err != nil {
199 modal.SetText(err.Error())
200 } else {
201 modalText := fmt.Sprintf("Installed %s!", ee.FullName)

Callers 2

InstallSelectedMethod · 0.95
RemoveSelectedMethod · 0.95

Calls 12

FindSelectedMethod · 0.95
createModalMethod · 0.95
toggleInstalledMethod · 0.95
FromFullNameFunction · 0.92
PrintlnMethod · 0.80
ErrorfMethod · 0.65
InstallMethod · 0.65
RemoveMethod · 0.65
AddMethod · 0.65
DoneMethod · 0.65
WaitMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected