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) } }