Skip to content
Snippets Groups Projects
Commit 1ec5d0dd authored by Travis Ralston's avatar Travis Ralston
Browse files

Clean up some previewer code

parent 26bb5220
No related branches found
No related tags found
No related merge requests found
......@@ -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()
......
......@@ -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"))
......
......@@ -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
}
......
......@@ -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, " ")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment