+38
-10
appview/db/timeline.go
+38
-10
appview/db/timeline.go
···
9
10
// TODO: this gathers heterogenous events from different sources and aggregates
11
// them in code; if we did this entirely in sql, we could order and limit and paginate easily
12
-
func MakeTimeline(e Execer, limit int, loggedInUserDid string) ([]models.TimelineEvent, error) {
13
var events []models.TimelineEvent
14
15
-
repos, err := getTimelineRepos(e, limit, loggedInUserDid)
16
if err != nil {
17
return nil, err
18
}
19
20
-
stars, err := getTimelineStars(e, limit, loggedInUserDid)
21
if err != nil {
22
return nil, err
23
}
24
25
-
follows, err := getTimelineFollows(e, limit, loggedInUserDid)
26
if err != nil {
27
return nil, err
28
}
···
70
return isStarred, starCount
71
}
72
73
-
func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]models.TimelineEvent, error) {
74
-
repos, err := GetRepos(e, limit)
75
if err != nil {
76
return nil, err
77
}
···
125
return events, nil
126
}
127
128
-
func getTimelineStars(e Execer, limit int, loggedInUserDid string) ([]models.TimelineEvent, error) {
129
-
stars, err := GetStars(e, limit)
130
if err != nil {
131
return nil, err
132
}
···
166
return events, nil
167
}
168
169
-
func getTimelineFollows(e Execer, limit int, loggedInUserDid string) ([]models.TimelineEvent, error) {
170
-
follows, err := GetFollows(e, limit)
171
if err != nil {
172
return nil, err
173
}
···
9
10
// TODO: this gathers heterogenous events from different sources and aggregates
11
// them in code; if we did this entirely in sql, we could order and limit and paginate easily
12
+
func MakeTimeline(e Execer, limit int, loggedInUserDid string, limitToUsersIsFollowing bool) ([]models.TimelineEvent, error) {
13
var events []models.TimelineEvent
14
15
+
var userIsFollowing []string
16
+
if limitToUsersIsFollowing {
17
+
following, err := GetFollowing(e, loggedInUserDid)
18
+
if err != nil {
19
+
return nil, err
20
+
}
21
+
22
+
userIsFollowing = make([]string, 0, len(following))
23
+
for _, follow := range following {
24
+
userIsFollowing = append(userIsFollowing, follow.SubjectDid)
25
+
}
26
+
}
27
+
28
+
repos, err := getTimelineRepos(e, limit, loggedInUserDid, userIsFollowing)
29
if err != nil {
30
return nil, err
31
}
32
33
+
stars, err := getTimelineStars(e, limit, loggedInUserDid, userIsFollowing)
34
if err != nil {
35
return nil, err
36
}
37
38
+
follows, err := getTimelineFollows(e, limit, loggedInUserDid, userIsFollowing)
39
if err != nil {
40
return nil, err
41
}
···
83
return isStarred, starCount
84
}
85
86
+
func getTimelineRepos(e Execer, limit int, loggedInUserDid string, userIsFollowing []string) ([]models.TimelineEvent, error) {
87
+
filters := make([]filter, 0)
88
+
if userIsFollowing != nil {
89
+
filters = append(filters, FilterIn("did", userIsFollowing))
90
+
}
91
+
92
+
repos, err := GetRepos(e, limit, filters...)
93
if err != nil {
94
return nil, err
95
}
···
143
return events, nil
144
}
145
146
+
func getTimelineStars(e Execer, limit int, loggedInUserDid string, userIsFollowing []string) ([]models.TimelineEvent, error) {
147
+
filters := make([]filter, 0)
148
+
if userIsFollowing != nil {
149
+
filters = append(filters, FilterIn("starred_by_did", userIsFollowing))
150
+
}
151
+
152
+
stars, err := GetStars(e, limit, filters...)
153
if err != nil {
154
return nil, err
155
}
···
189
return events, nil
190
}
191
192
+
func getTimelineFollows(e Execer, limit int, loggedInUserDid string, userIsFollowing []string) ([]models.TimelineEvent, error) {
193
+
filters := make([]filter, 0)
194
+
if userIsFollowing != nil {
195
+
filters = append(filters, FilterIn("user_did", userIsFollowing))
196
+
}
197
+
198
+
follows, err := GetFollows(e, limit, filters...)
199
if err != nil {
200
return nil, err
201
}
+8
-2
appview/state/state.go
+8
-2
appview/state/state.go
···
258
func (s *State) Timeline(w http.ResponseWriter, r *http.Request) {
259
user := s.oauth.GetUser(r)
260
261
var userDid string
262
if user != nil {
263
userDid = user.Did
264
}
265
-
timeline, err := db.MakeTimeline(s.db, 50, userDid)
266
if err != nil {
267
log.Println(err)
268
s.pages.Notice(w, "timeline", "Uh oh! Failed to load timeline.")
···
326
}
327
328
func (s *State) Home(w http.ResponseWriter, r *http.Request) {
329
-
timeline, err := db.MakeTimeline(s.db, 5, "")
330
if err != nil {
331
log.Println(err)
332
s.pages.Notice(w, "timeline", "Uh oh! Failed to load timeline.")
···
258
func (s *State) Timeline(w http.ResponseWriter, r *http.Request) {
259
user := s.oauth.GetUser(r)
260
261
+
// TODO: set this flag based on the UI
262
+
filtered := false
263
+
264
var userDid string
265
if user != nil {
266
userDid = user.Did
267
}
268
+
timeline, err := db.MakeTimeline(s.db, 50, userDid, filtered)
269
if err != nil {
270
log.Println(err)
271
s.pages.Notice(w, "timeline", "Uh oh! Failed to load timeline.")
···
329
}
330
331
func (s *State) Home(w http.ResponseWriter, r *http.Request) {
332
+
// TODO: set this flag based on the UI
333
+
filtered := false
334
+
335
+
timeline, err := db.MakeTimeline(s.db, 5, "", filtered)
336
if err != nil {
337
log.Println(err)
338
s.pages.Notice(w, "timeline", "Uh oh! Failed to load timeline.")