diff --git a/pkg/connector/media/transfer.go b/pkg/connector/media/transfer.go index a39f958f..335c90f2 100644 --- a/pkg/connector/media/transfer.go +++ b/pkg/connector/media/transfer.go @@ -135,6 +135,11 @@ func (t *Transferer) WithStickerConfig(cfg AnimatedStickerConfig) *Transferer { return t } +func (t *Transferer) WithMIMEType(mimeType string) *Transferer { + t.fileInfo.MimeType = mimeType + return t +} + func (t *Transferer) WithThumbnail(uri id.ContentURIString, file *event.EncryptedFileInfo, info *event.FileInfo) *Transferer { t.fileInfo.ThumbnailURL = uri t.fileInfo.ThumbnailFile = file diff --git a/pkg/connector/tomatrix.go b/pkg/connector/tomatrix.go index 996d0eb0..b49a32e7 100644 --- a/pkg/connector/tomatrix.go +++ b/pkg/connector/tomatrix.go @@ -247,7 +247,7 @@ func (c *TelegramClient) convertMediaRequiringUpload(ctx context.Context, portal eventType := event.EventMessage var content event.MessageEventContent var telegramMediaID int64 - var isSticker, isVideoGif bool + var isSticker, isVideo, isVideoGif bool extra := map[string]any{} transferer := media.NewTransferer(c.client.API()).WithRoomID(portal.MXID) @@ -323,10 +323,13 @@ func (c *TelegramClient) convertMediaRequiringUpload(ctx context.Context, portal content.FileName = a.GetFileName() } case *tg.DocumentAttributeVideo: + isVideo = true content.MsgType = event.MsgVideo transferer = transferer.WithVideo(a) - extraInfo["fi.mau.telegram.round_message"] = true + if a.RoundMessage { + extraInfo["fi.mau.telegram.round_message"] = a.RoundMessage + } extraInfo["duration"] = int(a.Duration * 1000) case *tg.DocumentAttributeAudio: if content.MsgType != event.MsgVideo { @@ -348,14 +351,6 @@ func (c *TelegramClient) convertMediaRequiringUpload(ctx context.Context, portal transferer = transferer.WithImageSize(a) case *tg.DocumentAttributeSticker: isSticker = true - if c.main.Config.AnimatedSticker.Target == "webm" { - content.MsgType = event.MsgVideo - isVideoGif = true - extraInfo["fi.mau.telegram.animated_sticker"] = true - } else { - eventType = event.EventSticker - content.MsgType = "" - } if content.Body == "" { content.Body = a.Alt } else { @@ -382,10 +377,7 @@ func (c *TelegramClient) convertMediaRequiringUpload(ctx context.Context, portal } } - // Strip filename if it's a sticker - if isSticker { - content.FileName = "" - } else if content.FileName == "" { + if content.FileName == "" { if content.Body != "" { content.FileName = content.Body } else { @@ -393,6 +385,19 @@ func (c *TelegramClient) convertMediaRequiringUpload(ctx context.Context, portal } } + if isSticker { + if c.main.Config.AnimatedSticker.Target == "webm" || (isVideo && !c.main.Config.AnimatedSticker.ConvertFromWebm) { + isVideoGif = true + extraInfo["fi.mau.telegram.animated_sticker"] = true + transferer.WithMIMEType("video/webm") + } else { + eventType = event.EventSticker + // Strip filename and msgtype if it's an actual m.sticker + content.FileName = "" + content.MsgType = "" + } + } + if isVideoGif { extraInfo["fi.mau.gif"] = true extraInfo["fi.mau.loop"] = true