// This is a simple example package main import ( "io/ioutil" "net/http" "os" "path/filepath" "strings" "go.wit.com/gui" "go.wit.com/log" "go.wit.com/lib/gadgets" "go.wit.com/lib/gui/repostatus" ) var lw *gadgets.BasicWindow var allsections []*section type witRepo struct { sec *section path *gui.Node downloadB *gui.Node } type section struct { name string hidden bool parent *gui.Node box *gui.Node group *gui.Node grid *gui.Node // where the repos are listed hideCB *gui.Node witRepos []*witRepo } func listWindow() { if lw != nil { lw.Toggle() return } lw = gadgets.NewBasicWindow(me.myGui, "go.wit.com repositories") lw.Custom = func() { log.Warn("got to close") } lw.Make() lw.StandardClose() lw.Draw() box := lw.Box() group := box.NewGroup("list") group.NewButton("blah", func() {}) var lines []string var curs *section lines = dumpURL("https://go.wit.com/list") for i, line := range lines { if line == "" { continue } if line[0] == '#' { curs = NewSection(group, line) log.Warn("new group:", line) continue } log.Warn(i, line) parts := strings.Split(line, " ") if curs != nil { curs.add(parts[0]) } } for i, sec := range allsections { log.Info("section name:", sec.name, "hidden:", sec.hidden, i) parts := strings.Split(sec.name, " ") if len(parts) > 1 { if parts[1] != "Applications" { sec.Hide() } } } // lw.Toggle() } func (s *section) add(path string) { if s == nil { return } tmp := new(witRepo) tmp.sec = s tmp.path = s.grid.NewLabel(path) tmp.downloadB = s.grid.NewButton("download", func() { lw.Disable() log.Info("downloading", tmp.path.String(), "here") os.Setenv("GO111MODULE", "off") goSrcDir := me.goSrcPwd.String() quickCmd(goSrcDir, []string{"go", "get", "-v", tmp.path.String()}) fullpath := filepath.Join(goSrcDir, tmp.path.String()) quickCmd(fullpath, []string{"go", "get", "-v", "-u", "."}) lw.Enable() }) if repostatus.VerifyLocalGoRepo(path) { log.Verbose("newRepo actually exists", path) tmp.downloadB.SetLabel("downloaded") tmp.downloadB.Disable() } s.witRepos = append(s.witRepos, tmp) } func NewSection(parent *gui.Node, desc string) *section { news := new(section) news.name = desc news.parent = parent news.box = news.parent.NewBox("bw vbox", true) news.group = news.box.NewGroup(desc) news.hideCB = news.box.NewCheckbox("hide") news.hideCB.Custom = func() { news.toggle() } news.grid = news.parent.NewGrid("sections", 2, 1) allsections = append(allsections, news) return news } func (s *section) toggle() { log.Warn(s.name) if s.hidden { s.hidden = false for i, wrepo := range s.witRepos { log.Warn(i, wrepo.path.String()) wrepo.path.Show() wrepo.downloadB.Show() } } else { s.Hide() } } func (s *section) Hide() { s.hidden = true s.hideCB.SetChecked(true) for i, wrepo := range s.witRepos { log.Warn(i, wrepo.path.String()) wrepo.path.Hide() wrepo.downloadB.Hide() } } /* func dumpURL(url string) string { resp, err := http.Get(url) if err != nil { return "" } defer resp.Body.Close() return resp.Body.String() _, err = io.Copy(os.Stdout, resp.Body) if err != nil { return "" } } */ func dumpURL(url string) []string { resp, err := http.Get(url) if err != nil { return nil } defer resp.Body.Close() bodyBytes, err := ioutil.ReadAll(resp.Body) if err != nil { return nil } return strings.Split(string(bodyBytes), "\n") }