diff options
author | 2023-10-04 13:09:42 +0100 | |
---|---|---|
committer | 2023-10-04 13:09:42 +0100 | |
commit | c6e00afc7c23df994b70eee89d2d392718e6a321 (patch) | |
tree | cee98c1a78e36ba6a0e8183afa0b2796765fe7f6 /internal/processing/workers/federate.go | |
parent | [chore] internal/ap: add pollable AS types, code reformatting, general niceti... (diff) | |
download | gotosocial-c6e00afc7c23df994b70eee89d2d392718e6a321.tar.xz |
[feature] tentatively start adding polls support (#2249)
Diffstat (limited to 'internal/processing/workers/federate.go')
-rw-r--r-- | internal/processing/workers/federate.go | 64 |
1 files changed, 54 insertions, 10 deletions
diff --git a/internal/processing/workers/federate.go b/internal/processing/workers/federate.go index 4b2ca4de1..a87a89fd2 100644 --- a/internal/processing/workers/federate.go +++ b/internal/processing/workers/federate.go @@ -147,27 +147,27 @@ func (f *federate) CreateStatus(ctx context.Context, status *gtsmodel.Status) er return nil } - // Populate model. + // Ensure the status model is fully populated. if err := f.state.DB.PopulateStatus(ctx, status); err != nil { return gtserror.Newf("error populating status: %w", err) } - // Parse relevant URI(s). + // Parse the outbox URI of the status author. outboxIRI, err := parseURI(status.Account.OutboxURI) if err != nil { return err } - // Convert status to an ActivityStreams - // Note, wrapped in a Create activity. - asStatus, err := f.converter.StatusToAS(ctx, status) + // Convert status to ActivityStreams Statusable implementing type. + statusable, err := f.converter.StatusToAS(ctx, status) if err != nil { - return gtserror.Newf("error converting status to AS: %w", err) + return gtserror.Newf("error converting status to Statusable: %w", err) } - create, err := f.converter.WrapNoteInCreate(asStatus, false) + // Use ActivityStreams Statusable type as Object of Create. + create, err := f.converter.WrapStatusableInCreate(statusable, false) if err != nil { - return gtserror.Newf("error wrapping status in create: %w", err) + return gtserror.Newf("error wrapping Statusable in Create: %w", err) } // Send the Create via the Actor's outbox. @@ -196,12 +196,12 @@ func (f *federate) DeleteStatus(ctx context.Context, status *gtsmodel.Status) er return nil } - // Populate model. + // Ensure the status model is fully populated. if err := f.state.DB.PopulateStatus(ctx, status); err != nil { return gtserror.Newf("error populating status: %w", err) } - // Parse relevant URI(s). + // Parse the outbox URI of the status author. outboxIRI, err := parseURI(status.Account.OutboxURI) if err != nil { return err @@ -226,6 +226,50 @@ func (f *federate) DeleteStatus(ctx context.Context, status *gtsmodel.Status) er return nil } +func (f *federate) UpdateStatus(ctx context.Context, status *gtsmodel.Status) error { + // Do nothing if the status + // shouldn't be federated. + if !*status.Federated { + return nil + } + + // Do nothing if this + // isn't our status. + if !*status.Local { + return nil + } + + // Ensure the status model is fully populated. + if err := f.state.DB.PopulateStatus(ctx, status); err != nil { + return gtserror.Newf("error populating status: %w", err) + } + + // Parse the outbox URI of the status author. + outboxIRI, err := parseURI(status.Account.OutboxURI) + if err != nil { + return err + } + + // Convert status to ActivityStreams Statusable implementing type. + statusable, err := f.converter.StatusToAS(ctx, status) + if err != nil { + return gtserror.Newf("error converting status to Statusable: %w", err) + } + + // Use ActivityStreams Statusable type as Object of Update. + update, err := f.converter.WrapStatusableInUpdate(statusable, false) + if err != nil { + return gtserror.Newf("error wrapping Statusable in Update: %w", err) + } + + // Send the Update activity with Statusable via the Actor's outbox. + if _, err := f.FederatingActor().Send(ctx, outboxIRI, update); err != nil { + return gtserror.Newf("error sending Update activity via outbox %s: %w", outboxIRI, err) + } + + return nil +} + func (f *federate) Follow(ctx context.Context, follow *gtsmodel.Follow) error { // Populate model. if err := f.state.DB.PopulateFollow(ctx, follow); err != nil { |