autotypist/listWindow.go

146 lines
2.6 KiB
Go

// This is a simple example
package main
import (
"io/ioutil"
"net/http"
"os"
"strings"
"go.wit.com/gui"
"go.wit.com/log"
"go.wit.com/lib/gadgets"
)
var lw *gadgets.BasicWindow
var allsections []*section
type witRepo struct {
sec *section
path *gui.Node
downloadB *gui.Node
}
type section struct {
name string
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])
}
}
}
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")
fullpath := "/home/jcarr/go/src/go.wit.com/"
quickCmd(fullpath, []string{"go", "get", "-v", tmp.path.String()})
lw.Enable()
})
s.witRepos = append(s.witRepos, tmp)
}
func NewSection(parent *gui.Node, path string) *section {
news := new(section)
news.parent = parent
news.box = news.parent.NewBox("bw vbox", true)
news.group = news.box.NewGroup(path)
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)
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")
}