Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bugfix] Extract description as summary first, fall back to name #2303

Merged
merged 1 commit into from
Oct 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion internal/ap/extract.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
39 changes: 39 additions & 0 deletions internal/ap/extractattachments_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
package ap_test

import (
"context"
"encoding/json"
"testing"

"github.com/stretchr/testify/suite"
Expand All @@ -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{})
}
1 change: 1 addition & 0 deletions internal/ap/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ type Attachmentable interface {
WithMediaType
WithURL
WithName
WithSummary
WithBlurhash
}

Expand Down