Monorepo for Tangled
1package state
2
3import (
4 "net/http"
5
6 "tangled.org/core/appview/db"
7 "tangled.org/core/appview/pages"
8 "tangled.org/core/orm"
9)
10
11func (s *State) Home(w http.ResponseWriter, r *http.Request) {
12 // TODO: set this flag based on the UI
13 filtered := false
14
15 user := s.oauth.GetMultiAccountUser(r)
16
17 timeline, err := db.MakeTimeline(s.db, 50, "", filtered)
18 if err != nil {
19 s.logger.Error("failed to make timeline", "err", err)
20 s.pages.Notice(w, "timeline", "Uh oh! Failed to load timeline.")
21 return
22 }
23
24 blueskyPosts, err := db.GetBlueskyPosts(s.db, 8)
25 if err != nil {
26 s.logger.Error("failed to get bluesky posts", "err", err)
27 }
28
29 s.pages.Home(w, pages.TimelineParams{
30 LoggedInUser: user,
31 Timeline: timeline,
32 BlueskyPosts: blueskyPosts,
33 })
34}
35func (s *State) HomeOrTimeline(w http.ResponseWriter, r *http.Request) {
36 if s.oauth.GetMultiAccountUser(r) != nil {
37 s.Timeline(w, r)
38 return
39 }
40 s.Home(w, r)
41}
42
43func (s *State) Timeline(w http.ResponseWriter, r *http.Request) {
44 user := s.oauth.GetMultiAccountUser(r)
45
46 // TODO: set this flag based on the UI
47 filtered := false
48
49 var userDid string
50 if user != nil && user.Active != nil {
51 userDid = user.Active.Did
52 }
53 timeline, err := db.MakeTimeline(s.db, 50, userDid, filtered)
54 if err != nil {
55 s.logger.Error("failed to make timeline", "err", err)
56 s.pages.Notice(w, "timeline", "Uh oh! Failed to load timeline.")
57 }
58
59 repos, err := db.GetTopStarredReposLastWeek(s.db)
60 if err != nil {
61 s.logger.Error("failed to get top starred repos", "err", err)
62 s.pages.Notice(w, "topstarredrepos", "Unable to load.")
63 return
64 }
65
66 gfiLabel, err := db.GetLabelDefinition(s.db, orm.FilterEq("at_uri", s.config.Label.GoodFirstIssue))
67 if err != nil {
68 // non-fatal
69 }
70
71 s.pages.Timeline(w, pages.TimelineParams{
72 LoggedInUser: user,
73 Timeline: timeline,
74 Repos: repos,
75 GfiLabel: gfiLabel,
76 })
77}