Monorepo for Tangled tangled.org
2

Configure Feed

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

1package repo 2 3import ( 4 "log" 5 "net/http" 6 "time" 7 8 "github.com/bluesky-social/indigo/atproto/syntax" 9 "tangled.org/core/ogre" 10) 11 12const MaxOpengraphLanguageKinds = 4 13 14func (rp *Repo) Opengraph(w http.ResponseWriter, r *http.Request) { 15 f, err := rp.repoResolver.Resolve(r) 16 if err != nil { 17 log.Println("failed to get repo and knot", err) 18 return 19 } 20 21 ownerHandle := rp.pages.DisplayHandle(r.Context(), f.Did) 22 23 avatarUrl := rp.pages.AvatarUrl(f.Did, "256") 24 25 langs, err := rp.getLanguageInfo(r.Context(), syntax.DID(f.RepoDid), "") 26 if err != nil { 27 log.Printf("failed to get language stats from knotmirror: %v", err) 28 } 29 languageStats := makeLanguageStats(langs) 30 31 ogLanguages := []ogre.LanguageData{} 32 for _, lang := range languageStats { 33 if len(ogLanguages) > MaxOpengraphLanguageKinds { 34 break 35 } 36 ogLanguages = append(ogLanguages, ogre.LanguageData{ 37 Color: lang.Color, 38 Percentage: lang.Percentage, 39 }) 40 } 41 42 payload := ogre.RepositoryCardPayload{ 43 Type: "repository", 44 RepoName: f.Name, 45 OwnerHandle: ownerHandle, 46 Stars: f.RepoStats.StarCount, 47 Pulls: f.RepoStats.PullCount.Open, 48 Issues: f.RepoStats.IssueCount.Open, 49 CreatedAt: f.Created.Format(time.RFC3339), 50 AvatarUrl: avatarUrl, 51 Languages: ogLanguages, 52 } 53 54 imageBytes, err := rp.ogreClient.RenderRepositoryCard(r.Context(), payload) 55 if err != nil { 56 log.Println("failed to render repository card", err) 57 http.Error(w, "failed to render repository card", http.StatusInternalServerError) 58 return 59 } 60 61 w.Header().Set("Content-Type", "image/png") 62 w.Header().Set("Cache-Control", "public, max-age=3600") 63 w.WriteHeader(http.StatusOK) 64 _, err = w.Write(imageBytes) 65 if err != nil { 66 log.Println("failed to write repository card", err) 67 return 68 } 69}