Skip to content

Commit f79ca42

Browse files
committed
Add option to use async media uploads
matrix-org/matrix-spec-proposals#2246
1 parent 34954fc commit f79ca42

File tree

6 files changed

+26
-8
lines changed

6 files changed

+26
-8
lines changed

config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ type Config struct {
3434
Asmux bool `yaml:"asmux"`
3535
StatusEndpoint string `yaml:"status_endpoint"`
3636
MessageSendCheckpointEndpoint string `yaml:"message_send_checkpoint_endpoint"`
37+
AsyncMedia bool `yaml:"async_media"`
3738
} `yaml:"homeserver"`
3839

3940
AppService struct {

config/upgrade.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ func (helper *UpgradeHelper) doUpgrade() {
3333
helper.Copy(Bool, "homeserver", "asmux")
3434
helper.Copy(Str|Null, "homeserver", "status_endpoint")
3535
helper.Copy(Str|Null, "homeserver", "message_send_checkpoint_endpoint")
36+
helper.Copy(Bool, "homeserver", "async_media")
3637

3738
helper.Copy(Str, "appservice", "address")
3839
helper.Copy(Str, "appservice", "hostname")

example-config.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ homeserver:
1313
status_endpoint: null
1414
# Endpoint for reporting per-message status.
1515
message_send_checkpoint_endpoint: null
16+
# Does the homeserver support https://github.com/matrix-org/matrix-spec-proposals/pull/2246?
17+
async_media: false
1618

1719
# Application service host/registration related details.
1820
# Changing these values requires regeneration of the registration.

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ require (
1717
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
1818
maunium.net/go/mauflag v1.0.0
1919
maunium.net/go/maulogger/v2 v2.3.2
20-
maunium.net/go/mautrix v0.10.13-0.20220317230932-15d85fe4d3cc
20+
maunium.net/go/mautrix v0.10.13-0.20220321175701-3b9911029134
2121
)
2222

2323
require (

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,5 +197,5 @@ maunium.net/go/mauflag v1.0.0 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M=
197197
maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA=
198198
maunium.net/go/maulogger/v2 v2.3.2 h1:1XmIYmMd3PoQfp9J+PaHhpt80zpfmMqaShzUTC7FwY0=
199199
maunium.net/go/maulogger/v2 v2.3.2/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A=
200-
maunium.net/go/mautrix v0.10.13-0.20220317230932-15d85fe4d3cc h1:7NNOnyCL03RWifzCko6QhVzn+gqS8DKRRtqCVBIKj7g=
201-
maunium.net/go/mautrix v0.10.13-0.20220317230932-15d85fe4d3cc/go.mod h1:WqW8mruBue+1YrL/f04Ni/4R5yfLcgO8BQhUJzl7sps=
200+
maunium.net/go/mautrix v0.10.13-0.20220321175701-3b9911029134 h1:EYo8hg0p7XL8nXV18dcsSc0f/0NKFQF/+D/Cll1q0rU=
201+
maunium.net/go/mautrix v0.10.13-0.20220321175701-3b9911029134/go.mod h1:WqW8mruBue+1YrL/f04Ni/4R5yfLcgO8BQhUJzl7sps=

portal.go

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2108,16 +2108,30 @@ func (portal *Portal) convertMediaMessageContent(intent *appservice.IntentAPI, m
21082108
func (portal *Portal) uploadMedia(intent *appservice.IntentAPI, data []byte, content *event.MessageEventContent) error {
21092109
data, uploadMimeType, file := portal.encryptFile(data, content.Info.MimeType)
21102110

2111-
uploaded, err := intent.UploadBytes(data, uploadMimeType)
2112-
if err != nil {
2113-
return err
2111+
req := mautrix.ReqUploadMedia{
2112+
ContentBytes: data,
2113+
ContentType: uploadMimeType,
2114+
}
2115+
var mxc id.ContentURI
2116+
if portal.bridge.Config.Homeserver.AsyncMedia {
2117+
uploaded, err := intent.UnstableUploadAsync(req)
2118+
if err != nil {
2119+
return err
2120+
}
2121+
mxc = uploaded.ContentURI
2122+
} else {
2123+
uploaded, err := intent.UploadMedia(req)
2124+
if err != nil {
2125+
return err
2126+
}
2127+
mxc = uploaded.ContentURI
21142128
}
21152129

21162130
if file != nil {
2117-
file.URL = uploaded.ContentURI.CUString()
2131+
file.URL = mxc.CUString()
21182132
content.File = file
21192133
} else {
2120-
content.URL = uploaded.ContentURI.CUString()
2134+
content.URL = mxc.CUString()
21212135
}
21222136

21232137
content.Info.Size = len(data)

0 commit comments

Comments
 (0)