Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).
at master 81 lines 1.9 kB view raw
1package issues 2 3import ( 4 "context" 5 "log" 6 "net/http" 7 "time" 8 9 "tangled.org/core/appview/models" 10 "tangled.org/core/ogre" 11) 12 13func (rp *Issues) IssueOpenGraphSummary(w http.ResponseWriter, r *http.Request) { 14 f, err := rp.repoResolver.Resolve(r) 15 if err != nil { 16 log.Println("failed to get repo and knot", err) 17 return 18 } 19 20 issue, ok := r.Context().Value("issue").(*models.Issue) 21 if !ok { 22 log.Println("issue not found in context") 23 http.Error(w, "issue not found", http.StatusNotFound) 24 return 25 } 26 27 var ownerHandle string 28 owner, err := rp.idResolver.ResolveIdent(context.Background(), f.Did) 29 if err != nil { 30 ownerHandle = f.Did 31 } else { 32 ownerHandle = owner.Handle.String() 33 } 34 35 var authorHandle string 36 author, err := rp.idResolver.ResolveIdent(context.Background(), issue.Did) 37 if err != nil { 38 authorHandle = issue.Did 39 } else { 40 authorHandle = "@" + author.Handle.String() 41 } 42 43 avatarUrl := rp.pages.AvatarUrl(authorHandle, "256") 44 45 status := "closed" 46 if issue.Open { 47 status = "open" 48 } 49 50 commentCount := len(issue.Comments) 51 52 payload := ogre.IssueCardPayload{ 53 Type: "issue", 54 RepoName: f.Name, 55 OwnerHandle: ownerHandle, 56 AvatarUrl: avatarUrl, 57 Title: issue.Title, 58 IssueNumber: issue.IssueId, 59 Status: status, 60 Labels: []ogre.LabelData{}, 61 CommentCount: commentCount, 62 ReactionCount: 0, 63 CreatedAt: issue.Created.Format(time.RFC3339), 64 } 65 66 imageBytes, err := rp.ogreClient.RenderIssueCard(r.Context(), payload) 67 if err != nil { 68 log.Println("failed to render issue card", err) 69 http.Error(w, "failed to render issue card", http.StatusInternalServerError) 70 return 71 } 72 73 w.Header().Set("Content-Type", "image/png") 74 w.Header().Set("Cache-Control", "public, max-age=3600") 75 w.WriteHeader(http.StatusOK) 76 _, err = w.Write(imageBytes) 77 if err != nil { 78 log.Println("failed to write issue card", err) 79 return 80 } 81}