[chore] remove type switch in Create() and instead move to FederatedCallbacks() (#3697)

* remove type switch in Create() and instead move to FederatedCallbacks()

* add missing (my bad!) federating wrapped callbacks behaviour

* add missing license header 😇

* fix create flag test to use correct function
This commit is contained in:
kim 2025-01-28 20:22:23 +00:00 committed by GitHub
commit 61141ac232
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 610 additions and 433 deletions

View file

@ -36,14 +36,19 @@ var _ interface {
} = (*Federator)(nil)
type Federator struct {
db db.DB
federatingDB federatingdb.DB
clock pub.Clock
converter *typeutils.Converter
transportController transport.Controller
mediaManager *media.Manager
actor pub.FederatingActor
db db.DB
federatingDB federatingdb.DB
clock pub.Clock
converter *typeutils.Converter
transport transport.Controller
mediaManager *media.Manager
actor pub.FederatingActor
dereferencing.Dereferencer
// store result of FederatingCallbacks() ahead
// of time since it's called in every PostInbox().
wrapped pub.FederatingWrappedCallbacks
callback []any
}
// NewFederator returns a new federator instance.
@ -58,12 +63,13 @@ func NewFederator(
) *Federator {
clock := &Clock{}
f := &Federator{
db: state.DB,
federatingDB: federatingDB,
clock: clock,
converter: converter,
transportController: transportController,
mediaManager: mediaManager,
db: state.DB,
federatingDB: federatingDB,
clock: clock,
converter: converter,
transport: transportController,
mediaManager: mediaManager,
Dereferencer: dereferencing.NewDereferencer(
state,
converter,
@ -72,6 +78,28 @@ func NewFederator(
intFilter,
mediaManager,
),
// prepared response to FederatingCallbacks()
wrapped: pub.FederatingWrappedCallbacks{
// OnFollow determines what action to take for this
// particular callback if a Follow Activity is handled.
//
// For our implementation, we always want to do nothing
// because we have internal logic for handling follows.
OnFollow: pub.OnFollowDoNothing,
},
callback: []any{
federatingDB.Like,
federatingDB.Block,
federatingDB.Follow,
federatingDB.Undo,
federatingDB.Accept,
federatingDB.Reject,
federatingDB.Announce,
federatingDB.Move,
federatingDB.Flag,
},
}
actor := newFederatingActor(f, f, federatingDB, clock)
f.actor = actor
@ -90,5 +118,5 @@ func (f *Federator) FederatingDB() federatingdb.DB {
// TransportController returns the underlying transport controller.
func (f *Federator) TransportController() transport.Controller {
return f.transportController
return f.transport
}