diff options
| -rw-r--r-- | internal/cleaner/emoji.go | 5 | ||||
| -rw-r--r-- | internal/gtsmodel/account.go | 15 | ||||
| -rw-r--r-- | internal/gtsmodel/emoji.go | 3 | ||||
| -rw-r--r-- | internal/typeutils/internaltofrontend.go | 20 | 
4 files changed, 32 insertions, 11 deletions
diff --git a/internal/cleaner/emoji.go b/internal/cleaner/emoji.go index 6cf194e40..05588ccb2 100644 --- a/internal/cleaner/emoji.go +++ b/internal/cleaner/emoji.go @@ -104,13 +104,14 @@ func (e *Emoji) UncacheRemote(ctx context.Context, olderThan time.Time) (int, er  			return total, gtserror.Newf("error getting remote emoji: %w", err)  		} -		// If no emojis / same group is returned, we reached the end. +		// If no emojis / same group is +		// returned, we reached the end.  		if len(emojis) == 0 ||  			olderThan.Equal(emojis[len(emojis)-1].CreatedAt) {  			break  		} -		// Use last created-at as the next 'olderThan' value. +		// Use last createdAt as next 'olderThan' value.  		olderThan = emojis[len(emojis)-1].CreatedAt  		for _, emoji := range emojis { diff --git a/internal/gtsmodel/account.go b/internal/gtsmodel/account.go index 79a35e561..bb07b8b16 100644 --- a/internal/gtsmodel/account.go +++ b/internal/gtsmodel/account.go @@ -31,7 +31,8 @@ import (  	"github.com/superseriousbusiness/gotosocial/internal/log"  ) -// Account represents either a local or a remote fediverse account, gotosocial or otherwise (mastodon, pleroma, etc). +// Account represents either a local or a remote fediverse +// account, gotosocial or otherwise (mastodon, pleroma, etc).  type Account struct {  	ID                      string           `bun:"type:CHAR(26),pk,nullzero,notnull,unique"`                    // id of this item in the database  	CreatedAt               time.Time        `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"` // when was item created. @@ -83,9 +84,19 @@ type Account struct {  	Stats                   *AccountStats    `bun:"-"`                                                           // gtsmodel.AccountStats for this account.  } +// UsernameDomain returns account @username@domain (missing domain if local). +func (a *Account) UsernameDomain() string { +	if a.IsLocal() { +		return "@" + a.Username +	} +	return "@" + a.Username + "@" + a.Domain +} +  // IsLocal returns whether account is a local user account.  func (a *Account) IsLocal() bool { -	return a.Domain == "" || a.Domain == config.GetHost() || a.Domain == config.GetAccountDomain() +	return a.Domain == "" || +		a.Domain == config.GetHost() || +		a.Domain == config.GetAccountDomain()  }  // IsRemote returns whether account is a remote user account. diff --git a/internal/gtsmodel/emoji.go b/internal/gtsmodel/emoji.go index 7bf52586c..89cb551f1 100644 --- a/internal/gtsmodel/emoji.go +++ b/internal/gtsmodel/emoji.go @@ -19,7 +19,8 @@ package gtsmodel  import "time" -// Emoji represents a custom emoji that's been uploaded through the admin UI or downloaded from a remote instance. +// Emoji represents a custom emoji that's been uploaded +// through the admin UI or downloaded from a remote instance.  type Emoji struct {  	ID                     string         `bun:"type:CHAR(26),pk,nullzero,notnull,unique"`                    // id of this item in the database  	CreatedAt              time.Time      `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"` // when was item created diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index 6739d0540..d9c8748f5 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -2641,28 +2641,36 @@ func (c *Converter) FilterStatusToAPIFilterStatus(ctx context.Context, filterSta  func (c *Converter) convertEmojisToAPIEmojis(ctx context.Context, emojis []*gtsmodel.Emoji, emojiIDs []string) ([]apimodel.Emoji, error) {  	var errs gtserror.MultiError +	// GTS model attachments were not populated  	if len(emojis) == 0 && len(emojiIDs) > 0 { -		// GTS model attachments were not populated -  		var err error  		// Fetch GTS models for emoji IDs  		emojis, err = c.state.DB.GetEmojisByIDs(ctx, emojiIDs)  		if err != nil { -			errs.Appendf("error fetching emojis from database: %w", err) +			return nil, gtserror.Newf("db error fetching emojis: %w", err)  		}  	} -	// Preallocate expected frontend slice +	// Preallocate expected frontend slice of emojis.  	apiEmojis := make([]apimodel.Emoji, 0, len(emojis)) - -	// Convert GTS models to frontend models  	for _, emoji := range emojis { + +		// Skip adding emojis that are +		// uncached, the empty URLs can +		// cause issues with some clients. +		if !*emoji.Cached { +			continue +		} + +		// Convert each to a frontend API model emoji.  		apiEmoji, err := c.EmojiToAPIEmoji(ctx, emoji)  		if err != nil {  			errs.Appendf("error converting emoji %s to api emoji: %w", emoji.ID, err)  			continue  		} + +		// Append converted emoji to return slice.  		apiEmojis = append(apiEmojis, apiEmoji)  	}  | 
