diff options
author | 2021-07-09 18:32:48 +0200 | |
---|---|---|
committer | 2021-07-09 18:32:48 +0200 | |
commit | c7da64922f8b41daaee1cb8fc2961f7fa1336737 (patch) | |
tree | b1f9c946bd223267f87f2a77a7455974d8d5e5e9 /internal/visibility/statuspublictimelineable.go | |
parent | Docs (#94) (diff) | |
download | gotosocial-c7da64922f8b41daaee1cb8fc2961f7fa1336737.tar.xz |
favourites GET implementation (#95)
Diffstat (limited to 'internal/visibility/statuspublictimelineable.go')
-rw-r--r-- | internal/visibility/statuspublictimelineable.go | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/internal/visibility/statuspublictimelineable.go b/internal/visibility/statuspublictimelineable.go new file mode 100644 index 000000000..d7f68faee --- /dev/null +++ b/internal/visibility/statuspublictimelineable.go @@ -0,0 +1,37 @@ +package visibility + +import ( + "fmt" + + "github.com/sirupsen/logrus" + "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" +) + +func (f *filter) StatusPublictimelineable(targetStatus *gtsmodel.Status, timelineOwnerAccount *gtsmodel.Account) (bool, error) { + l := f.log.WithFields(logrus.Fields{ + "func": "StatusPublictimelineable", + "statusID": targetStatus.ID, + }) + + // Don't timeline a reply + if targetStatus.InReplyToURI != "" || targetStatus.InReplyToID != "" || targetStatus.InReplyToAccountID != "" { + return false, nil + } + + // status owner should always be able to see their own status in their timeline so we can return early if this is the case + if timelineOwnerAccount != nil && targetStatus.AccountID == timelineOwnerAccount.ID { + return true, nil + } + + v, err := f.StatusVisible(targetStatus, timelineOwnerAccount) + if err != nil { + return false, fmt.Errorf("StatusPublictimelineable: error checking visibility of status with id %s: %s", targetStatus.ID, err) + } + + if !v { + l.Debug("status is not publicTimelineable because it's not visible to the requester") + return false, nil + } + + return true, nil +} |