summaryrefslogtreecommitdiff
path: root/internal/ap
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2023-10-26 11:59:10 +0200
committerLibravatar GitHub <noreply@github.com>2023-10-26 11:59:10 +0200
commit0b978f2c56c47ddbe0f611720d3605236f4e57d9 (patch)
treed5deece25e2aedebcacdff56900077688c6e6f7e /internal/ap
parent[chore]: Bump google.golang.org/grpc from 1.58.2 to 1.58.3 (#2301) (diff)
downloadgotosocial-0b978f2c56c47ddbe0f611720d3605236f4e57d9.tar.xz
[bugfix] Extract description as `summary` first, fall back to `name` (#2303)
Diffstat (limited to 'internal/ap')
-rw-r--r--internal/ap/extract.go13
-rw-r--r--internal/ap/extractattachments_test.go39
-rw-r--r--internal/ap/interfaces.go1
3 files changed, 52 insertions, 1 deletions
diff --git a/internal/ap/extract.go b/internal/ap/extract.go
index 41cc5dcbc..6d224e9a8 100644
--- a/internal/ap/extract.go
+++ b/internal/ap/extract.go
@@ -600,12 +600,23 @@ func ExtractAttachment(i Attachmentable) (*gtsmodel.MediaAttachment, error) {
return &gtsmodel.MediaAttachment{
RemoteURL: remoteURL.String(),
- Description: ExtractName(i),
+ Description: ExtractDescription(i),
Blurhash: ExtractBlurhash(i),
Processing: gtsmodel.ProcessingStatusReceived,
}, nil
}
+// ExtractDescription extracts the image description
+// of an attachmentable, if present. Will try the
+// 'summary' prop first, then fall back to 'name'.
+func ExtractDescription(i Attachmentable) string {
+ if summary := ExtractSummary(i); summary != "" {
+ return summary
+ }
+
+ return ExtractName(i)
+}
+
// ExtractBlurhash extracts the blurhash string value
// from the given WithBlurhash interface, or returns
// an empty string if nothing is found.
diff --git a/internal/ap/extractattachments_test.go b/internal/ap/extractattachments_test.go
index 3d5fc7e89..1ec6e53c8 100644
--- a/internal/ap/extractattachments_test.go
+++ b/internal/ap/extractattachments_test.go
@@ -18,6 +18,8 @@
package ap_test
import (
+ "context"
+ "encoding/json"
"testing"
"github.com/stretchr/testify/suite"
@@ -38,6 +40,43 @@ func (suite *ExtractAttachmentsTestSuite) TestExtractAttachmentMissingURL() {
suite.Nil(attachment)
}
+func (suite *ExtractAttachmentsTestSuite) TestExtractDescription() {
+ // Note: normally a single attachment on a Note or
+ // similar wouldn't have the `@context` field set,
+ // but we set it here because we're parsing it as
+ // a discrete/standalone AP Object for this test.
+ attachmentableJSON := `{
+ "@context": "https://www.w3.org/ns/activitystreams",
+ "mediaType": "image/jpeg",
+ "name": "z64KTcw2h2bZ8s67k2.jpg",
+ "summary": "A very large panel that is entirely twist switches",
+ "type": "Document",
+ "url": "https://example.org/d/XzKw4M2Sc1pBxj3hY4.jpg"
+}`
+
+ raw := make(map[string]interface{})
+ if err := json.Unmarshal([]byte(attachmentableJSON), &raw); err != nil {
+ suite.FailNow(err.Error())
+ }
+
+ t, err := streams.ToType(context.Background(), raw)
+ if err != nil {
+ suite.FailNow(err.Error())
+ }
+
+ attachmentable, ok := t.(ap.Attachmentable)
+ if !ok {
+ suite.FailNow("type was not Attachmentable")
+ }
+
+ attachment, err := ap.ExtractAttachment(attachmentable)
+ if err != nil {
+ suite.FailNow(err.Error())
+ }
+
+ suite.Equal("A very large panel that is entirely twist switches", attachment.Description)
+}
+
func TestExtractAttachmentsTestSuite(t *testing.T) {
suite.Run(t, &ExtractAttachmentsTestSuite{})
}
diff --git a/internal/ap/interfaces.go b/internal/ap/interfaces.go
index 9e606db62..6ba3c3735 100644
--- a/internal/ap/interfaces.go
+++ b/internal/ap/interfaces.go
@@ -164,6 +164,7 @@ type Attachmentable interface {
WithMediaType
WithURL
WithName
+ WithSummary
WithBlurhash
}