media: default to JPEG MIME-type for direct-downloaded images

Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
Sumner Evans
2024-09-27 16:14:28 -06:00
parent 23bb0febe9
commit e1a56778f5
2 changed files with 24 additions and 9 deletions
+21 -9
View File
@@ -93,34 +93,41 @@ func (tc *TelegramConnector) Download(ctx context.Context, mediaID networkid.Med
}
var msgMedia tg.MessageMediaClass
var found bool
for _, message := range messages.GetMessages() {
if msg, ok := message.(*tg.Message); ok && msg.ID == int(info.MessageID) {
msgMedia = msg.Media
found = true
break
}
}
if !found {
if len(messages.GetMessages()) != 1 {
return nil, fmt.Errorf("wrong number of messages retrieved %d", len(messages.GetMessages()))
} else if msg, ok := messages.GetMessages()[0].(*tg.Message); !ok {
return nil, fmt.Errorf("message was of the wrong type %s", messages.GetMessages()[0].TypeName())
} else if msg.ID != int(info.MessageID) {
return nil, fmt.Errorf("no media found with ID %d", info.MessageID)
} else {
msgMedia = msg.Media
}
transferer := media.NewTransferer(client.client.API())
var readyTransferer *media.ReadyTransferer
switch msgMedia := msgMedia.(type) {
case *tg.MessageMediaPhoto:
log.Debug().
Int64("photo_id", msgMedia.Photo.GetID()).
Msg("downloading photo")
readyTransferer = transferer.WithPhoto(msgMedia.Photo)
case *tg.MessageMediaDocument:
document, ok := msgMedia.Document.(*tg.Document)
if !ok {
return nil, fmt.Errorf("unknown document type %T", msgMedia.Document)
}
var isSticker bool
for _, attr := range document.GetAttributes() {
if attr.TypeID() == tg.DocumentAttributeStickerTypeID {
transferer = transferer.WithStickerConfig(tc.Config.AnimatedSticker)
isSticker = true
}
}
log.Debug().
Int64("document_id", msgMedia.Document.GetID()).
Bool("is_sticker", isSticker).
Msg("downloading photo")
readyTransferer = transferer.WithDocument(msgMedia.Document, info.Thumbnail)
default:
return nil, fmt.Errorf("unhandled media type %T", msgMedia)
@@ -132,6 +139,11 @@ func (tc *TelegramConnector) Download(ctx context.Context, mediaID networkid.Med
return nil, err
}
log.Debug().
Str("mime_type", fileInfo.MimeType).
Int("size", fileInfo.Size).
Msg("Downloaded media successfully")
return &mediaproxy.GetMediaResponseData{
Reader: io.NopCloser(bytes.NewBuffer(data)),
ContentType: fileInfo.MimeType,
+3
View File
@@ -362,5 +362,8 @@ func (t *ReadyTransferer) DirectDownloadURL(ctx context.Context, loggedInUserID
return "", nil, err
}
mxc, err := portal.Bridge.Matrix.GenerateContentURI(ctx, mediaID)
if t.inner.fileInfo.MimeType == "" {
t.inner.fileInfo.MimeType = "image/jpeg"
}
return mxc, &t.inner.fileInfo, err
}