From fc1aaf354b472c26e6abc5136b7eff8bb1f57f83 Mon Sep 17 00:00:00 2001 From: Username Date: Tue, 24 Feb 2026 09:25:20 +0100 Subject: [PATCH] add debug logging flag --- barnard.go | 21 +++++++++++++++++++++ client.go | 9 +++++++++ main.go | 19 +++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/barnard.go b/barnard.go index 0e121b3..af24b66 100644 --- a/barnard.go +++ b/barnard.go @@ -2,6 +2,10 @@ package main import ( "crypto/tls" + "fmt" + "log" + "os" + "time" "layeh.com/barnard/uiterm" "layeh.com/gumble/gumble" @@ -14,6 +18,10 @@ type Barnard struct { Address string TLSConfig tls.Config + Debug bool + Logger *log.Logger + TreeWidth int + LogFile *os.File Stream *gumbleopenal.Stream @@ -24,3 +32,16 @@ type Barnard struct { UiTree uiterm.Tree UiInputStatus uiterm.Label } + +func (b *Barnard) debugf(format string, args ...interface{}) { + if b.Debug && b.Logger != nil { + b.Logger.Printf(format, args...) + } +} + +func (b *Barnard) logMessage(line string) { + if b.LogFile != nil { + now := time.Now() + fmt.Fprintf(b.LogFile, "[%s] %s\n", now.Format("2006-01-02 15:04:05"), line) + } +} diff --git a/client.go b/client.go index 6f932e5..48fe06d 100644 --- a/client.go +++ b/client.go @@ -14,6 +14,7 @@ func (b *Barnard) start() { b.Config.Attach(gumbleutil.AutoBitrate) b.Config.Attach(b) + b.debugf("dialing %s", b.Address) var err error _, err = gumble.DialWithDialer(new(net.Dialer), b.Address, b.Config, &b.TLSConfig) if err != nil { @@ -25,6 +26,7 @@ func (b *Barnard) start() { if os.Getenv("ALSOFT_LOGLEVEL") == "" { os.Setenv("ALSOFT_LOGLEVEL", "0") } + b.debugf("initializing audio stream") if stream, err := gumbleopenal.New(b.Client); err != nil { fmt.Fprintf(os.Stderr, "%s\n", err) os.Exit(1) @@ -35,6 +37,7 @@ func (b *Barnard) start() { func (b *Barnard) OnConnect(e *gumble.ConnectEvent) { b.Client = e.Client + b.debugf("connected to %s", b.Client.Conn.RemoteAddr()) b.Ui.SetActive(uiViewInput) b.UiTree.Rebuild() @@ -48,6 +51,7 @@ func (b *Barnard) OnConnect(e *gumble.ConnectEvent) { } func (b *Barnard) OnDisconnect(e *gumble.DisconnectEvent) { + b.debugf("disconnected (type=%d)", e.Type) var reason string switch e.Type { case gumble.DisconnectError: @@ -63,10 +67,14 @@ func (b *Barnard) OnDisconnect(e *gumble.DisconnectEvent) { } func (b *Barnard) OnTextMessage(e *gumble.TextMessageEvent) { + if e.Sender != nil { + b.debugf("message from %s (%d bytes)", e.Sender.Name, len(e.Message)) + } b.AddOutputMessage(e.Sender, e.Message) } func (b *Barnard) OnUserChange(e *gumble.UserChangeEvent) { + b.debugf("user change: %s (type=%d)", e.User.Name, e.Type) if e.Type.Has(gumble.UserChangeChannel) && e.User == b.Client.Self { b.UpdateInputStatus(fmt.Sprintf("To: %s", e.User.Channel.Name)) } @@ -80,6 +88,7 @@ func (b *Barnard) OnChannelChange(e *gumble.ChannelChangeEvent) { } func (b *Barnard) OnPermissionDenied(e *gumble.PermissionDeniedEvent) { + b.debugf("permission denied (type=%d)", e.Type) var info string switch e.Type { case gumble.PermissionDeniedOther: diff --git a/main.go b/main.go index cb78f5d..0de48b6 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "crypto/tls" "flag" "fmt" + "log" "net" "os" @@ -23,6 +24,9 @@ func main() { passwordPrompt := flag.Bool("password-prompt", false, "prompt for server password on stdin") insecure := flag.Bool("insecure", false, "skip server certificate verification") certificate := flag.String("certificate", "", "PEM encoded certificate and private key") + debug := flag.Bool("debug", false, "enable debug logging to stderr") + treeWidth := flag.Int("tree-width", 20, "width of the channel tree pane") + logFile := flag.String("log", "", "write chat messages to file") flag.Parse() @@ -56,6 +60,21 @@ func main() { b.Config.Username = *username b.Config.Password = pass + b.TreeWidth = *treeWidth + b.Debug = *debug + if b.Debug { + b.Logger = log.New(os.Stderr, "barnard: ", log.Ltime) + b.debugf("connecting to %s as %q", addr, *username) + } + if *logFile != "" { + f, err := os.OpenFile(*logFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600) + if err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err) + os.Exit(1) + } + defer f.Close() + b.LogFile = f + } if *insecure { b.TLSConfig.InsecureSkipVerify = true