From a9a267bc0d1e64b6eaf83f2e17ce3f11296d2638 Mon Sep 17 00:00:00 2001 From: Toni Spets Date: Tue, 27 May 2025 14:39:47 +0300 Subject: [PATCH] directmedia: handle webpage previews as well --- pkg/connector/directdownload.go | 14 ++++++++++++++ pkg/connector/tomatrix.go | 13 ++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/pkg/connector/directdownload.go b/pkg/connector/directdownload.go index d359963e..a4063ef7 100644 --- a/pkg/connector/directdownload.go +++ b/pkg/connector/directdownload.go @@ -158,6 +158,20 @@ func (tc *TelegramConnector) Download(ctx context.Context, mediaID networkid.Med Bool("is_sticker", isSticker). Msg("downloading photo") readyTransferer = transferer.WithDocument(msgMedia.Document, info.Thumbnail) + case *tg.MessageMediaWebPage: + webpage, ok := msgMedia.Webpage.(*tg.WebPage) + if !ok { + return nil, fmt.Errorf("not a *tg.WebPage: %T", msgMedia.Webpage) + } + + if pc, ok := webpage.GetPhoto(); ok && pc.TypeID() == tg.PhotoTypeID { + log.Debug(). + Int64("photo_id", pc.GetID()). + Msg("downloading photo") + readyTransferer = transferer.WithPhoto(pc) + } else { + return nil, fmt.Errorf("not a photo: %T", pc.TypeName()) + } default: return nil, fmt.Errorf("unhandled media type %T", msgMedia) } diff --git a/pkg/connector/tomatrix.go b/pkg/connector/tomatrix.go index 750d65b9..fd046669 100644 --- a/pkg/connector/tomatrix.go +++ b/pkg/connector/tomatrix.go @@ -211,7 +211,7 @@ func (c *TelegramClient) convertToMatrix(ctx context.Context, portal *bridgev2.P if media, ok := msg.GetMedia(); ok && media.TypeID() == tg.MessageMediaWebPageTypeID { webpageCtx, webpageCtxCancel := context.WithTimeout(ctx, time.Second*5) defer webpageCtxCancel() - preview, err := c.webpageToBeeperLinkPreview(webpageCtx, intent, media) + preview, err := c.webpageToBeeperLinkPreview(webpageCtx, portal, intent, msg, media) if err != nil { log.Err(err).Msg("error converting webpage to link preview") } else if preview != nil { @@ -304,7 +304,7 @@ func (t *TelegramClient) parseBodyAndHTML(ctx context.Context, message string, e return telegramfmt.Parse(ctx, message, entities, t.telegramFmtParams.WithCustomEmojis(customEmojis)) } -func (c *TelegramClient) webpageToBeeperLinkPreview(ctx context.Context, intent bridgev2.MatrixAPI, msgMedia tg.MessageMediaClass) (preview *event.BeeperLinkPreview, err error) { +func (c *TelegramClient) webpageToBeeperLinkPreview(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, msg *tg.Message, msgMedia tg.MessageMediaClass) (preview *event.BeeperLinkPreview, err error) { webpage, ok := msgMedia.(*tg.MessageMediaWebPage).Webpage.(*tg.WebPage) if !ok { return nil, nil @@ -320,9 +320,12 @@ func (c *TelegramClient) webpageToBeeperLinkPreview(ctx context.Context, intent if pc, ok := webpage.GetPhoto(); ok && pc.TypeID() == tg.PhotoTypeID { var fileInfo *event.FileInfo - preview.ImageURL, preview.ImageEncryption, fileInfo, err = media.NewTransferer(c.client.API()). - WithPhoto(pc). - Transfer(ctx, c.main.Store, intent) + transferer := media.NewTransferer(c.client.API()).WithPhoto(pc) + if c.main.useDirectMedia { + preview.ImageURL, fileInfo, err = transferer.DirectDownloadURL(ctx, c.telegramUserID, portal, msg.ID, true, 0) + } else { + preview.ImageURL, preview.ImageEncryption, fileInfo, err = transferer.Transfer(ctx, c.main.Store, intent) + } if err != nil { return nil, err }