Monorepo for Tangled
0
fork

Configure Feed

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

at master 95 lines 2.5 kB view raw
1package pulls 2 3import ( 4 "log" 5 "net/http" 6 "time" 7 8 "tangled.org/core/appview/db" 9 "tangled.org/core/appview/models" 10 "tangled.org/core/ogre" 11 "tangled.org/core/patchutil" 12) 13 14func (s *Pulls) PullOpenGraphSummary(w http.ResponseWriter, r *http.Request) { 15 f, err := s.repoResolver.Resolve(r) 16 if err != nil { 17 log.Println("failed to get repo and knot", err) 18 return 19 } 20 21 pull, ok := r.Context().Value("pull").(*models.Pull) 22 if !ok { 23 log.Println("pull not found in context") 24 http.Error(w, "pull not found", http.StatusNotFound) 25 return 26 } 27 28 ownerHandle := s.pages.DisplayHandle(r.Context(), f.Did) 29 authorHandle := s.pages.DisplayHandle(r.Context(), pull.OwnerDid) 30 31 avatarUrl := s.pages.AvatarUrl(f.Did, "256") 32 authorAvatarUrl := s.pages.AvatarUrl(pull.OwnerDid, "256") 33 34 var status string 35 if pull.State.IsOpen() { 36 status = "open" 37 } else if pull.State.IsMerged() { 38 status = "merged" 39 } else { 40 status = "closed" 41 } 42 43 var filesChanged int 44 var additions int64 45 var deletions int64 46 47 if len(pull.Submissions) > 0 { 48 latestSubmission := pull.LatestSubmission() 49 niceDiff := patchutil.AsNiceDiff(latestSubmission.Patch, pull.TargetBranch) 50 filesChanged = niceDiff.Stat.FilesChanged 51 additions = int64(niceDiff.Stat.Insertions) 52 deletions = int64(niceDiff.Stat.Deletions) 53 } 54 55 commentCount := pull.TotalComments() 56 57 reactionCount, _ := db.GetReactionCount(s.db, pull.AtUri()) 58 59 rounds := max(1, len(pull.Submissions)) 60 61 payload := ogre.PullRequestCardPayload{ 62 Type: "pullRequest", 63 RepoName: f.Name, 64 OwnerHandle: ownerHandle, 65 AuthorHandle: authorHandle, 66 AvatarUrl: avatarUrl, 67 AuthorAvatarUrl: authorAvatarUrl, 68 Title: pull.Title, 69 PullRequestNumber: pull.PullId, 70 Status: status, 71 FilesChanged: filesChanged, 72 Additions: int(additions), 73 Deletions: int(deletions), 74 Rounds: rounds, 75 CommentCount: commentCount, 76 ReactionCount: reactionCount, 77 CreatedAt: pull.Created.Format(time.RFC3339), 78 } 79 80 imageBytes, err := s.ogreClient.RenderPullRequestCard(r.Context(), payload) 81 if err != nil { 82 log.Println("failed to render pull request card", err) 83 http.Error(w, "failed to render pull request card", http.StatusInternalServerError) 84 return 85 } 86 87 w.Header().Set("Content-Type", "image/png") 88 w.Header().Set("Cache-Control", "public, max-age=3600") 89 w.WriteHeader(http.StatusOK) 90 _, err = w.Write(imageBytes) 91 if err != nil { 92 log.Println("failed to write pull request card", err) 93 return 94 } 95}