Monorepo for Tangled tangled.org
9

Configure Feed

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

1package pulls 2 3import ( 4 "bytes" 5 "compress/gzip" 6 "fmt" 7 "io" 8 "log/slog" 9 "strings" 10 11 "tangled.org/core/appview/config" 12 "tangled.org/core/appview/db" 13 pulls_indexer "tangled.org/core/appview/indexer/pulls" 14 "tangled.org/core/appview/knotacl" 15 "tangled.org/core/appview/mentions" 16 "tangled.org/core/appview/models" 17 "tangled.org/core/appview/notify" 18 "tangled.org/core/appview/oauth" 19 "tangled.org/core/appview/pages" 20 "tangled.org/core/appview/reporesolver" 21 "tangled.org/core/idresolver" 22 "tangled.org/core/ogre" 23 "tangled.org/core/patchutil" 24 25 indigoxrpc "github.com/bluesky-social/indigo/xrpc" 26) 27 28const ApplicationGzip = "application/gzip" 29 30type Pulls struct { 31 oauth *oauth.OAuth 32 repoResolver *reporesolver.RepoResolver 33 pages *pages.Pages 34 idResolver *idresolver.Resolver 35 mentionsResolver *mentions.Resolver 36 db *db.DB 37 config *config.Config 38 notifier notify.Notifier 39 acl *knotacl.Service 40 logger *slog.Logger 41 indexer *pulls_indexer.Indexer 42 ogreClient *ogre.Client 43} 44 45func New( 46 oauth *oauth.OAuth, 47 repoResolver *reporesolver.RepoResolver, 48 pages *pages.Pages, 49 resolver *idresolver.Resolver, 50 mentionsResolver *mentions.Resolver, 51 db *db.DB, 52 config *config.Config, 53 notifier notify.Notifier, 54 acl *knotacl.Service, 55 indexer *pulls_indexer.Indexer, 56 logger *slog.Logger, 57) *Pulls { 58 return &Pulls{ 59 oauth: oauth, 60 repoResolver: repoResolver, 61 pages: pages, 62 idResolver: resolver, 63 mentionsResolver: mentionsResolver, 64 db: db, 65 config: config, 66 notifier: notifier, 67 acl: acl, 68 logger: logger, 69 indexer: indexer, 70 ogreClient: ogre.NewClient(config.Ogre.Host), 71 } 72} 73 74func (s *Pulls) knotClient(host string) *indigoxrpc.Client { 75 scheme := "https" 76 if s.config.Core.Dev { 77 scheme = "http" 78 } 79 return &indigoxrpc.Client{Host: fmt.Sprintf("%s://%s", scheme, host)} 80} 81 82func gz(s string) io.Reader { 83 var b bytes.Buffer 84 w := gzip.NewWriter(&b) 85 w.Write([]byte(s)) 86 w.Close() 87 return &b 88} 89 90func ptrPullState(s models.PullState) *models.PullState { return &s } 91 92func validatePatch(patch *string) error { 93 if patch == nil || *patch == "" { 94 return fmt.Errorf("patch is empty") 95 } 96 97 // add newline if not present to diff style patches 98 if !patchutil.IsFormatPatch(*patch) && !strings.HasSuffix(*patch, "\n") { 99 *patch = *patch + "\n" 100 } 101 102 if err := patchutil.IsPatchValid(*patch); err != nil { 103 return err 104 } 105 106 return nil 107}