diff options
| -rw-r--r-- | internal/ap/extract.go | 13 | ||||
| -rw-r--r-- | internal/ap/extractattachments_test.go | 39 | ||||
| -rw-r--r-- | internal/ap/interfaces.go | 1 | 
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 >smodel.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  }  | 
