diff options
| -rw-r--r-- | internal/db/bundb/bundb.go | 2 | ||||
| -rw-r--r-- | internal/db/bundb/status.go | 58 | 
2 files changed, 50 insertions, 10 deletions
| diff --git a/internal/db/bundb/bundb.go b/internal/db/bundb/bundb.go index de6749ca4..44b0b1807 100644 --- a/internal/db/bundb/bundb.go +++ b/internal/db/bundb/bundb.go @@ -174,6 +174,8 @@ func NewBunDBService(ctx context.Context) (db.DB, error) {  	account.status = status  	admin.users = user  	status.accounts = account +	status.emojis = emoji +	status.mentions = mention  	timeline.status = status  	// Initialize db structs diff --git a/internal/db/bundb/status.go b/internal/db/bundb/status.go index b4ae40607..e01bb7bf2 100644 --- a/internal/db/bundb/status.go +++ b/internal/db/bundb/status.go @@ -36,6 +36,8 @@ type statusDB struct {  	conn     *DBConn  	cache    *result.Cache[*gtsmodel.Status]  	accounts *accountDB +	emojis   *emojiDB +	mentions *mentionDB  }  func (s *statusDB) init() { @@ -61,11 +63,6 @@ func (s *statusDB) newStatusQ(status interface{}) *bun.SelectQuery {  		Model(status).  		Relation("Attachments").  		Relation("Tags"). -		Relation("Mentions"). -		Relation("Emojis"). -		Relation("Account"). -		Relation("InReplyToAccount"). -		Relation("BoostOfAccount").  		Relation("CreatedWithApplication")  } @@ -121,10 +118,21 @@ func (s *statusDB) getStatus(ctx context.Context, lookup string, dbQuery func(*g  			return nil, s.conn.ProcessError(err)  		} -		// If there is boosted, fetch from DB also +		if status.InReplyToID != "" { +			// Also load in-reply-to status +			status.InReplyTo = >smodel.Status{} +			err := s.conn.NewSelect().Model(status.InReplyTo). +				Where("? = ?", bun.Ident("status.id"), status.InReplyToID). +				Scan(ctx) +			if err != nil { +				return nil, s.conn.ProcessError(err) +			} +		} +  		if status.BoostOfID != "" { +			// Also load original boosted status  			status.BoostOf = >smodel.Status{} -			err := s.newStatusQ(status.BoostOf). +			err := s.conn.NewSelect().Model(status.BoostOf).  				Where("? = ?", bun.Ident("status.id"), status.BoostOfID).  				Scan(ctx)  			if err != nil { @@ -140,13 +148,43 @@ func (s *statusDB) getStatus(ctx context.Context, lookup string, dbQuery func(*g  	}  	// Set the status author account -	author, err := s.accounts.GetAccountByID(ctx, status.AccountID) +	status.Account, err = s.accounts.GetAccountByID(ctx, status.AccountID)  	if err != nil {  		return nil, err  	} -	// Return the prepared status -	status.Account = author +	if id := status.BoostOfAccountID; id != "" { +		// Set boost of status' author account +		status.BoostOfAccount, err = s.accounts.GetAccountByID(ctx, id) +		if err != nil { +			return nil, err +		} +	} + +	if id := status.InReplyToAccountID; id != "" { +		// Set in-reply-to status' author account +		status.InReplyToAccount, err = s.accounts.GetAccountByID(ctx, id) +		if err != nil { +			return nil, err +		} +	} + +	if len(status.EmojiIDs) > 0 { +		// Fetch status emojis +		status.Emojis, err = s.emojis.emojisFromIDs(ctx, status.EmojiIDs) +		if err != nil { +			return nil, err +		} +	} + +	if len(status.MentionIDs) > 0 { +		// Fetch status mentions +		status.Mentions, err = s.mentions.GetMentions(ctx, status.MentionIDs) +		if err != nil { +			return nil, err +		} +	} +  	return status, nil  } | 
