mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 13:32:25 -05:00 
			
		
		
		
	[bugfix] Extract description as summary first, fall back to name (#2303)
		
	This commit is contained in:
		
					parent
					
						
							
								03732aca3b
							
						
					
				
			
			
				commit
				
					
						0b978f2c56
					
				
			
		
					 3 changed files with 52 additions and 1 deletions
				
			
		|  | @ -600,12 +600,23 @@ func ExtractAttachment(i Attachmentable) (*gtsmodel.MediaAttachment, error) { | ||||||
| 
 | 
 | ||||||
| 	return >smodel.MediaAttachment{ | 	return >smodel.MediaAttachment{ | ||||||
| 		RemoteURL:   remoteURL.String(), | 		RemoteURL:   remoteURL.String(), | ||||||
| 		Description: ExtractName(i), | 		Description: ExtractDescription(i), | ||||||
| 		Blurhash:    ExtractBlurhash(i), | 		Blurhash:    ExtractBlurhash(i), | ||||||
| 		Processing:  gtsmodel.ProcessingStatusReceived, | 		Processing:  gtsmodel.ProcessingStatusReceived, | ||||||
| 	}, nil | 	}, 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 | // ExtractBlurhash extracts the blurhash string value | ||||||
| // from the given WithBlurhash interface, or returns | // from the given WithBlurhash interface, or returns | ||||||
| // an empty string if nothing is found. | // an empty string if nothing is found. | ||||||
|  |  | ||||||
|  | @ -18,6 +18,8 @@ | ||||||
| package ap_test | package ap_test | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"encoding/json" | ||||||
| 	"testing" | 	"testing" | ||||||
| 
 | 
 | ||||||
| 	"github.com/stretchr/testify/suite" | 	"github.com/stretchr/testify/suite" | ||||||
|  | @ -38,6 +40,43 @@ func (suite *ExtractAttachmentsTestSuite) TestExtractAttachmentMissingURL() { | ||||||
| 	suite.Nil(attachment) | 	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) { | func TestExtractAttachmentsTestSuite(t *testing.T) { | ||||||
| 	suite.Run(t, &ExtractAttachmentsTestSuite{}) | 	suite.Run(t, &ExtractAttachmentsTestSuite{}) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -164,6 +164,7 @@ type Attachmentable interface { | ||||||
| 	WithMediaType | 	WithMediaType | ||||||
| 	WithURL | 	WithURL | ||||||
| 	WithName | 	WithName | ||||||
|  | 	WithSummary | ||||||
| 	WithBlurhash | 	WithBlurhash | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue