···
···
tabVal := r.URL.Query().Get("tab")
28
+
s.profileHomePage(w, r)
···
39
-
func (s *State) profilePage(w http.ResponseWriter, r *http.Request) {
38
+
type ProfilePageParams struct {
39
+
Id identity.Identity
40
+
LoggedInUser *oauth.User
41
+
Card pages.ProfileCard
44
+
func (s *State) profilePage(w http.ResponseWriter, r *http.Request) *ProfilePageParams {
didOrHandle := chi.URLParam(r, "user")
42
-
http.Error(w, "Bad request", http.StatusBadRequest)
47
+
http.Error(w, "bad request", http.StatusBadRequest)
ident, ok := r.Context().Value("resolvedId").(identity.Identity)
53
+
log.Printf("malformed middleware")
54
+
w.WriteHeader(http.StatusInternalServerError)
57
+
did := ident.DID.String()
52
-
profile, err := db.GetProfile(s.db, ident.DID.String())
59
+
profile, err := db.GetProfile(s.db, did)
54
-
log.Printf("getting profile data for %s: %s", ident.DID.String(), err)
61
+
log.Printf("getting profile data for %s: %s", did, err)
66
+
followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did)
68
+
log.Printf("getting follow stats for %s: %s", did, err)
71
+
loggedInUser := s.oauth.GetUser(r)
72
+
followStatus := db.IsNotFollowing
73
+
if loggedInUser != nil {
74
+
followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, did)
77
+
return &ProfilePageParams{
79
+
LoggedInUser: loggedInUser,
80
+
Card: pages.ProfileCard{
82
+
UserHandle: ident.Handle.String(),
84
+
FollowStatus: followStatus,
85
+
FollowersCount: followersCount,
86
+
FollowingCount: followingCount,
91
+
func (s *State) profileHomePage(w http.ResponseWriter, r *http.Request) {
92
+
pageWithProfile := s.profilePage(w, r)
93
+
if pageWithProfile == nil {
97
+
id := pageWithProfile.Id
repos, err := db.GetRepos(
60
-
db.FilterEq("did", ident.DID.String()),
101
+
db.FilterEq("did", id.DID),
63
-
log.Printf("getting repos for %s: %s", ident.DID.String(), err)
104
+
log.Printf("getting repos for %s: %s", id.DID, err)
107
+
profile := pageWithProfile.Card.Profile
// filter out ones that are pinned
pinnedRepos := []db.Repo{}
for i, r := range repos {
···
80
-
collaboratingRepos, err := db.CollaboratingIn(s.db, ident.DID.String())
122
+
collaboratingRepos, err := db.CollaboratingIn(s.db, id.DID.String())
82
-
log.Printf("getting collaborating repos for %s: %s", ident.DID.String(), err)
124
+
log.Printf("getting collaborating repos for %s: %s", id.DID, err)
pinnedCollaboratingRepos := []db.Repo{}
···
93
-
timeline, err := db.MakeProfileTimeline(s.db, ident.DID.String())
135
+
timeline, err := db.MakeProfileTimeline(s.db, id.DID.String())
95
-
log.Printf("failed to create profile timeline for %s: %s", ident.DID.String(), err)
137
+
log.Printf("failed to create profile timeline for %s: %s", id.DID, err)
98
-
followers, following, err := db.GetFollowerFollowingCount(s.db, ident.DID.String())
100
-
log.Printf("getting follow stats repos for %s: %s", ident.DID.String(), err)
140
+
var didsToResolve []string
141
+
for _, r := range collaboratingRepos {
142
+
didsToResolve = append(didsToResolve, r.Did)
103
-
loggedInUser := s.oauth.GetUser(r)
104
-
followStatus := db.IsNotFollowing
105
-
if loggedInUser != nil {
106
-
followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, ident.DID.String())
144
+
for _, byMonth := range timeline.ByMonth {
145
+
for _, pe := range byMonth.PullEvents.Items {
146
+
didsToResolve = append(didsToResolve, pe.Repo.Did)
148
+
for _, ie := range byMonth.IssueEvents.Items {
149
+
didsToResolve = append(didsToResolve, ie.Metadata.Repo.Did)
151
+
for _, re := range byMonth.RepoEvents {
152
+
didsToResolve = append(didsToResolve, re.Repo.Did)
153
+
if re.Source != nil {
154
+
didsToResolve = append(didsToResolve, re.Source.Did)
startOfYear := time.Date(now.Year(), 1, 1, 0, 0, 0, 0, time.UTC)
punchcard, err := db.MakePunchcard(
113
-
db.FilterEq("did", ident.DID.String()),
163
+
db.FilterEq("did", id.DID),
db.FilterGte("date", startOfYear.Format(time.DateOnly)),
db.FilterLte("date", now.Format(time.DateOnly)),
118
-
log.Println("failed to get punchcard for did", "did", ident.DID.String(), "err", err)
168
+
log.Println("failed to get punchcard for did", "did", id.DID, "err", err)
121
-
s.pages.ProfilePage(w, pages.ProfilePageParams{
122
-
LoggedInUser: loggedInUser,
171
+
s.pages.ProfileHomePage(w, pages.ProfileHomePageParams{
172
+
LoggedInUser: pageWithProfile.LoggedInUser,
CollaboratingRepos: pinnedCollaboratingRepos,
125
-
Card: pages.ProfileCard{
126
-
UserDid: ident.DID.String(),
127
-
UserHandle: ident.Handle.String(),
129
-
FollowStatus: followStatus,
130
-
FollowersCount: followers,
131
-
FollowingCount: following,
133
-
Punchcard: punchcard,
134
-
ProfileTimeline: timeline,
175
+
Card: pageWithProfile.Card,
176
+
Punchcard: punchcard,
177
+
ProfileTimeline: timeline,
func (s *State) reposPage(w http.ResponseWriter, r *http.Request) {
139
-
ident, ok := r.Context().Value("resolvedId").(identity.Identity)
141
-
s.pages.Error404(w)
182
+
pageWithProfile := s.profilePage(w, r)
183
+
if pageWithProfile == nil {
145
-
profile, err := db.GetProfile(s.db, ident.DID.String())
147
-
log.Printf("getting profile data for %s: %s", ident.DID.String(), err)
187
+
id := pageWithProfile.Id
repos, err := db.GetRepos(
153
-
db.FilterEq("did", ident.DID.String()),
191
+
db.FilterEq("did", id.DID),
156
-
log.Printf("getting repos for %s: %s", ident.DID.String(), err)
159
-
loggedInUser := s.oauth.GetUser(r)
160
-
followStatus := db.IsNotFollowing
161
-
if loggedInUser != nil {
162
-
followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, ident.DID.String())
165
-
followers, following, err := db.GetFollowerFollowingCount(s.db, ident.DID.String())
167
-
log.Printf("getting follow stats repos for %s: %s", ident.DID.String(), err)
194
+
log.Printf("getting repos for %s: %s", id.DID, err)
s.pages.ReposPage(w, pages.ReposPageParams{
171
-
LoggedInUser: loggedInUser,
198
+
LoggedInUser: pageWithProfile.LoggedInUser,
173
-
Card: pages.ProfileCard{
174
-
UserDid: ident.DID.String(),
175
-
UserHandle: ident.Handle.String(),
177
-
FollowStatus: followStatus,
178
-
FollowersCount: followers,
179
-
FollowingCount: following,
200
+
Card: pageWithProfile.Card,
···
func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows func(db.Execer, string) ([]db.Follow, error), extractDid func(db.Follow) string) (FollowsPageParams, error) {
191
-
ident, ok := r.Context().Value("resolvedId").(identity.Identity)
193
-
s.pages.Error404(w)
194
-
return FollowsPageParams{}, errors.New("identity not found")
211
+
pageWithProfile := s.profilePage(w, r)
212
+
if pageWithProfile == nil {
213
+
return FollowsPageParams{}, nil
196
-
did := ident.DID.String()
198
-
profile, err := db.GetProfile(s.db, did)
200
-
log.Printf("getting profile data for %s: %s", did, err)
201
-
return FollowsPageParams{}, err
216
+
id := pageWithProfile.Id
217
+
loggedInUser := pageWithProfile.LoggedInUser
204
-
loggedInUser := s.oauth.GetUser(r)
206
-
follows, err := fetchFollows(s.db, did)
219
+
follows, err := fetchFollows(s.db, id.DID.String())
208
-
log.Printf("getting followers for %s: %s", did, err)
209
-
return FollowsPageParams{}, err
212
-
var loggedInUserFollowing map[string]struct{}
213
-
if loggedInUser != nil {
214
-
following, err := db.GetFollowing(s.db, loggedInUser.Did)
216
-
return FollowsPageParams{}, err
218
-
if len(following) > 0 {
219
-
loggedInUserFollowing = make(map[string]struct{}, len(following))
220
-
for _, follow := range following {
221
-
loggedInUserFollowing[follow.SubjectDid] = struct{}{}
226
-
followStatus := db.IsNotFollowing
227
-
if loggedInUser != nil {
228
-
followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, did)
231
-
followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did)
233
-
log.Printf("getting follow stats followers for %s: %s", did, err)
221
+
log.Printf("getting followers for %s: %s", id.DID, err)
return FollowsPageParams{}, err
···
return FollowsPageParams{
LoggedInUser: loggedInUser,
Follows: []pages.FollowCard{},
241
-
Card: pages.ProfileCard{
243
-
UserHandle: ident.Handle.String(),
245
-
FollowStatus: followStatus,
246
-
FollowersCount: followersCount,
247
-
FollowingCount: followingCount,
229
+
Card: pageWithProfile.Card,
···
return FollowsPageParams{}, err
244
+
var loggedInUserFollowing map[string]struct{}
245
+
if loggedInUser != nil {
246
+
following, err := db.GetFollowing(s.db, loggedInUser.Did)
248
+
return FollowsPageParams{}, err
250
+
if len(following) > 0 {
251
+
loggedInUserFollowing = make(map[string]struct{}, len(following))
252
+
for _, follow := range following {
253
+
loggedInUserFollowing[follow.SubjectDid] = struct{}{}
followCards := make([]pages.FollowCard, 0, len(follows))
for _, did := range followDids {
followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did)
···
return FollowsPageParams{
LoggedInUser: loggedInUser,
296
-
Card: pages.ProfileCard{
298
-
UserHandle: ident.Handle.String(),
300
-
FollowStatus: followStatus,
301
-
FollowersCount: followersCount,
302
-
FollowingCount: followingCount,
291
+
Card: pageWithProfile.Card,