This repository has no description
1package pulls
2
3import (
4 "log/slog"
5 "time"
6
7 "tangled.org/core/appview/config"
8 "tangled.org/core/appview/db"
9 pulls_indexer "tangled.org/core/appview/indexer/pulls"
10 "tangled.org/core/appview/knotacl"
11 "tangled.org/core/appview/mentions"
12 "tangled.org/core/appview/models"
13 "tangled.org/core/appview/notify"
14 "tangled.org/core/appview/oauth"
15 "tangled.org/core/appview/pages"
16 "tangled.org/core/appview/reporesolver"
17 knotmirror "tangled.org/core/gitmirror/proto/gen"
18 "tangled.org/core/idresolver"
19 "tangled.org/core/ogre"
20 "tangled.org/core/types"
21
22 "github.com/bluesky-social/indigo/util"
23 indigoxrpc "github.com/bluesky-social/indigo/xrpc"
24 "github.com/hashicorp/golang-lru/v2/expirable"
25)
26
27const ApplicationGzip = "application/gzip"
28
29const (
30 diffCacheSize = 128
31 diffCacheTTL = 15 * time.Minute
32)
33
34type Pulls struct {
35 oauth *oauth.OAuth
36 repoResolver *reporesolver.RepoResolver
37 pages *pages.Pages
38 idResolver *idresolver.Resolver
39 mentionsResolver *mentions.Resolver
40 db *db.DB
41 config *config.Config
42 notifier notify.Notifier
43 acl *knotacl.Service
44 logger *slog.Logger
45 indexer *pulls_indexer.Indexer
46 ogreClient *ogre.Client
47 diffCache *expirable.LRU[string, types.DiffRenderer]
48 gitmirror knotmirror.GitMirrorServiceClient
49
50 knotMirrorXRPC *indigoxrpc.Client
51}
52
53func New(
54 oauth *oauth.OAuth,
55 repoResolver *reporesolver.RepoResolver,
56 pages *pages.Pages,
57 resolver *idresolver.Resolver,
58 mentionsResolver *mentions.Resolver,
59 db *db.DB,
60 config *config.Config,
61 notifier notify.Notifier,
62 acl *knotacl.Service,
63 indexer *pulls_indexer.Indexer,
64 logger *slog.Logger,
65 gitmirror knotmirror.GitMirrorServiceClient,
66) *Pulls {
67 return &Pulls{
68 oauth: oauth,
69 repoResolver: repoResolver,
70 pages: pages,
71 idResolver: resolver,
72 mentionsResolver: mentionsResolver,
73 db: db,
74 config: config,
75 notifier: notifier,
76 acl: acl,
77 logger: logger,
78 indexer: indexer,
79 ogreClient: ogre.NewClient(config.Ogre.Host),
80 diffCache: expirable.NewLRU[string, types.DiffRenderer](diffCacheSize, nil, diffCacheTTL),
81 gitmirror: gitmirror,
82
83 knotMirrorXRPC: &indigoxrpc.Client{
84 Host: config.KnotMirror.Url,
85 Client: util.RobustHTTPClient(),
86 },
87 }
88}
89
90func ptrPullState(s models.PullState) *models.PullState { return &s }