diff options
author | 2024-08-22 19:47:10 +0200 | |
---|---|---|
committer | 2024-08-22 19:47:10 +0200 | |
commit | 53fccb8af8943aa63e557cbd54d2c19c75b63174 (patch) | |
tree | 5a3dad5bfb03df895a1a45c69d8fe8acc33abab6 /internal/processing | |
parent | [bugfix/frontend] Small safari + gnome web fixes (#3219) (diff) | |
download | gotosocial-53fccb8af8943aa63e557cbd54d2c19c75b63174.tar.xz |
[feature] Use `local_only` field, deprecate `federated` field (#3222)
* [feature] Use `local_only` field, deprecate `federated` field
* use `deprecated` comment for form.Federated
* nolint
Diffstat (limited to 'internal/processing')
-rw-r--r-- | internal/processing/fedi/collections.go | 12 | ||||
-rw-r--r-- | internal/processing/status/create.go | 20 | ||||
-rw-r--r-- | internal/processing/status/create_test.go | 195 | ||||
-rw-r--r-- | internal/processing/workers/federate.go | 8 |
4 files changed, 110 insertions, 125 deletions
diff --git a/internal/processing/fedi/collections.go b/internal/processing/fedi/collections.go index e81d3e269..fd84e7688 100644 --- a/internal/processing/fedi/collections.go +++ b/internal/processing/fedi/collections.go @@ -129,6 +129,18 @@ func (p *Processor) OutboxGet( hi = statuses[0].ID } + // Reslice statuses dropping all those invisible to requester + // (eg., local-only statuses, if the requester is remote). + statuses, err = p.visFilter.StatusesVisible( + ctx, + auth.requestingAcct, + statuses, + ) + if err != nil { + err := gtserror.Newf("error filtering statuses: %w", err) + return nil, gtserror.NewErrorInternalError(err) + } + // Start building AS collection page params. params.Total = util.Ptr(*receivingAcct.Stats.StatusesCount) var pageParams ap.CollectionPageParams diff --git a/internal/processing/status/create.go b/internal/processing/status/create.go index 11dece87d..d5898ffe9 100644 --- a/internal/processing/status/create.go +++ b/internal/processing/status/create.go @@ -45,7 +45,7 @@ func (p *Processor) Create( ctx context.Context, requester *gtsmodel.Account, application *gtsmodel.Application, - form *apimodel.AdvancedStatusCreateForm, + form *apimodel.StatusCreateRequest, ) ( *apimodel.Status, gtserror.WithCode, @@ -290,7 +290,7 @@ func (p *Processor) processThreadID(ctx context.Context, status *gtsmodel.Status return nil } -func (p *Processor) processMediaIDs(ctx context.Context, form *apimodel.AdvancedStatusCreateForm, thisAccountID string, status *gtsmodel.Status) gtserror.WithCode { +func (p *Processor) processMediaIDs(ctx context.Context, form *apimodel.StatusCreateRequest, thisAccountID string, status *gtsmodel.Status) gtserror.WithCode { if form.MediaIDs == nil { return nil } @@ -338,7 +338,7 @@ func (p *Processor) processMediaIDs(ctx context.Context, form *apimodel.Advanced } func processVisibility( - form *apimodel.AdvancedStatusCreateForm, + form *apimodel.StatusCreateRequest, accountDefaultVis gtsmodel.Visibility, status *gtsmodel.Status, ) error { @@ -356,16 +356,16 @@ func processVisibility( status.Visibility = gtsmodel.VisibilityDefault } - // Set federated flag to form value - // if provided, or default to true. - federated := util.PtrOrValue(form.Federated, true) - status.Federated = &federated + // Set federated according to "local_only" field, + // assuming federated (ie., not local-only) by default. + localOnly := util.PtrOrValue(form.LocalOnly, false) + status.Federated = util.Ptr(!localOnly) return nil } func processInteractionPolicy( - _ *apimodel.AdvancedStatusCreateForm, + _ *apimodel.StatusCreateRequest, settings *gtsmodel.AccountSettings, status *gtsmodel.Status, ) error { @@ -413,7 +413,7 @@ func processInteractionPolicy( return nil } -func processLanguage(form *apimodel.AdvancedStatusCreateForm, accountDefaultLanguage string, status *gtsmodel.Status) error { +func processLanguage(form *apimodel.StatusCreateRequest, accountDefaultLanguage string, status *gtsmodel.Status) error { if form.Language != "" { status.Language = form.Language } else { @@ -425,7 +425,7 @@ func processLanguage(form *apimodel.AdvancedStatusCreateForm, accountDefaultLang return nil } -func (p *Processor) processContent(ctx context.Context, parseMention gtsmodel.ParseMentionFunc, form *apimodel.AdvancedStatusCreateForm, status *gtsmodel.Status) error { +func (p *Processor) processContent(ctx context.Context, parseMention gtsmodel.ParseMentionFunc, form *apimodel.StatusCreateRequest, status *gtsmodel.Status) error { if form.ContentType == "" { // If content type wasn't specified, use the author's preferred content-type. contentType := apimodel.StatusContentType(status.Account.Settings.StatusContentType) diff --git a/internal/processing/status/create_test.go b/internal/processing/status/create_test.go index a8211d1c1..84168880e 100644 --- a/internal/processing/status/create_test.go +++ b/internal/processing/status/create_test.go @@ -26,6 +26,7 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/config" "github.com/superseriousbusiness/gotosocial/internal/db" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" + "github.com/superseriousbusiness/gotosocial/internal/util" ) type StatusCreateTestSuite struct { @@ -38,22 +39,18 @@ func (suite *StatusCreateTestSuite) TestProcessContentWarningWithQuotationMarks( creatingAccount := suite.testAccounts["local_account_1"] creatingApplication := suite.testApplications["application_1"] - statusCreateForm := &apimodel.AdvancedStatusCreateForm{ - StatusCreateRequest: apimodel.StatusCreateRequest{ - Status: "poopoo peepee", - MediaIDs: []string{}, - Poll: nil, - InReplyToID: "", - Sensitive: false, - SpoilerText: "\"test\"", // these should not be html-escaped when the final text is rendered - Visibility: apimodel.VisibilityPublic, - ScheduledAt: "", - Language: "en", - ContentType: apimodel.StatusContentTypePlain, - }, - AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{ - Federated: nil, - }, + statusCreateForm := &apimodel.StatusCreateRequest{ + Status: "poopoo peepee", + MediaIDs: []string{}, + Poll: nil, + InReplyToID: "", + Sensitive: false, + SpoilerText: "\"test\"", // these should not be html-escaped when the final text is rendered + Visibility: apimodel.VisibilityPublic, + LocalOnly: util.Ptr(false), + ScheduledAt: "", + Language: "en", + ContentType: apimodel.StatusContentTypePlain, } apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm) @@ -69,22 +66,18 @@ func (suite *StatusCreateTestSuite) TestProcessContentWarningWithHTMLEscapedQuot creatingAccount := suite.testAccounts["local_account_1"] creatingApplication := suite.testApplications["application_1"] - statusCreateForm := &apimodel.AdvancedStatusCreateForm{ - StatusCreateRequest: apimodel.StatusCreateRequest{ - Status: "poopoo peepee", - MediaIDs: []string{}, - Poll: nil, - InReplyToID: "", - Sensitive: false, - SpoilerText: ""test"", // the html-escaped quotation marks should appear as normal quotation marks in the finished text - Visibility: apimodel.VisibilityPublic, - ScheduledAt: "", - Language: "en", - ContentType: apimodel.StatusContentTypePlain, - }, - AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{ - Federated: nil, - }, + statusCreateForm := &apimodel.StatusCreateRequest{ + Status: "poopoo peepee", + MediaIDs: []string{}, + Poll: nil, + InReplyToID: "", + Sensitive: false, + SpoilerText: ""test"", // the html-escaped quotation marks should appear as normal quotation marks in the finished text + Visibility: apimodel.VisibilityPublic, + LocalOnly: util.Ptr(false), + ScheduledAt: "", + Language: "en", + ContentType: apimodel.StatusContentTypePlain, } apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm) @@ -105,21 +98,17 @@ func (suite *StatusCreateTestSuite) TestProcessStatusMarkdownWithUnderscoreEmoji creatingAccount := suite.testAccounts["local_account_1"] creatingApplication := suite.testApplications["application_1"] - statusCreateForm := &apimodel.AdvancedStatusCreateForm{ - StatusCreateRequest: apimodel.StatusCreateRequest{ - Status: "poopoo peepee :_rainbow_:", - MediaIDs: []string{}, - Poll: nil, - InReplyToID: "", - Sensitive: false, - Visibility: apimodel.VisibilityPublic, - ScheduledAt: "", - Language: "en", - ContentType: apimodel.StatusContentTypeMarkdown, - }, - AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{ - Federated: nil, - }, + statusCreateForm := &apimodel.StatusCreateRequest{ + Status: "poopoo peepee :_rainbow_:", + MediaIDs: []string{}, + Poll: nil, + InReplyToID: "", + Sensitive: false, + Visibility: apimodel.VisibilityPublic, + LocalOnly: util.Ptr(false), + ScheduledAt: "", + Language: "en", + ContentType: apimodel.StatusContentTypeMarkdown, } apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm) @@ -135,22 +124,18 @@ func (suite *StatusCreateTestSuite) TestProcessStatusMarkdownWithSpoilerTextEmoj creatingAccount := suite.testAccounts["local_account_1"] creatingApplication := suite.testApplications["application_1"] - statusCreateForm := &apimodel.AdvancedStatusCreateForm{ - StatusCreateRequest: apimodel.StatusCreateRequest{ - Status: "poopoo peepee", - SpoilerText: "testing something :rainbow:", - MediaIDs: []string{}, - Poll: nil, - InReplyToID: "", - Sensitive: false, - Visibility: apimodel.VisibilityPublic, - ScheduledAt: "", - Language: "en", - ContentType: apimodel.StatusContentTypeMarkdown, - }, - AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{ - Federated: nil, - }, + statusCreateForm := &apimodel.StatusCreateRequest{ + Status: "poopoo peepee", + SpoilerText: "testing something :rainbow:", + MediaIDs: []string{}, + Poll: nil, + InReplyToID: "", + Sensitive: false, + Visibility: apimodel.VisibilityPublic, + LocalOnly: util.Ptr(false), + ScheduledAt: "", + Language: "en", + ContentType: apimodel.StatusContentTypeMarkdown, } apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm) @@ -170,22 +155,18 @@ func (suite *StatusCreateTestSuite) TestProcessMediaDescriptionTooShort() { creatingAccount := suite.testAccounts["local_account_1"] creatingApplication := suite.testApplications["application_1"] - statusCreateForm := &apimodel.AdvancedStatusCreateForm{ - StatusCreateRequest: apimodel.StatusCreateRequest{ - Status: "poopoo peepee", - MediaIDs: []string{suite.testAttachments["local_account_1_unattached_1"].ID}, - Poll: nil, - InReplyToID: "", - Sensitive: false, - SpoilerText: "", - Visibility: apimodel.VisibilityPublic, - ScheduledAt: "", - Language: "en", - ContentType: apimodel.StatusContentTypePlain, - }, - AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{ - Federated: nil, - }, + statusCreateForm := &apimodel.StatusCreateRequest{ + Status: "poopoo peepee", + MediaIDs: []string{suite.testAttachments["local_account_1_unattached_1"].ID}, + Poll: nil, + InReplyToID: "", + Sensitive: false, + SpoilerText: "", + Visibility: apimodel.VisibilityPublic, + LocalOnly: util.Ptr(false), + ScheduledAt: "", + Language: "en", + ContentType: apimodel.StatusContentTypePlain, } apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm) @@ -199,22 +180,18 @@ func (suite *StatusCreateTestSuite) TestProcessLanguageWithScriptPart() { creatingAccount := suite.testAccounts["local_account_1"] creatingApplication := suite.testApplications["application_1"] - statusCreateForm := &apimodel.AdvancedStatusCreateForm{ - StatusCreateRequest: apimodel.StatusCreateRequest{ - Status: "你好世界", // hello world - MediaIDs: []string{}, - Poll: nil, - InReplyToID: "", - Sensitive: false, - SpoilerText: "", - Visibility: apimodel.VisibilityPublic, - ScheduledAt: "", - Language: "zh-Hans", - ContentType: apimodel.StatusContentTypePlain, - }, - AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{ - Federated: nil, - }, + statusCreateForm := &apimodel.StatusCreateRequest{ + Status: "你好世界", // hello world + MediaIDs: []string{}, + Poll: nil, + InReplyToID: "", + Sensitive: false, + SpoilerText: "", + Visibility: apimodel.VisibilityPublic, + LocalOnly: util.Ptr(false), + ScheduledAt: "", + Language: "zh-Hans", + ContentType: apimodel.StatusContentTypePlain, } apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm) @@ -233,22 +210,18 @@ func (suite *StatusCreateTestSuite) TestProcessReplyToUnthreadedRemoteStatus() { // Reply to a remote status that // doesn't have a threadID set on it. - statusCreateForm := &apimodel.AdvancedStatusCreateForm{ - StatusCreateRequest: apimodel.StatusCreateRequest{ - Status: "boobies", - MediaIDs: []string{}, - Poll: nil, - InReplyToID: inReplyTo.ID, - Sensitive: false, - SpoilerText: "this is a reply", - Visibility: apimodel.VisibilityPublic, - ScheduledAt: "", - Language: "en", - ContentType: apimodel.StatusContentTypePlain, - }, - AdvancedVisibilityFlagsForm: apimodel.AdvancedVisibilityFlagsForm{ - Federated: nil, - }, + statusCreateForm := &apimodel.StatusCreateRequest{ + Status: "boobies", + MediaIDs: []string{}, + Poll: nil, + InReplyToID: inReplyTo.ID, + Sensitive: false, + SpoilerText: "this is a reply", + Visibility: apimodel.VisibilityPublic, + LocalOnly: util.Ptr(false), + ScheduledAt: "", + Language: "en", + ContentType: apimodel.StatusContentTypePlain, } apiStatus, err := suite.status.Create(ctx, creatingAccount, creatingApplication, statusCreateForm) diff --git a/internal/processing/workers/federate.go b/internal/processing/workers/federate.go index d71bb0a83..6e8b558c8 100644 --- a/internal/processing/workers/federate.go +++ b/internal/processing/workers/federate.go @@ -146,7 +146,7 @@ func (f *federate) DeleteAccount(ctx context.Context, account *gtsmodel.Account) func (f *federate) CreateStatus(ctx context.Context, status *gtsmodel.Status) error { // Do nothing if the status // shouldn't be federated. - if !*status.Federated { + if status.IsLocalOnly() { return nil } @@ -201,7 +201,7 @@ func (f *federate) CreatePollVote(ctx context.Context, poll *gtsmodel.Poll, vote // Do nothing if the status // shouldn't be federated. - if !*status.Federated { + if status.IsLocalOnly() { return nil } @@ -234,7 +234,7 @@ func (f *federate) CreatePollVote(ctx context.Context, poll *gtsmodel.Poll, vote func (f *federate) DeleteStatus(ctx context.Context, status *gtsmodel.Status) error { // Do nothing if the status // shouldn't be federated. - if !*status.Federated { + if status.IsLocalOnly() { return nil } @@ -272,7 +272,7 @@ func (f *federate) DeleteStatus(ctx context.Context, status *gtsmodel.Status) er func (f *federate) UpdateStatus(ctx context.Context, status *gtsmodel.Status) error { // Do nothing if the status // shouldn't be federated. - if !*status.Federated { + if status.IsLocalOnly() { return nil } |