forked from
tangled.org/core
Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).
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}