fork
Configure Feed
Select the types of activity you want to include in your feed.
Monorepo for Tangled
tangled.org
fork
Configure Feed
Select the types of activity you want to include in your feed.
1package appview
2
3import (
4 "context"
5 "sync"
6
7 "github.com/bluesky-social/indigo/atproto/identity"
8 "github.com/bluesky-social/indigo/atproto/syntax"
9)
10
11type Resolver struct {
12 directory identity.Directory
13}
14
15func NewResolver() *Resolver {
16 return &Resolver{
17 directory: identity.DefaultDirectory(),
18 }
19}
20
21func (r *Resolver) ResolveIdent(ctx context.Context, arg string) (*identity.Identity, error) {
22 id, err := syntax.ParseAtIdentifier(arg)
23 if err != nil {
24 return nil, err
25 }
26
27 return r.directory.Lookup(ctx, *id)
28}
29
30func (r *Resolver) ResolveIdents(ctx context.Context, idents []string) []*identity.Identity {
31 results := make([]*identity.Identity, len(idents))
32 var wg sync.WaitGroup
33
34 done := make(chan struct{})
35 defer close(done)
36
37 for idx, ident := range idents {
38 wg.Add(1)
39 go func(index int, id string) {
40 defer wg.Done()
41
42 select {
43 case <-ctx.Done():
44 results[index] = nil
45 case <-done:
46 results[index] = nil
47 default:
48 identity, _ := r.ResolveIdent(ctx, id)
49 results[index] = identity
50 }
51 }(idx, ident)
52 }
53
54 wg.Wait()
55 return results
56}