diff --git a/url_previewing/calculated_previewer.go b/url_previewing/calculated_previewer.go index 0720c8c657539dee57a5a90e57e2a46335cde2bb..73365dd0484d6ae8111bbf2852f8fca60005ec96 100644 --- a/url_previewing/calculated_previewer.go +++ b/url_previewing/calculated_previewer.go @@ -2,16 +2,16 @@ package url_previewing import ( "github.com/prometheus/client_golang/prometheus" - "github.com/ryanuber/go-glob" "github.com/turt2live/matrix-media-repo/common" "github.com/turt2live/matrix-media-repo/common/rcontext" "github.com/turt2live/matrix-media-repo/metrics" + "github.com/turt2live/matrix-media-repo/thumbnailing" ) func GenerateCalculatedPreview(urlPayload *UrlPayload, languageHeader string, ctx rcontext.RequestContext) (Result, error) { r, filename, contentType, err := downloadRawContent(urlPayload, ctx.Config.UrlPreviews.FilePreviewTypes, languageHeader, ctx) if err != nil { - ctx.Log.Error("Error downloading content: ", err) + ctx.Log.Warn("Error downloading content: ", err) // Make sure the unsupported error gets passed through if err == ErrPreviewUnsupported { @@ -49,8 +49,10 @@ func GenerateCalculatedPreview(urlPayload *UrlPayload, languageHeader string, ct SiteName: "", // intentionally empty } - if glob.Glob("image/*", img.ContentType) { + if thumbnailing.IsSupported(img.ContentType) { result.Image = img + } else { + defer img.Data.Close() } metrics.UrlPreviewsGenerated.With(prometheus.Labels{"type": "calculated"}).Inc() diff --git a/url_previewing/http.go b/url_previewing/http.go index 553bd524044e62d2c497291a820702641e1292b6..c8ba4b26481b910679350cac7562148d39e8ac15 100644 --- a/url_previewing/http.go +++ b/url_previewing/http.go @@ -186,9 +186,8 @@ func downloadImage(urlPayload *UrlPayload, languageHeader string, ctx rcontext.R } image := &Image{ - ContentType: resp.Header.Get("Content-Type"), - Data: resp.Body, - ContentLength: resp.ContentLength, + ContentType: resp.Header.Get("Content-Type"), + Data: resp.Body, } _, params, err := mime.ParseMediaType(resp.Header.Get("Content-Disposition")) diff --git a/url_previewing/oembed_previewer.go b/url_previewing/oembed_previewer.go index 423e2be5d22597b532834b5fd96b5c9792611cbe..6e42499346f89537bc3de556c0b65fdd5ea03937 100644 --- a/url_previewing/oembed_previewer.go +++ b/url_previewing/oembed_previewer.go @@ -5,6 +5,7 @@ import ( "net/url" "os" "path" + "sync" "github.com/getsentry/sentry-go" @@ -18,25 +19,28 @@ import ( ) var oembedInstance *oembed.Oembed +var oembedLock = new(sync.Once) func getOembed() *oembed.Oembed { if oembedInstance != nil { return oembedInstance } - oembedInstance = oembed.NewOembed() + oembedLock.Do(func() { + oembedInstance = oembed.NewOembed() - data, err := os.ReadFile(path.Join(config.Runtime.AssetsPath, "providers.json")) - if err != nil { - sentry.CaptureException(err) - logrus.Fatal(err) - } + data, err := os.ReadFile(path.Join(config.Runtime.AssetsPath, "providers.json")) + if err != nil { + sentry.CaptureException(err) + logrus.Fatal(err) + } - err = oembedInstance.ParseProviders(bytes.NewReader(data)) - if err != nil { - sentry.CaptureException(err) - logrus.Fatal(err) - } + err = oembedInstance.ParseProviders(bytes.NewReader(data)) + if err != nil { + sentry.CaptureException(err) + logrus.Fatal(err) + } + }) return oembedInstance } diff --git a/url_previewing/util.go b/url_previewing/util.go index bcc3b11ca209987828b0945c2e820e25a8fca321..c364bcb575a751a8b10381462ef0e43963bfee63 100644 --- a/url_previewing/util.go +++ b/url_previewing/util.go @@ -5,11 +5,12 @@ import ( "strings" ) +var surroundingWhitespace = regexp.MustCompile(`^[\s\p{Zs}]+|[\s\p{Zs}]+$`) +var interiorWhitespace = regexp.MustCompile(`[\s\p{Zs}]{2,}`) +var newlines = regexp.MustCompile(`[\r\n]`) + func summarize(text string, maxWords int, maxLength int) string { // Normalize the whitespace to be something useful (crush it to one giant line) - surroundingWhitespace := regexp.MustCompile(`^[\s\p{Zs}]+|[\s\p{Zs}]+$`) - interiorWhitespace := regexp.MustCompile(`[\s\p{Zs}]{2,}`) - newlines := regexp.MustCompile(`[\r\n]`) text = surroundingWhitespace.ReplaceAllString(text, "") text = interiorWhitespace.ReplaceAllString(text, " ") text = newlines.ReplaceAllString(text, " ")