Signed-off-by: Anirudh Oppiliappan anirudh@tangled.sh
+21
-5
appview/db/timeline.go
+21
-5
appview/db/timeline.go
···
19
*Profile
20
*FollowStats
21
*FollowStatus
22
}
23
24
// TODO: this gathers heterogenous events from different sources and aggregates
···
26
func MakeTimeline(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) {
27
var events []TimelineEvent
28
29
-
repos, err := getTimelineRepos(e, limit)
30
if err != nil {
31
return nil, err
32
}
···
57
return events, nil
58
}
59
60
-
func getTimelineRepos(e Execer, limit int) ([]TimelineEvent, error) {
61
repos, err := GetRepos(e, limit)
62
if err != nil {
63
return nil, err
···
93
}
94
}
95
96
events = append(events, TimelineEvent{
97
-
Repo: &r,
98
-
EventAt: r.Created,
99
-
Source: source,
100
})
101
}
102
···
19
*Profile
20
*FollowStats
21
*FollowStatus
22
+
23
+
// optional: populate only if event is Repo
24
+
IsStarred bool
25
+
StarCount int64
26
}
27
28
// TODO: this gathers heterogenous events from different sources and aggregates
···
30
func MakeTimeline(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) {
31
var events []TimelineEvent
32
33
+
repos, err := getTimelineRepos(e, limit, loggedInUserDid)
34
if err != nil {
35
return nil, err
36
}
···
61
return events, nil
62
}
63
64
+
func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) {
65
repos, err := GetRepos(e, limit)
66
if err != nil {
67
return nil, err
···
97
}
98
}
99
100
+
var isStarred bool
101
+
if loggedInUserDid != "" {
102
+
isStarred = GetStarStatus(e, loggedInUserDid, r.RepoAt())
103
+
}
104
+
105
+
var starCount int64
106
+
if r.RepoStats != nil {
107
+
starCount = int64(r.RepoStats.StarCount)
108
+
}
109
+
110
events = append(events, TimelineEvent{
111
+
Repo: &r,
112
+
EventAt: r.Created,
113
+
Source: source,
114
+
IsStarred: isStarred,
115
+
StarCount: starCount,
116
})
117
}
118
+5
-4
appview/pages/templates/timeline/fragments/timeline.html
+5
-4
appview/pages/templates/timeline/fragments/timeline.html
···
13
{{ with $e }}
14
<div class="flex flex-col divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-sm">
15
{{ if .Repo }}
16
-
{{ template "timeline/fragments/repoEvent" (list $ .Repo .Source) }}
17
{{ else if .Star }}
18
{{ template "timeline/fragments/starEvent" (list $ .Star) }}
19
{{ else if .Follow }}
···
29
30
{{ define "timeline/fragments/repoEvent" }}
31
{{ $root := index . 0 }}
32
-
{{ $repo := index . 1 }}
33
-
{{ $source := index . 2 }}
34
{{ $userHandle := resolve $repo.Did }}
35
<div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm">
36
{{ template "user/fragments/picHandleLink" $repo.Did }}
···
51
<span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" $repo.Created }}</span>
52
</div>
53
{{ with $repo }}
54
-
{{ template "user/fragments/repoCard" (list $root . true) }}
55
{{ end }}
56
{{ end }}
57
···
13
{{ with $e }}
14
<div class="flex flex-col divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-sm">
15
{{ if .Repo }}
16
+
{{ template "timeline/fragments/repoEvent" (list $ .) }}
17
{{ else if .Star }}
18
{{ template "timeline/fragments/starEvent" (list $ .Star) }}
19
{{ else if .Follow }}
···
29
30
{{ define "timeline/fragments/repoEvent" }}
31
{{ $root := index . 0 }}
32
+
{{ $event := index . 1 }}
33
+
{{ $repo := $event.Repo }}
34
+
{{ $source := $event.Source }}
35
{{ $userHandle := resolve $repo.Did }}
36
<div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm">
37
{{ template "user/fragments/picHandleLink" $repo.Did }}
···
52
<span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" $repo.Created }}</span>
53
</div>
54
{{ with $repo }}
55
+
{{ template "user/fragments/repoCard" (list $root . true true (dict "IsStarred" $event.IsStarred "RepoAt" .RepoAt "Stats" (dict "StarCount" $event.StarCount))) }}
56
{{ end }}
57
{{ end }}
58
+21
-7
appview/pages/templates/user/fragments/repoCard.html
+21
-7
appview/pages/templates/user/fragments/repoCard.html
···
2
{{ $root := index . 0 }}
3
{{ $repo := index . 1 }}
4
{{ $fullName := index . 2 }}
5
6
{{ with $repo }}
7
<div class="py-4 px-6 gap-1 flex flex-col drop-shadow-sm rounded bg-white dark:bg-gray-800 min-h-32">
8
-
<div class="font-medium dark:text-white flex items-center">
9
{{ if .Source }}
10
{{ i "git-fork" "w-4 h-4 mr-1.5 shrink-0" }}
11
{{ else }}
12
{{ i "book-marked" "w-4 h-4 mr-1.5 shrink-0" }}
13
{{ end }}
14
15
-
{{ $repoOwner := resolve .Did }}
16
-
{{- if $fullName -}}
17
-
<a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ $repoOwner }}/{{ .Name }}</a>
18
-
{{- else -}}
19
-
<a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ .Name }}</a>
20
-
{{- end -}}
21
</div>
22
{{ with .Description }}
23
<div class="text-gray-600 dark:text-gray-300 text-sm line-clamp-2">
···
2
{{ $root := index . 0 }}
3
{{ $repo := index . 1 }}
4
{{ $fullName := index . 2 }}
5
+
{{ $starButton := false }}
6
+
{{ $starData := dict }}
7
+
{{ if gt (len .) 3 }}
8
+
{{ $starButton = index . 3 }}
9
+
{{ if gt (len .) 4 }}
10
+
{{ $starData = index . 4 }}
11
+
{{ end }}
12
+
{{ end }}
13
14
{{ with $repo }}
15
<div class="py-4 px-6 gap-1 flex flex-col drop-shadow-sm rounded bg-white dark:bg-gray-800 min-h-32">
16
+
<div class="font-medium dark:text-white flex items-center justify-between">
17
+
<div class="flex items-center">
18
{{ if .Source }}
19
{{ i "git-fork" "w-4 h-4 mr-1.5 shrink-0" }}
20
{{ else }}
21
{{ i "book-marked" "w-4 h-4 mr-1.5 shrink-0" }}
22
{{ end }}
23
24
+
{{ $repoOwner := resolve .Did }}
25
+
{{- if $fullName -}}
26
+
<a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ $repoOwner }}/{{ .Name }}</a>
27
+
{{- else -}}
28
+
<a href="/{{ $repoOwner }}/{{ .Name }}" class="truncate">{{ .Name }}</a>
29
+
{{- end -}}
30
+
</div>
31
+
32
+
{{ if and $starButton $root.LoggedInUser }}
33
+
{{ template "repo/fragments/repoStar" $starData }}
34
+
{{ end }}
35
</div>
36
{{ with .Description }}
37
<div class="text-gray-600 dark:text-gray-300 text-sm line-clamp-2">