Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optionally send file URL instead of uploading media from Matrix messages #2120

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions bridge/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ type Protocol struct {
ReplaceNicks [][]string // all protocols
RemoteNickFormat string // all protocols
RunCommands []string // IRC
SendUrlNotFile bool // matrix
Server string // IRC,mattermost,XMPP,discord,matrix
SessionFile string // msteams,whatsapp
ShowJoinPart bool // all protocols
Expand Down
39 changes: 32 additions & 7 deletions bridge/matrix/matrix.go
Original file line number Diff line number Diff line change
Expand Up @@ -540,9 +540,18 @@ func (b *Bmatrix) handleEvent(ev *matrix.Event) {

// Do we have attachments
if b.containsAttachment(ev.Content) {
err := b.handleDownloadFile(&rmsg, ev.Content)
if err != nil {
b.Log.Errorf("download failed: %#v", err)
if b.GetBool("SendUrlNotFile") {
// replace the text of the message (which is set to the filename above) with the url
var err error
rmsg.Text, err = b.getMessageFileUrl(ev.Content)
if err != nil {
b.Log.Errorf("get url for uploaded file failed: %#v", err)
}
} else {
err := b.handleDownloadFile(&rmsg, ev.Content)
if err != nil {
b.Log.Errorf("download failed: %#v", err)
}
}
}

Expand All @@ -556,6 +565,21 @@ func (b *Bmatrix) handleEvent(ev *matrix.Event) {
}
}

// getMessageFileUrl changes the Matrix mxc:// uploads and changes them to a regular url
func (b *Bmatrix) getMessageFileUrl(content map[string]interface{}) (string, error) {
var (
ok bool
url string
)

if url, ok = content["url"].(string); !ok {
return "", fmt.Errorf("url isn't a %T", url)
}
url = strings.Replace(url, "mxc://", b.GetString("Server")+"/_matrix/media/v1/download/", -1)

return url, nil
}

// handleDownloadFile handles file download
func (b *Bmatrix) handleDownloadFile(rmsg *config.Message, content map[string]interface{}) error {
var (
Expand All @@ -566,10 +590,11 @@ func (b *Bmatrix) handleDownloadFile(rmsg *config.Message, content map[string]in
)

rmsg.Extra = make(map[string][]interface{})
if url, ok = content["url"].(string); !ok {
return fmt.Errorf("url isn't a %T", url)

url, err := b.getMessageFileUrl(content)
if err != nil {
return err
}
url = strings.Replace(url, "mxc://", b.GetString("Server")+"/_matrix/media/v1/download/", -1)

if info, ok = content["info"].(map[string]interface{}); !ok {
return fmt.Errorf("info isn't a %T", info)
Expand Down Expand Up @@ -601,7 +626,7 @@ func (b *Bmatrix) handleDownloadFile(rmsg *config.Message, content map[string]in
}

// check if the size is ok
err := helper.HandleDownloadSize(b.Log, rmsg, name, int64(size), b.General)
err = helper.HandleDownloadSize(b.Log, rmsg, name, int64(size), b.General)
if err != nil {
return err
}
Expand Down
5 changes: 5 additions & 0 deletions matterbridge.toml.sample
Original file line number Diff line number Diff line change
Expand Up @@ -1329,6 +1329,11 @@ StripNick=false
#OPTIONAL (default false)
ShowTopicChange=false

#Enable to send a URL rather than a file
#The default behavior is to download and send/upload the file.
#OPTIONAL (default false)
#SendUrlNotFile=true

###################################################################
#steam section
###################################################################
Expand Down