summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/cleaner/emoji.go5
-rw-r--r--internal/gtsmodel/account.go15
-rw-r--r--internal/gtsmodel/emoji.go3
-rw-r--r--internal/typeutils/internaltofrontend.go20
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)
}