summaryrefslogtreecommitdiff
path: root/cmd/gotosocial/action/server/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/gotosocial/action/server/server.go')
-rw-r--r--cmd/gotosocial/action/server/server.go40
1 files changed, 31 insertions, 9 deletions
diff --git a/cmd/gotosocial/action/server/server.go b/cmd/gotosocial/action/server/server.go
index 76e58c2f8..fa4ec9b82 100644
--- a/cmd/gotosocial/action/server/server.go
+++ b/cmd/gotosocial/action/server/server.go
@@ -32,7 +32,10 @@ import (
apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
"github.com/superseriousbusiness/gotosocial/internal/middleware"
+ tlprocessor "github.com/superseriousbusiness/gotosocial/internal/processing/timeline"
+ "github.com/superseriousbusiness/gotosocial/internal/timeline"
"github.com/superseriousbusiness/gotosocial/internal/tracing"
+ "github.com/superseriousbusiness/gotosocial/internal/visibility"
"go.uber.org/automaxprocs/maxprocs"
"github.com/superseriousbusiness/gotosocial/internal/config"
@@ -72,7 +75,6 @@ var Start action.GTSAction = func(ctx context.Context) error {
defer state.Caches.Stop()
// Initialize Tracing
-
if err := tracing.Initialize(); err != nil {
return fmt.Errorf("error initializing tracing: %w", err)
}
@@ -110,36 +112,56 @@ var Start action.GTSAction = func(ctx context.Context) error {
state.Workers.Start()
defer state.Workers.Stop()
- // build backend handlers
+ // Build handlers used in later initializations.
mediaManager := media.NewManager(&state)
oauthServer := oauth.New(ctx, dbService)
typeConverter := typeutils.NewConverter(dbService)
+ filter := visibility.NewFilter(&state)
federatingDB := federatingdb.New(&state, typeConverter)
transportController := transport.NewController(&state, federatingDB, &federation.Clock{}, client)
federator := federation.NewFederator(&state, federatingDB, transportController, typeConverter, mediaManager)
- // decide whether to create a noop email sender (won't send emails) or a real one
+ // Decide whether to create a noop email
+ // sender (won't send emails) or a real one.
var emailSender email.Sender
if smtpHost := config.GetSMTPHost(); smtpHost != "" {
- // host is defined so create a proper sender
+ // Host is defined; create a proper sender.
emailSender, err = email.NewSender()
if err != nil {
return fmt.Errorf("error creating email sender: %s", err)
}
} else {
- // no host is defined so create a noop sender
+ // No host is defined; create a noop sender.
emailSender, err = email.NewNoopSender(nil)
if err != nil {
return fmt.Errorf("error creating noop email sender: %s", err)
}
}
- // create the message processor using the other services we've created so far
- processor := processing.NewProcessor(typeConverter, federator, oauthServer, mediaManager, &state, emailSender)
- if err := processor.Start(); err != nil {
- return fmt.Errorf("error creating processor: %s", err)
+ // Initialize timelines.
+ state.Timelines.Home = timeline.NewManager(
+ tlprocessor.HomeTimelineGrab(&state),
+ tlprocessor.HomeTimelineFilter(&state, filter),
+ tlprocessor.HomeTimelineStatusPrepare(&state, typeConverter),
+ tlprocessor.SkipInsert(),
+ )
+ if err := state.Timelines.Home.Start(); err != nil {
+ return fmt.Errorf("error starting home timeline: %s", err)
+ }
+
+ state.Timelines.List = timeline.NewManager(
+ tlprocessor.ListTimelineGrab(&state),
+ tlprocessor.ListTimelineFilter(&state, filter),
+ tlprocessor.ListTimelineStatusPrepare(&state, typeConverter),
+ tlprocessor.SkipInsert(),
+ )
+ if err := state.Timelines.List.Start(); err != nil {
+ return fmt.Errorf("error starting list timeline: %s", err)
}
+ // Create the processor using all the other services we've created so far.
+ processor := processing.NewProcessor(typeConverter, federator, oauthServer, mediaManager, &state, emailSender)
+
// Set state client / federator worker enqueue functions
state.Workers.EnqueueClientAPI = processor.EnqueueClientAPI
state.Workers.EnqueueFederator = processor.EnqueueFederator