bit of tidying up!
This commit is contained in:
parent
740086576c
commit
a42e05eee0
|
@ -208,9 +208,6 @@ type DB interface {
|
||||||
// Mutuals returns true if account1 and account2 both follow each other, or an error if something goes wrong while finding out.
|
// Mutuals returns true if account1 and account2 both follow each other, or an error if something goes wrong while finding out.
|
||||||
Mutuals(account1 *gtsmodel.Account, account2 *gtsmodel.Account) (bool, error)
|
Mutuals(account1 *gtsmodel.Account, account2 *gtsmodel.Account) (bool, error)
|
||||||
|
|
||||||
// PullRelevantAccountsFromStatus returns all accounts mentioned in a status, replied to by a status, or boosted by a status
|
|
||||||
PullRelevantAccountsFromStatus(status *gtsmodel.Status) (*gtsmodel.RelevantAccounts, error)
|
|
||||||
|
|
||||||
// GetReplyCountForStatus returns the amount of replies recorded for a status, or an error if something goes wrong
|
// GetReplyCountForStatus returns the amount of replies recorded for a status, or an error if something goes wrong
|
||||||
GetReplyCountForStatus(status *gtsmodel.Status) (int, error)
|
GetReplyCountForStatus(status *gtsmodel.Status) (int, error)
|
||||||
|
|
||||||
|
|
|
@ -836,71 +836,6 @@ func (ps *postgresService) Mutuals(account1 *gtsmodel.Account, account2 *gtsmode
|
||||||
return f1 && f2, nil
|
return f1 && f2, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ps *postgresService) PullRelevantAccountsFromStatus(targetStatus *gtsmodel.Status) (*gtsmodel.RelevantAccounts, error) {
|
|
||||||
accounts := >smodel.RelevantAccounts{
|
|
||||||
MentionedAccounts: []*gtsmodel.Account{},
|
|
||||||
}
|
|
||||||
|
|
||||||
// get the author account
|
|
||||||
if targetStatus.GTSAuthorAccount == nil {
|
|
||||||
statusAuthor := >smodel.Account{}
|
|
||||||
if err := ps.conn.Model(statusAuthor).Where("id = ?", targetStatus.AccountID).Select(); err != nil {
|
|
||||||
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting statusAuthor with id %s: %s", targetStatus.AccountID, err)
|
|
||||||
}
|
|
||||||
targetStatus.GTSAuthorAccount = statusAuthor
|
|
||||||
}
|
|
||||||
accounts.StatusAuthor = targetStatus.GTSAuthorAccount
|
|
||||||
|
|
||||||
// get the replied to account from the status and add it to the pile
|
|
||||||
if targetStatus.InReplyToAccountID != "" {
|
|
||||||
repliedToAccount := >smodel.Account{}
|
|
||||||
if err := ps.conn.Model(repliedToAccount).Where("id = ?", targetStatus.InReplyToAccountID).Select(); err != nil {
|
|
||||||
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting repliedToAcount with id %s: %s", targetStatus.InReplyToAccountID, err)
|
|
||||||
}
|
|
||||||
accounts.ReplyToAccount = repliedToAccount
|
|
||||||
}
|
|
||||||
|
|
||||||
// get the boosted account from the status and add it to the pile
|
|
||||||
if targetStatus.BoostOfID != "" {
|
|
||||||
// retrieve the boosted status first
|
|
||||||
boostedStatus := >smodel.Status{}
|
|
||||||
if err := ps.conn.Model(boostedStatus).Where("id = ?", targetStatus.BoostOfID).Select(); err != nil {
|
|
||||||
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting boostedStatus with id %s: %s", targetStatus.BoostOfID, err)
|
|
||||||
}
|
|
||||||
boostedAccount := >smodel.Account{}
|
|
||||||
if err := ps.conn.Model(boostedAccount).Where("id = ?", boostedStatus.AccountID).Select(); err != nil {
|
|
||||||
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting boostedAccount with id %s: %s", boostedStatus.AccountID, err)
|
|
||||||
}
|
|
||||||
accounts.BoostedAccount = boostedAccount
|
|
||||||
|
|
||||||
// the boosted status might be a reply to another account so we should get that too
|
|
||||||
if boostedStatus.InReplyToAccountID != "" {
|
|
||||||
boostedStatusRepliedToAccount := >smodel.Account{}
|
|
||||||
if err := ps.conn.Model(boostedStatusRepliedToAccount).Where("id = ?", boostedStatus.InReplyToAccountID).Select(); err != nil {
|
|
||||||
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting boostedStatusRepliedToAccount with id %s: %s", boostedStatus.InReplyToAccountID, err)
|
|
||||||
}
|
|
||||||
accounts.BoostedReplyToAccount = boostedStatusRepliedToAccount
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// now get all accounts with IDs that are mentioned in the status
|
|
||||||
for _, mentionID := range targetStatus.Mentions {
|
|
||||||
|
|
||||||
mention := >smodel.Mention{}
|
|
||||||
if err := ps.conn.Model(mention).Where("id = ?", mentionID).Select(); err != nil {
|
|
||||||
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting mention with id %s: %s", mentionID, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
mentionedAccount := >smodel.Account{}
|
|
||||||
if err := ps.conn.Model(mentionedAccount).Where("id = ?", mention.TargetAccountID).Select(); err != nil {
|
|
||||||
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting mentioned account: %s", err)
|
|
||||||
}
|
|
||||||
accounts.MentionedAccounts = append(accounts.MentionedAccounts, mentionedAccount)
|
|
||||||
}
|
|
||||||
|
|
||||||
return accounts, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ps *postgresService) GetReplyCountForStatus(status *gtsmodel.Status) (int, error) {
|
func (ps *postgresService) GetReplyCountForStatus(status *gtsmodel.Status) (int, error) {
|
||||||
return ps.conn.Model(>smodel.Status{}).Where("in_reply_to_id = ?", status.ID).Count()
|
return ps.conn.Model(>smodel.Status{}).Where("in_reply_to_id = ?", status.ID).Count()
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,20 +140,3 @@ type VisibilityAdvanced struct {
|
||||||
// This status can be liked/faved
|
// This status can be liked/faved
|
||||||
Likeable bool `pg:"default:true"`
|
Likeable bool `pg:"default:true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RelevantAccounts denotes accounts that are replied to, boosted by, or mentioned in a status.
|
|
||||||
type RelevantAccounts struct {
|
|
||||||
StatusAuthor *Account
|
|
||||||
ReplyToAccount *Account
|
|
||||||
BoostedAccount *Account
|
|
||||||
BoostedReplyToAccount *Account
|
|
||||||
MentionedAccounts []*Account
|
|
||||||
}
|
|
||||||
|
|
||||||
// StatusInteractions denotes interactions with a status on behalf of an account.
|
|
||||||
type StatusInteractions struct {
|
|
||||||
Faved bool
|
|
||||||
Muted bool
|
|
||||||
Bookmarked bool
|
|
||||||
Reblogged bool
|
|
||||||
}
|
|
||||||
|
|
|
@ -449,7 +449,7 @@ func (c *converter) StatusToMasto(s *gtsmodel.Status, requestingAccount *gtsmode
|
||||||
var mastoCard *model.Card
|
var mastoCard *model.Card
|
||||||
var mastoPoll *model.Poll
|
var mastoPoll *model.Poll
|
||||||
|
|
||||||
statusInteractions := >smodel.StatusInteractions{}
|
statusInteractions := &statusInteractions{}
|
||||||
si, err := c.interactionsWithStatusForAccount(s, requestingAccount)
|
si, err := c.interactionsWithStatusForAccount(s, requestingAccount)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
statusInteractions = si
|
statusInteractions = si
|
||||||
|
@ -610,34 +610,3 @@ func (c *converter) NotificationToMasto(n *gtsmodel.Notification) (*model.Notifi
|
||||||
Status: mastoStatus,
|
Status: mastoStatus,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *converter) interactionsWithStatusForAccount(s *gtsmodel.Status, requestingAccount *gtsmodel.Account) (*gtsmodel.StatusInteractions, error) {
|
|
||||||
si := >smodel.StatusInteractions{}
|
|
||||||
|
|
||||||
if requestingAccount != nil {
|
|
||||||
faved, err := c.db.StatusFavedBy(s, requestingAccount.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error checking if requesting account has faved status: %s", err)
|
|
||||||
}
|
|
||||||
si.Faved = faved
|
|
||||||
|
|
||||||
reblogged, err := c.db.StatusRebloggedBy(s, requestingAccount.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error checking if requesting account has reblogged status: %s", err)
|
|
||||||
}
|
|
||||||
si.Reblogged = reblogged
|
|
||||||
|
|
||||||
muted, err := c.db.StatusMutedBy(s, requestingAccount.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error checking if requesting account has muted status: %s", err)
|
|
||||||
}
|
|
||||||
si.Muted = muted
|
|
||||||
|
|
||||||
bookmarked, err := c.db.StatusBookmarkedBy(s, requestingAccount.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error checking if requesting account has bookmarked status: %s", err)
|
|
||||||
}
|
|
||||||
si.Bookmarked = bookmarked
|
|
||||||
}
|
|
||||||
return si, nil
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
package typeutils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (c *converter) interactionsWithStatusForAccount(s *gtsmodel.Status, requestingAccount *gtsmodel.Account) (*statusInteractions, error) {
|
||||||
|
si := &statusInteractions{}
|
||||||
|
|
||||||
|
if requestingAccount != nil {
|
||||||
|
faved, err := c.db.StatusFavedBy(s, requestingAccount.ID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error checking if requesting account has faved status: %s", err)
|
||||||
|
}
|
||||||
|
si.Faved = faved
|
||||||
|
|
||||||
|
reblogged, err := c.db.StatusRebloggedBy(s, requestingAccount.ID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error checking if requesting account has reblogged status: %s", err)
|
||||||
|
}
|
||||||
|
si.Reblogged = reblogged
|
||||||
|
|
||||||
|
muted, err := c.db.StatusMutedBy(s, requestingAccount.ID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error checking if requesting account has muted status: %s", err)
|
||||||
|
}
|
||||||
|
si.Muted = muted
|
||||||
|
|
||||||
|
bookmarked, err := c.db.StatusBookmarkedBy(s, requestingAccount.ID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error checking if requesting account has bookmarked status: %s", err)
|
||||||
|
}
|
||||||
|
si.Bookmarked = bookmarked
|
||||||
|
}
|
||||||
|
return si, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// StatusInteractions denotes interactions with a status on behalf of an account.
|
||||||
|
type statusInteractions struct {
|
||||||
|
Faved bool
|
||||||
|
Muted bool
|
||||||
|
Bookmarked bool
|
||||||
|
Reblogged bool
|
||||||
|
}
|
|
@ -14,6 +14,11 @@ func (f *filter) StatusHometimelineable(targetStatus *gtsmodel.Status, requestin
|
||||||
"requestingAccountID": requestingAccount.ID,
|
"requestingAccountID": requestingAccount.ID,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// status owner should always be able to see their status in their timeline so we can return early if this is the case
|
||||||
|
if targetStatus.AccountID == requestingAccount.ID {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
v, err := f.StatusVisible(targetStatus, requestingAccount)
|
v, err := f.StatusVisible(targetStatus, requestingAccount)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("StatusHometimelineable: error checking visibility of status with id %s: %s", targetStatus.ID, err)
|
return false, fmt.Errorf("StatusHometimelineable: error checking visibility of status with id %s: %s", targetStatus.ID, err)
|
||||||
|
|
|
@ -17,7 +17,7 @@ func (f *filter) StatusVisible(targetStatus *gtsmodel.Status, requestingAccount
|
||||||
"requestingAccountID": requestingAccount.ID,
|
"requestingAccountID": requestingAccount.ID,
|
||||||
})
|
})
|
||||||
|
|
||||||
relevantAccounts, err := f.db.PullRelevantAccountsFromStatus(targetStatus)
|
relevantAccounts, err := f.pullRelevantAccountsFromStatus(targetStatus)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Debugf("error pulling relevant accounts for status %s: %s", targetStatus.ID, err)
|
l.Debugf("error pulling relevant accounts for status %s: %s", targetStatus.ID, err)
|
||||||
}
|
}
|
||||||
|
@ -195,7 +195,3 @@ func (f *filter) StatusVisible(targetStatus *gtsmodel.Status, requestingAccount
|
||||||
|
|
||||||
return false, errors.New("reached the end of StatusVisible with no result")
|
return false, errors.New("reached the end of StatusVisible with no result")
|
||||||
}
|
}
|
||||||
|
|
||||||
func StatusVisibleInHomeTimeline() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
package visibility
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (f *filter) pullRelevantAccountsFromStatus(targetStatus *gtsmodel.Status) (*relevantAccounts, error) {
|
||||||
|
accounts := &relevantAccounts{
|
||||||
|
MentionedAccounts: []*gtsmodel.Account{},
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the author account
|
||||||
|
if targetStatus.GTSAuthorAccount == nil {
|
||||||
|
statusAuthor := >smodel.Account{}
|
||||||
|
if err := f.db.GetByID(targetStatus.AccountID, statusAuthor); err != nil {
|
||||||
|
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting statusAuthor with id %s: %s", targetStatus.AccountID, err)
|
||||||
|
}
|
||||||
|
targetStatus.GTSAuthorAccount = statusAuthor
|
||||||
|
}
|
||||||
|
accounts.StatusAuthor = targetStatus.GTSAuthorAccount
|
||||||
|
|
||||||
|
// get the replied to account from the status and add it to the pile
|
||||||
|
if targetStatus.InReplyToAccountID != "" {
|
||||||
|
repliedToAccount := >smodel.Account{}
|
||||||
|
if err := f.db.GetByID(targetStatus.InReplyToAccountID, repliedToAccount); err != nil {
|
||||||
|
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting repliedToAcount with id %s: %s", targetStatus.InReplyToAccountID, err)
|
||||||
|
}
|
||||||
|
accounts.ReplyToAccount = repliedToAccount
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the boosted account from the status and add it to the pile
|
||||||
|
if targetStatus.BoostOfID != "" {
|
||||||
|
// retrieve the boosted status first
|
||||||
|
boostedStatus := >smodel.Status{}
|
||||||
|
if err := f.db.GetByID(targetStatus.BoostOfID, boostedStatus); err != nil {
|
||||||
|
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting boostedStatus with id %s: %s", targetStatus.BoostOfID, err)
|
||||||
|
}
|
||||||
|
boostedAccount := >smodel.Account{}
|
||||||
|
if err := f.db.GetByID(boostedStatus.AccountID, boostedAccount); err != nil {
|
||||||
|
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting boostedAccount with id %s: %s", boostedStatus.AccountID, err)
|
||||||
|
}
|
||||||
|
accounts.BoostedAccount = boostedAccount
|
||||||
|
|
||||||
|
// the boosted status might be a reply to another account so we should get that too
|
||||||
|
if boostedStatus.InReplyToAccountID != "" {
|
||||||
|
boostedStatusRepliedToAccount := >smodel.Account{}
|
||||||
|
if err := f.db.GetByID(boostedStatus.InReplyToAccountID, boostedStatusRepliedToAccount); err != nil {
|
||||||
|
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting boostedStatusRepliedToAccount with id %s: %s", boostedStatus.InReplyToAccountID, err)
|
||||||
|
}
|
||||||
|
accounts.BoostedReplyToAccount = boostedStatusRepliedToAccount
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// now get all accounts with IDs that are mentioned in the status
|
||||||
|
for _, mentionID := range targetStatus.Mentions {
|
||||||
|
|
||||||
|
mention := >smodel.Mention{}
|
||||||
|
if err := f.db.GetByID(mentionID, mention); err != nil {
|
||||||
|
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting mention with id %s: %s", mentionID, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
mentionedAccount := >smodel.Account{}
|
||||||
|
if err := f.db.GetByID(mention.TargetAccountID, mentionedAccount); err != nil {
|
||||||
|
return accounts, fmt.Errorf("PullRelevantAccountsFromStatus: error getting mentioned account: %s", err)
|
||||||
|
}
|
||||||
|
accounts.MentionedAccounts = append(accounts.MentionedAccounts, mentionedAccount)
|
||||||
|
}
|
||||||
|
|
||||||
|
return accounts, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// relevantAccounts denotes accounts that are replied to, boosted by, or mentioned in a status.
|
||||||
|
type relevantAccounts struct {
|
||||||
|
StatusAuthor *gtsmodel.Account
|
||||||
|
ReplyToAccount *gtsmodel.Account
|
||||||
|
BoostedAccount *gtsmodel.Account
|
||||||
|
BoostedReplyToAccount *gtsmodel.Account
|
||||||
|
MentionedAccounts []*gtsmodel.Account
|
||||||
|
}
|
Loading…
Reference in New Issue