diff --git a/bridge/mumble/handlers.go b/bridge/mumble/handlers.go
index cb37268a..487c3276 100644
--- a/bridge/mumble/handlers.go
+++ b/bridge/mumble/handlers.go
@@ -2,9 +2,9 @@ package bmumble
import (
"strconv"
+ "time"
"layeh.com/gumble/gumble"
- "layeh.com/gumble/gumbleutil"
"github.com/42wim/matterbridge/bridge/config"
"github.com/42wim/matterbridge/bridge/helper"
@@ -20,6 +20,7 @@ func (b *Bmumble) handleTextMessage(event *gumble.TextMessageEvent) {
if err != nil {
b.Log.Error(err)
}
+ now := time.Now().UTC()
for i, part := range parts {
// Construct matterbridge message and pass on to the gateway
rmsg := config.Message{
@@ -31,14 +32,14 @@ func (b *Bmumble) handleTextMessage(event *gumble.TextMessageEvent) {
if part.Image == nil {
rmsg.Text = part.Text
} else {
+ fname := b.Account + "_" + strconv.FormatInt(now.UnixNano(), 10) + "_" + strconv.Itoa(i) + part.FileExtension
rmsg.Extra = make(map[string][]interface{})
- if err = helper.HandleDownloadSize(b.Log, &rmsg, "image"+strconv.Itoa(i)+part.FileExtension, int64(len(part.Image)), b.General); err != nil {
+ if err = helper.HandleDownloadSize(b.Log, &rmsg, fname, int64(len(part.Image)), b.General); err != nil {
b.Log.WithError(err).Warn("not including image in message")
continue
}
- helper.HandleDownloadData(b.Log, &rmsg, "image"+strconv.Itoa(i)+part.FileExtension, "", "", &part.Image, b.General)
+ helper.HandleDownloadData(b.Log, &rmsg, fname, "", "", &part.Image, b.General)
}
- b.Log.Debugf("<= Remote message is %+v", rmsg)
b.Remote <- rmsg
}
}
@@ -82,20 +83,3 @@ func (b *Bmumble) handleUserChange(event *gumble.UserChangeEvent) {
func (b *Bmumble) handleDisconnect(event *gumble.DisconnectEvent) {
b.connected <- *event
}
-
-func (b *Bmumble) makeDebugHandler() *gumbleutil.Listener {
- handler := gumbleutil.Listener{
- Connect: func(e *gumble.ConnectEvent) { b.Log.Debugf("Received connect event: %+v", e) },
- Disconnect: func(e *gumble.DisconnectEvent) { b.Log.Debugf("Received disconnect event: %+v", e) },
- TextMessage: func(e *gumble.TextMessageEvent) { b.Log.Debugf("Received textmessage event: %+v", e) },
- UserChange: func(e *gumble.UserChangeEvent) { b.Log.Debugf("Received userchange event: %+v", e) },
- ChannelChange: func(e *gumble.ChannelChangeEvent) { b.Log.Debugf("Received channelchange event: %+v", e) },
- PermissionDenied: func(e *gumble.PermissionDeniedEvent) { b.Log.Debugf("Received permissiondenied event: %+v", e) },
- UserList: func(e *gumble.UserListEvent) { b.Log.Debugf("Received userlist event: %+v", e) },
- ACL: func(e *gumble.ACLEvent) { b.Log.Debugf("Received acl event: %+v", e) },
- BanList: func(e *gumble.BanListEvent) { b.Log.Debugf("Received banlist event: %+v", e) },
- ContextActionChange: func(e *gumble.ContextActionChangeEvent) { b.Log.Debugf("Received contextactionchange event: %+v", e) },
- ServerConfig: func(e *gumble.ServerConfigEvent) { b.Log.Debugf("Received serverconfig event: %+v", e) },
- }
- return &handler
-}
diff --git a/bridge/mumble/helpers.go b/bridge/mumble/helpers.go
index a4e15dc7..23a25340 100644
--- a/bridge/mumble/helpers.go
+++ b/bridge/mumble/helpers.go
@@ -49,7 +49,6 @@ func (b *Bmumble) tokenize(t *string) ([]MessagePart, error) {
tokens := p.FindStringSubmatch(remaining)
if tokens == nil {
- b.Log.Debugf("Last text token: %s", remaining)
// no match -> remaining string is non-image text
if len(remaining) > 0 {
parts = append(parts, MessagePart{remaining, "", nil})
@@ -67,7 +66,6 @@ func (b *Bmumble) tokenize(t *string) ([]MessagePart, error) {
remaining = tokens[3]
continue
}
- b.Log.Debugf("Raw data: URL: %s", uri)
err = b.decodeImage(uri, &parts)
if err != nil {
b.Log.WithError(err).Info("Decoding the image failed")
@@ -94,14 +92,43 @@ func (b *Bmumble) extractFiles(msg *config.Message) []config.Message {
for _, f := range msg.Extra["file"] {
fi := f.(config.FileInfo)
if fi.Data == nil || len(*fi.Data) == 0 {
- // Mumble needs the raw data
- b.Log.Info("Not forwarding file without local data")
+ if len(fi.URL) > 0 {
+ // no data, send link instead
+ imsg := config.Message{
+ Text: fmt.Sprintf(`%s`, fi.URL, fi.URL),
+ Channel: msg.Channel,
+ Username: msg.Username,
+ UserID: msg.UserID,
+ Account: msg.Account,
+ Protocol: msg.Protocol,
+ Timestamp: msg.Timestamp,
+ Event: "mumble_image",
+ }
+ messages = append(messages, imsg)
+ } else {
+ // Mumble needs the raw data
+ b.Log.Info("Not forwarding file without local data")
+ }
continue
}
mimeType := http.DetectContentType(*fi.Data)
if !strings.HasPrefix(mimeType, "image/") {
- // Mumble only supports images
- b.Log.Infof("Not forwarding file of type %s", mimeType)
+ // Mumble only supports images, send link instead
+ if len(fi.URL) > 0 {
+ imsg := config.Message{
+ Text: fmt.Sprintf(`%s`, fi.URL, fi.URL),
+ Channel: msg.Channel,
+ Username: msg.Username,
+ UserID: msg.UserID,
+ Account: msg.Account,
+ Protocol: msg.Protocol,
+ Timestamp: msg.Timestamp,
+ Event: "mumble_image",
+ }
+ messages = append(messages, imsg)
+ } else {
+ b.Log.Infof("Not forwarding file of type %s", mimeType)
+ }
continue
}
mimeType = strings.TrimSpace(strings.Split(mimeType, ";")[0])
@@ -120,7 +147,6 @@ func (b *Bmumble) extractFiles(msg *config.Message) []config.Message {
Account: msg.Account,
Protocol: msg.Protocol,
Timestamp: msg.Timestamp,
- Extra: make(map[string][]interface{}),
Event: "mumble_image",
}
messages = append(messages, imsg)
diff --git a/bridge/mumble/mumble.go b/bridge/mumble/mumble.go
index 6f33fecf..ea3eb54e 100644
--- a/bridge/mumble/mumble.go
+++ b/bridge/mumble/mumble.go
@@ -173,9 +173,6 @@ func (b *Bmumble) doConnect() error {
Disconnect: b.handleDisconnect,
UserChange: b.handleUserChange,
})
- if b.GetInt("DebugLevel") == 0 {
- gumbleConfig.Attach(b.makeDebugHandler())
- }
gumbleConfig.Username = b.GetString("Nick")
if password := b.GetString("Password"); password != "" {
gumbleConfig.Password = password
@@ -225,7 +222,6 @@ func (b *Bmumble) processMessage(msg *config.Message) {
// If this is a specially generated image message, send it unmodified
if msg.Event == "mumble_image" {
if allowHTML {
- b.Log.Debugf("Sending image message: %s%s", msg.Username, msg.Text)
b.client.Self.Channel.Send(msg.Username+msg.Text, false)
} else {
b.Log.Info("Can't send image, server does not allow HTML messages")
@@ -253,7 +249,6 @@ func (b *Bmumble) processMessage(msg *config.Message) {
}
// Send the individual lindes
for i := range msgLines {
- b.Log.Debugf("Sending line: %s", msgLines[i])
b.client.Self.Channel.Send(msg.Username+msgLines[i], false)
}
}