stub in a gui. doesn't work

This commit is contained in:
Jeff Carr 2025-09-08 23:12:31 -05:00
parent 7ea7393d6c
commit f1c1ca950c
4 changed files with 81 additions and 69 deletions

View File

@ -17,6 +17,7 @@ var argv args
type args struct { type args struct {
Pull *EmptyCmd `arg:"subcommand:pull" help:"'git pull' on the repos"` Pull *EmptyCmd `arg:"subcommand:pull" help:"'git pull' on the repos"`
List *EmptyCmd `arg:"subcommand:list" help:"list the repos"` List *EmptyCmd `arg:"subcommand:list" help:"list the repos"`
Gui *EmptyCmd `arg:"subcommand:gui" help:"show gui"`
Merge *EmptyCmd `arg:"subcommand:merge" help:"merge in new patchsets"` Merge *EmptyCmd `arg:"subcommand:merge" help:"merge in new patchsets"`
Init *EmptyCmd `arg:"subcommand:init" help:"init the repo list"` Init *EmptyCmd `arg:"subcommand:init" help:"init the repo list"`
Port int `arg:"--port" default:"2520" help:"port to run on"` Port int `arg:"--port" default:"2520" help:"port to run on"`

75
doGui.go Normal file
View File

@ -0,0 +1,75 @@
// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
// Use of this source code is governed by the GPL 3.0
package main
// An app to submit patches for the 30 GO GUI repos
import (
"time"
"go.wit.com/gui"
"go.wit.com/lib/fhelp"
"go.wit.com/lib/gadgets"
"go.wit.com/lib/gui/shell"
"go.wit.com/log"
)
func debug() {
defer func() {
if r := recover(); r != nil {
gui.Crash(r, "forge debug()")
}
}()
time.Sleep(2 * time.Second)
for {
now := time.Now()
doList()
log.Printf("finished a scan here in (%s)\n", shell.FormatDuration(time.Since(now)))
time.Sleep(90 * time.Second)
}
}
func doGui() {
if me.forge.Config.GetDefaultGui() == "" {
me.forge.Config.DefaultGui = "gocui"
me.forge.ConfigSave()
}
me.myGui = gui.New()
me.myGui.InitEmbed(resources)
me.myGui.SetAppDefaultPlugin(me.forge.Config.DefaultGui) // sets the default GUI plugin to use
if pname, err := me.myGui.Default(); err != nil {
if !fhelp.BuildPlugin("gocui") {
log.Info("You can't run the forge GUI since the plugins did not build", pname)
okExit("")
} else {
if err := me.myGui.LoadToolkitNew("gocui"); err != nil {
log.Info("The plugins built, but still failed to load", pname)
badExit(err)
}
log.Info("The plugins built and loaded!", pname)
}
}
mainWindow := gadgets.NewGenericWindow("forged: forge.wit.com", "Current Settings")
mainWindow.Custom = func() {
log.Warn("MAIN WINDOW CLOSE")
now := time.Now()
log.Printf("rill repos.Reload() took (%s)\n", shell.FormatDuration(time.Since(now)))
okExit("")
}
drawWindow(mainWindow)
// sits here forever
debug()
}
func drawWindow(win *gadgets.GenericWindow) {
grid := win.Group.RawGrid()
grid.NewButton("stats", func() {
doList()
})
}

71
main.go
View File

@ -77,6 +77,9 @@ func main() {
} }
if argv.Daemon == true { if argv.Daemon == true {
if argv.Gui != nil {
go doGui()
}
mux := http.NewServeMux() mux := http.NewServeMux()
okHandlerFunc := http.HandlerFunc(okHandler) okHandlerFunc := http.HandlerFunc(okHandler)
@ -104,74 +107,6 @@ func main() {
okExit("") okExit("")
} }
/*
// --- Best Practice: Create a custom http.Server ---
server := &http.Server{
Addr: p,
Handler: mux,
// ReadTimeout is the total time to read the entire request, including the body.
// Increase this to a value that can accommodate your largest expected uploads.
// For example, 5 minutes.
ReadTimeout: 5 * time.Minute,
// WriteTimeout is the maximum duration before timing out writes of the response.
WriteTimeout: 10 * time.Second,
// IdleTimeout is the maximum amount of time to wait for the
// next request when keep-alives are enabled.
IdleTimeout: 120 * time.Second,
}
*/
/*
log.Println(argv.Version(), "HOSTNAME set to:", HOSTNAME)
log.Println("Running on port", "http://localhost"+p)
log.Println("Running on port", "http://localhost"+p+"/ipv6.png")
// if err := http.ListenAndServe(p, nil); err != nil {
if err := server.ListenAndServe(); err != nil {
log.Fatalf("Could not start server: %s\n", err)
}
/*
log.Info("Running in --daemon mode")
http.HandleFunc("/", okHandler)
// go https() // use caddy instead
p := fmt.Sprintf(":%d", argv.Port)
log.Println(argv.Version(), "HOSTNAME set to:", HOSTNAME)
log.Println("Running on port", "http://localhost"+p)
log.Println("Running on port", "http://localhost"+p+"/ipv6.png")
err := http.ListenAndServe(p, nil)
if err != nil {
log.Println("Error starting server:", err)
}
return
}
*/
log.Info("--daemon was not set. Just list the patches.") log.Info("--daemon was not set. Just list the patches.")
// doList() // doList()
} }
func formatDuration(d time.Duration) string {
seconds := int(d.Seconds()) % 60
minutes := int(d.Minutes()) % 60
hours := int(d.Hours()) % 24
days := int(d.Hours()) / 24
result := ""
if days > 0 {
result += fmt.Sprintf("%dd ", days)
return result
}
if hours > 0 {
result += fmt.Sprintf("%dh ", hours)
return result
}
if minutes > 0 {
result += fmt.Sprintf("%dm ", minutes)
return result
}
if seconds > 0 {
result += fmt.Sprintf("%ds", seconds)
}
return result
}

View File

@ -5,6 +5,7 @@ package main
import ( import (
"go.wit.com/dev/alexflint/arg" "go.wit.com/dev/alexflint/arg"
"go.wit.com/gui"
"go.wit.com/lib/protobuf/forgepb" "go.wit.com/lib/protobuf/forgepb"
) )
@ -14,5 +15,5 @@ var me *mainType
type mainType struct { type mainType struct {
pp *arg.Parser // for parsing the command line args. Yay to alexf lint! pp *arg.Parser // for parsing the command line args. Yay to alexf lint!
forge *forgepb.Forge // for holding the forge protobuf files forge *forgepb.Forge // for holding the forge protobuf files
// myGui *gui.Node // the gui toolkit handle myGui *gui.Node // the gui toolkit handle
} }