guireleaser/main.go

150 lines
3.0 KiB
Go
Raw Normal View History

// This is a simple example
package main
import (
"strings"
"os/exec"
"go.wit.com/log"
"go.wit.com/gui/gui"
"go.wit.com/gui/gadgets"
"go.wit.com/apps/control-panel-dns/smartwindow"
)
var myGui *gui.Node
var allrepos []*repo
type repo struct {
path string
pLabel *gui.Node // path label
bLabel *gui.Node // branch label
vLabel *gui.Node // version label
sLabel *gui.Node // git state (dirty or not?)
cButton *gui.Node // commit button
pButton *gui.Node // push button
}
func main() {
myGui = gui.New().Default()
helloworld()
// This is just a optional goroutine to watch that things are alive
gui.Watchdog()
}
func (r *repo) scan() {
log.Info("r.path", r.path)
b, out := run(r.path, "git", "describe --tags")
if b {
r.vLabel.SetText(out)
}
// cmd := "dig +noall +answer www.wit.com A"
// out = shell.Run(cmd)
}
func checkrepos() {
for i, r := range allrepos {
r.scan()
log.Info("scanned them all", i)
}
}
func addRepo(grid *gui.Node, path string) *repo {
newRepo := new(repo)
newRepo.path = path
newRepo.pLabel = grid.NewLabel(path)
newRepo.vLabel = grid.NewLabel("VER")
newRepo.bLabel = grid.NewLabel("jcarr")
newRepo.sLabel = grid.NewLabel("dirty")
newRepo.cButton = grid.NewButton("commit", func () {
log.Println("commit")
})
newRepo.cButton = grid.NewButton("push", func () {
log.Println("push")
})
allrepos = append(allrepos, newRepo)
return newRepo
}
// This creates a window
func helloworld() {
win := gadgets.NewBasicWindow(myGui, "helloworld golang wit/gui window")
box := win.Box().NewBox("bw vbox", false)
group := box.NewGroup("test")
grid := group.NewGrid("test", 6, 1)
grid.NewLabel("Repo")
grid.NewLabel("Version")
grid.NewLabel("Current branch")
grid.NewLabel("is dirty?")
grid.NewLabel("commit")
grid.NewLabel("push to")
newr := addRepo(grid, "go.wit.com/log")
newr.scan()
addRepo(grid, "go.wit.com/arg")
addRepo(grid, "go.wit.com/spew")
addRepo(grid, "go.wit.com/shell")
addRepo(grid, "")
addRepo(grid, "go.wit.com/gui/gadgets")
addRepo(grid, "go.wit.com/gui/gadgets")
box.NewButton("checkrepos()", func () {
checkrepos()
})
box.NewButton("hello", func () {
log.Println("world")
hellosmart()
})
}
// This creates a window
func hellosmart() {
win := smartwindow.New()
win.SetParent(myGui)
win.InitWindow()
win.Title("helloworld golang wit/gui window")
win.Vertical()
win.SetDraw(smartDraw)
win.Make()
win.Box().NewButton("test smartwindow", func () {
log.Println("smart")
})
}
func smartDraw(sw *smartwindow.SmartWindow) {
sw.Box().NewButton("hello", func () {
log.Println("smart")
})
}
func run(path string, thing string, cmdline string) (bool, string) {
parts := strings.Split(cmdline, " ")
// Create the command
cmd := exec.Command(thing, parts...)
// Set the working directory
cmd.Dir = "/home/jcarr/go/src/" + path
// Execute the command
output, err := cmd.CombinedOutput()
if err != nil {
log.Error(err, "cmd error'd out", parts)
return false, ""
}
// Print the output
log.Info(string(output))
return true, string(output)
}