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 msgMedia tg.MessageMediaClass
var found bool if len(messages.GetMessages()) != 1 {
for _, message := range messages.GetMessages() { return nil, fmt.Errorf("wrong number of messages retrieved %d", len(messages.GetMessages()))
if msg, ok := message.(*tg.Message); ok && msg.ID == int(info.MessageID) { } else if msg, ok := messages.GetMessages()[0].(*tg.Message); !ok {
msgMedia = msg.Media return nil, fmt.Errorf("message was of the wrong type %s", messages.GetMessages()[0].TypeName())
found = true } else if msg.ID != int(info.MessageID) {
break
}
}
if !found {
return nil, fmt.Errorf("no media found with ID %d", info.MessageID) return nil, fmt.Errorf("no media found with ID %d", info.MessageID)
} else {
msgMedia = msg.Media
} }
transferer := media.NewTransferer(client.client.API()) transferer := media.NewTransferer(client.client.API())
var readyTransferer *media.ReadyTransferer var readyTransferer *media.ReadyTransferer
switch msgMedia := msgMedia.(type) { switch msgMedia := msgMedia.(type) {
case *tg.MessageMediaPhoto: case *tg.MessageMediaPhoto:
log.Debug().
Int64("photo_id", msgMedia.Photo.GetID()).
Msg("downloading photo")
readyTransferer = transferer.WithPhoto(msgMedia.Photo) readyTransferer = transferer.WithPhoto(msgMedia.Photo)
case *tg.MessageMediaDocument: case *tg.MessageMediaDocument:
document, ok := msgMedia.Document.(*tg.Document) document, ok := msgMedia.Document.(*tg.Document)
if !ok { if !ok {
return nil, fmt.Errorf("unknown document type %T", msgMedia.Document) return nil, fmt.Errorf("unknown document type %T", msgMedia.Document)
} }
var isSticker bool
for _, attr := range document.GetAttributes() { for _, attr := range document.GetAttributes() {
if attr.TypeID() == tg.DocumentAttributeStickerTypeID { if attr.TypeID() == tg.DocumentAttributeStickerTypeID {
transferer = transferer.WithStickerConfig(tc.Config.AnimatedSticker) 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) readyTransferer = transferer.WithDocument(msgMedia.Document, info.Thumbnail)
default: default:
return nil, fmt.Errorf("unhandled media type %T", msgMedia) 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 return nil, err
} }
log.Debug().
Str("mime_type", fileInfo.MimeType).
Int("size", fileInfo.Size).
Msg("Downloaded media successfully")
return &mediaproxy.GetMediaResponseData{ return &mediaproxy.GetMediaResponseData{
Reader: io.NopCloser(bytes.NewBuffer(data)), Reader: io.NopCloser(bytes.NewBuffer(data)),
ContentType: fileInfo.MimeType, ContentType: fileInfo.MimeType,
+3
View File
@@ -362,5 +362,8 @@ func (t *ReadyTransferer) DirectDownloadURL(ctx context.Context, loggedInUserID
return "", nil, err return "", nil, err
} }
mxc, err := portal.Bridge.Matrix.GenerateContentURI(ctx, mediaID) 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 return mxc, &t.inner.fileInfo, err
} }