tiny 88x31 lexicon for atproto
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

listen

+24
+24
cmd/main.go
··· 2 2 3 3 import ( 4 4 "context" 5 + "errors" 5 6 "fmt" 6 7 "log" 8 + "log/slog" 7 9 "net/http" 10 + "os" 8 11 9 12 "github.com/joho/godotenv" 13 + "tangled.org/moth11.net/88x31/atplistener" 10 14 "tangled.org/moth11.net/88x31/blobs" 11 15 "tangled.org/moth11.net/88x31/db" 12 16 "tangled.org/moth11.net/88x31/handler" ··· 27 31 h := handler.MakeHandler(store, svc) 28 32 ctx, done := context.WithCancel(context.Background()) 29 33 go blobs.Cleanup(ctx) 34 + go consumeLoop(context.Background(), store) 30 35 log.Fatal(http.ListenAndServe(":8081", h.Serve())) 31 36 done() 32 37 } 38 + 39 + const ( 40 + defaultServerAddr = "wss://jetstream2.us-east.bsky.network/subscribe" 41 + ) 42 + 43 + func consumeLoop(ctx context.Context, db *db.Store) { 44 + logger := slog.New(slog.NewTextHandler(os.Stdout, nil)) 45 + consumer := atplistener.NewConsumer(defaultServerAddr, logger, db) 46 + for { 47 + err := consumer.Consume(ctx) 48 + if err != nil { 49 + logger.Error("error in consume loop: " + err.Error()) 50 + if errors.Is(err, context.Canceled) { 51 + slog.Info("exiting consume loop") 52 + return 53 + } 54 + } 55 + } 56 + }