update due to gumble API changes
authorTim Cooper <tim.cooper@layeh.com>
Sat, 23 Apr 2016 14:14:41 +0000 (11:14 -0300)
committerTim Cooper <tim.cooper@layeh.com>
Sat, 23 Apr 2016 14:14:41 +0000 (11:14 -0300)
barnard.go
client.go
cmd/barnard/main.go
ui.go
ui_tree.go

index 949c14d..ef263f7 100644 (file)
@@ -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
index 9ede8ce..8ef6d36 100644 (file)
--- 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")
index 37a7baa..c23c2d6 100644 (file)
@@ -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 (file)
--- 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) {
index d164cbd..c3abff9 100644 (file)
@@ -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]