diff options
| author | 2024-07-21 14:22:08 +0200 | |
|---|---|---|
| committer | 2024-07-21 14:22:08 +0200 | |
| commit | 027a93facc73b78e3c3747ab796f4a14b1b4936f (patch) | |
| tree | 51838cd9fdf607ad46fdfa77a9424fdd8f5cd98d /internal/api | |
| parent | [bugfix] update common get target account / status doing refresh async (#3124) (diff) | |
| download | gotosocial-027a93facc73b78e3c3747ab796f4a14b1b4936f.tar.xz | |
[feature/frontend] Respect `prefers-reduced-motion` for avatars, headers, and emojis (#3118)
* [feature/frontend] Respect `prefers-reduced-motion` for avatars, headers, and emojis
* go fmt
* fix tests
* use static version of instance thumbnail when appropriate
* use prefers-reduced-motion
* simplify account conversion a bit
* fix c&p error
Diffstat (limited to 'internal/api')
| -rw-r--r-- | internal/api/client/instance/instancepatch_test.go | 4 | ||||
| -rw-r--r-- | internal/api/model/account.go | 24 | ||||
| -rw-r--r-- | internal/api/model/attachment.go | 4 | ||||
| -rw-r--r-- | internal/api/model/instancev1.go | 6 | ||||
| -rw-r--r-- | internal/api/model/instancev2.go | 7 | ||||
| -rw-r--r-- | internal/api/model/status.go | 3 | ||||
| -rw-r--r-- | internal/api/util/opengraph.go | 4 | ||||
| -rw-r--r-- | internal/api/util/opengraph_test.go | 12 | 
8 files changed, 51 insertions, 13 deletions
diff --git a/internal/api/client/instance/instancepatch_test.go b/internal/api/client/instance/instancepatch_test.go index ba0d026f3..e68508fc2 100644 --- a/internal/api/client/instance/instancepatch_test.go +++ b/internal/api/client/instance/instancepatch_test.go @@ -762,6 +762,8 @@ func (suite *InstancePatchTestSuite) TestInstancePatch8() {    },    "thumbnail": "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/attachment/original/`+instanceAccount.AvatarMediaAttachment.ID+`.gif",`+`    "thumbnail_type": "image/gif", +  "thumbnail_static": "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/attachment/small/`+instanceAccount.AvatarMediaAttachment.ID+`.webp",`+` +  "thumbnail_static_type": "image/webp",    "thumbnail_description": "A bouncing little green peglin.",    "contact_account": {      "id": "01F8MH17FWEB39HZJ76B6VXSKF", @@ -818,6 +820,8 @@ func (suite *InstancePatchTestSuite) TestInstancePatch8() {  	suite.Equal(`{    "url": "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/attachment/original/`+instanceAccount.AvatarMediaAttachment.ID+`.gif",`+`    "thumbnail_type": "image/gif", +  "static_url": "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/attachment/small/`+instanceAccount.AvatarMediaAttachment.ID+`.webp",`+` +  "thumbnail_static_type": "image/webp",    "thumbnail_description": "A bouncing little green peglin.",    "blurhash": "LE9kG#M}4YtO%dRkWEt5Dmoxx?WC"  }`, string(instanceV2ThumbnailJson)) diff --git a/internal/api/model/account.go b/internal/api/model/account.go index cf39dd08e..c5b629db0 100644 --- a/internal/api/model/account.go +++ b/internal/api/model/account.go @@ -110,17 +110,27 @@ type Account struct {  	// If set, indicates that this account is currently inactive, and has migrated to the given account.  	// Key/value omitted for accounts that haven't moved, and for suspended accounts.  	Moved *Account `json:"moved,omitempty"` +} -	// Additional fields not exposed via JSON -	// (used only internally for templating etc). +// WebAccount is like Account, but with +// additional fields not exposed via JSON; +// used only internally for templating etc. +// +// swagger:ignore +type WebAccount struct { +	*Account  	// Proper attachment model for the avatar.  	// -	// Only set if this model was converted via -	// AccountToWebAccount, AND this account had -	// an avatar set (and not just the default -	// "blank" avatar image.) -	AvatarAttachment *Attachment `json:"-"` +	// Only set if this account had an avatar set +	// (and not just the default "blank" image.) +	AvatarAttachment *WebAttachment `json:"-"` + +	// Proper attachment model for the header. +	// +	// Only set if this account had a header set +	// (and not just the default "blank" image.) +	HeaderAttachment *WebAttachment `json:"-"`  }  // MutedAccount extends Account with a field used only by the muted user list. diff --git a/internal/api/model/attachment.go b/internal/api/model/attachment.go index d0b0c81e5..21523a58e 100644 --- a/internal/api/model/attachment.go +++ b/internal/api/model/attachment.go @@ -107,6 +107,10 @@ type WebAttachment struct {  	// MIME type of  	// the attachment.  	MIMEType string + +	// MIME type of +	// the thumbnail. +	PreviewMIMEType string  }  // MediaMeta models media metadata. diff --git a/internal/api/model/instancev1.go b/internal/api/model/instancev1.go index beb4f430d..efa6d6faa 100644 --- a/internal/api/model/instancev1.go +++ b/internal/api/model/instancev1.go @@ -85,6 +85,12 @@ type InstanceV1 struct {  	// MIME type of the instance thumbnail.  	// example: image/png  	ThumbnailType string `json:"thumbnail_type,omitempty"` +	// URL of the static instance avatar/banner image. +	// example: https://example.org/files/instance/static/thumbnail.webp +	ThumbnailStatic string `json:"thumbnail_static,omitempty"` +	// MIME type of the static instance thumbnail. +	// example: image/webp +	ThumbnailStaticType string `json:"thumbnail_static_type,omitempty"`  	// Description of the instance thumbnail.  	// example: picture of a cute lil' friendly sloth  	ThumbnailDescription string `json:"thumbnail_description,omitempty"` diff --git a/internal/api/model/instancev2.go b/internal/api/model/instancev2.go index fce801117..8d6873497 100644 --- a/internal/api/model/instancev2.go +++ b/internal/api/model/instancev2.go @@ -102,6 +102,13 @@ type InstanceV2Thumbnail struct {  	// Key/value not set if thumbnail image type unknown.  	// example: image/png  	Type string `json:"thumbnail_type,omitempty"` +	// StaticURL version of the thumbnail image. +	// example: https://example.org/fileserver/01BPSX2MKCRVMD4YN4D71G9CP5/attachment/static/01H88X0KQ2DFYYDSWYP93VDJZA.webp +	StaticURL string `json:"static_url,omitempty"` +	// MIME type of the instance thumbnail. +	// Key/value not set if thumbnail image type unknown. +	// example: image/png +	StaticType string `json:"thumbnail_static_type,omitempty"`  	// Description of the instance thumbnail.  	// Key/value not set if no description available.  	// example: picture of a cute lil' friendly sloth diff --git a/internal/api/model/status.go b/internal/api/model/status.go index 7358916ab..b3ac746d7 100644 --- a/internal/api/model/status.go +++ b/internal/api/model/status.go @@ -113,6 +113,9 @@ type Status struct {  type WebStatus struct {  	*Status +	// Override API account with web account. +	Account *WebAccount `json:"account"` +  	// Web version of media  	// attached to this status.  	MediaAttachments []*WebAttachment `json:"media_attachments"` diff --git a/internal/api/util/opengraph.go b/internal/api/util/opengraph.go index 062151836..094c80021 100644 --- a/internal/api/util/opengraph.go +++ b/internal/api/util/opengraph.go @@ -84,7 +84,7 @@ func OGBase(instance *apimodel.InstanceV1) *OGMeta {  // WithAccount uses the given account to build an ogMeta  // struct specific to that account. It's suitable for serving  // at account profile pages. -func (og *OGMeta) WithAccount(account *apimodel.Account) *OGMeta { +func (og *OGMeta) WithAccount(account *apimodel.WebAccount) *OGMeta {  	og.Title = AccountTitle(account, og.SiteName)  	og.Type = "profile"  	og.URL = account.URL @@ -148,7 +148,7 @@ func (og *OGMeta) WithStatus(status *apimodel.WebStatus) *OGMeta {  }  // AccountTitle parses a page title from account and accountDomain -func AccountTitle(account *apimodel.Account, accountDomain string) string { +func AccountTitle(account *apimodel.WebAccount, accountDomain string) string {  	user := "@" + account.Acct + "@" + accountDomain  	if len(account.DisplayName) == 0 { diff --git a/internal/api/util/opengraph_test.go b/internal/api/util/opengraph_test.go index 2ecd6a740..4e94d78ef 100644 --- a/internal/api/util/opengraph_test.go +++ b/internal/api/util/opengraph_test.go @@ -51,13 +51,15 @@ func (suite *OpenGraphTestSuite) TestWithAccountWithNote() {  		Languages:     []string{"en"},  	}) -	accountMeta := baseMeta.WithAccount(&apimodel.Account{ +	acct := &apimodel.Account{  		Acct:        "example_account",  		DisplayName: "example person!!",  		URL:         "https://example.org/@example_account",  		Note:        "<p>This is my profile, read it and weep! Weep then!</p>",  		Username:    "example_account", -	}) +	} + +	accountMeta := baseMeta.WithAccount(&apimodel.WebAccount{Account: acct})  	suite.EqualValues(OGMeta{  		Title:                "example person!!, @example_account@example.org", @@ -84,13 +86,15 @@ func (suite *OpenGraphTestSuite) TestWithAccountNoNote() {  		Languages:     []string{"en"},  	}) -	accountMeta := baseMeta.WithAccount(&apimodel.Account{ +	acct := &apimodel.Account{  		Acct:        "example_account",  		DisplayName: "example person!!",  		URL:         "https://example.org/@example_account",  		Note:        "", // <- empty  		Username:    "example_account", -	}) +	} + +	accountMeta := baseMeta.WithAccount(&apimodel.WebAccount{Account: acct})  	suite.EqualValues(OGMeta{  		Title:                "example person!!, @example_account@example.org",  | 
