From 4d141b61315467271715dc9d8dc352b49d194302 Mon Sep 17 00:00:00 2001 From: Tim Cooper Date: Sat, 23 Apr 2016 11:14:41 -0300 Subject: [PATCH] update due to gumble API changes --- barnard.go | 5 +++++ client.go | 47 ++++++++++++++++++++++++++++----------------- cmd/barnard/main.go | 40 ++++++++++---------------------------- ui.go | 2 ++ ui_tree.go | 4 ++++ 5 files changed, 50 insertions(+), 48 deletions(-) diff --git a/barnard.go b/barnard.go index 949c14d..ef263f7 100644 --- a/barnard.go +++ b/barnard.go @@ -1,6 +1,8 @@ package barnard import ( + "crypto/tls" + "github.com/layeh/barnard/uiterm" "github.com/layeh/gumble/gumble" "github.com/layeh/gumble/gumbleopenal" @@ -10,6 +12,9 @@ type Barnard struct { Config *gumble.Config Client *gumble.Client + Address string + TLSConfig tls.Config + Stream *gumbleopenal.Stream Ui *uiterm.Ui diff --git a/client.go b/client.go index 9ede8ce..8ef6d36 100644 --- a/client.go +++ b/client.go @@ -2,11 +2,40 @@ package barnard import ( "fmt" + "net" + "os" "github.com/layeh/gumble/gumble" + "github.com/layeh/gumble/gumbleopenal" + "github.com/layeh/gumble/gumbleutil" ) +func (b *Barnard) start() { + b.Config.Attach(gumbleutil.AutoBitrate) + b.Config.Attach(b) + + var err error + _, err = gumble.DialWithDialer(new(net.Dialer), b.Address, b.Config, &b.TLSConfig) + if err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err) + os.Exit(1) + } + + // Audio + if os.Getenv("ALSOFT_LOGLEVEL") == "" { + os.Setenv("ALSOFT_LOGLEVEL", "0") + } + if stream, err := gumbleopenal.New(b.Client); err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err) + os.Exit(1) + } else { + b.Stream = stream + } +} + func (b *Barnard) OnConnect(e *gumble.ConnectEvent) { + b.Client = e.Client + b.Ui.SetActive(uiViewInput) b.UiTree.Rebuild() b.Ui.Refresh() @@ -23,24 +52,6 @@ func (b *Barnard) OnDisconnect(e *gumble.DisconnectEvent) { switch e.Type { case gumble.DisconnectError: reason = "connection error" - case gumble.DisconnectOther: - reason = e.String - case gumble.DisconnectVersion: - reason = "invalid version number" - case gumble.DisconnectUserName: - reason = "invalid user name" - case gumble.DisconnectUserCredentials: - reason = "incorrect user password/certificate" - case gumble.DisconnectServerPassword: - reason = "incorrect server password" - case gumble.DisconnectUsernameInUse: - reason = "user name in use" - case gumble.DisconnectServerFull: - reason = "server full" - case gumble.DisconnectNoCertificate: - reason = "missing certificate" - case gumble.DisconnectAuthenticatorFail: - reason = "authenticator verification failed" } if reason == "" { b.AddOutputLine("Disconnected") diff --git a/cmd/barnard/main.go b/cmd/barnard/main.go index 37a7baa..c23c2d6 100644 --- a/cmd/barnard/main.go +++ b/cmd/barnard/main.go @@ -9,8 +9,6 @@ import ( "github.com/layeh/barnard" "github.com/layeh/barnard/uiterm" "github.com/layeh/gumble/gumble" - "github.com/layeh/gumble/gumbleutil" - "github.com/layeh/gumble/gumbleopenal" _ "github.com/layeh/gumble/opus" ) @@ -24,43 +22,25 @@ func main() { flag.Parse() // Initialize - b := barnard.Barnard{} - b.Ui = uiterm.New(&b) + b := barnard.Barnard{ + Config: gumble.NewConfig(), + Address: *server, + } - // Gumble - b.Config = gumble.NewConfig() b.Config.Username = *username - b.Config.Address = *server + if *insecure { - b.Config.TLSConfig.InsecureSkipVerify = true + b.TLSConfig.InsecureSkipVerify = true } if *certificate != "" { - if cert, err := tls.LoadX509KeyPair(*certificate, *certificate); err != nil { + cert, err := tls.LoadX509KeyPair(*certificate, *certificate) + if err != nil { fmt.Fprintf(os.Stderr, "%s\n", err) os.Exit(1) - } else { - b.Config.TLSConfig.Certificates = []tls.Certificate{cert} } + b.TLSConfig.Certificates = append(b.TLSConfig.Certificates, cert) } - b.Client = gumble.NewClient(b.Config) - b.Client.Attach(gumbleutil.AutoBitrate) - b.Client.Attach(&b) - // Audio - if os.Getenv("ALSOFT_LOGLEVEL") == "" { - os.Setenv("ALSOFT_LOGLEVEL", "0") - } - if stream, err := gumbleopenal.New(b.Client); err != nil { - fmt.Fprintf(os.Stderr, "%s\n", err) - os.Exit(1) - } else { - b.Stream = stream - } - - if err := b.Client.Connect(); err != nil { - fmt.Fprintf(os.Stderr, "%s\n", err) - os.Exit(1) - } - + b.Ui = uiterm.New(&b) b.Ui.Run() } diff --git a/ui.go b/ui.go index c1dc6a8..824dc85 100644 --- a/ui.go +++ b/ui.go @@ -156,6 +156,8 @@ func (b *Barnard) OnUiInitialize(ui *uiterm.Ui) { b.Ui.AddKeyListener(b.OnScrollOutputDown, uiterm.KeyPgdn) b.Ui.AddKeyListener(b.OnScrollOutputTop, uiterm.KeyHome) b.Ui.AddKeyListener(b.OnScrollOutputBottom, uiterm.KeyEnd) + + b.start() } func (b *Barnard) OnUiResize(ui *uiterm.Ui, width, height int) { diff --git a/ui_tree.go b/ui_tree.go index d164cbd..c3abff9 100644 --- a/ui_tree.go +++ b/ui_tree.go @@ -38,6 +38,10 @@ func (b *Barnard) TreeItemSelect(ui *uiterm.Ui, tree *uiterm.Tree, item uiterm.T } func (b *Barnard) TreeItem(item uiterm.TreeItem) []uiterm.TreeItem { + if b.Client == nil { + return nil + } + var treeItem TreeItem if ti, ok := item.(TreeItem); !ok { root := b.Client.Channels[0] -- 2.39.2