diff --git a/appview/db/timeline.go b/appview/db/timeline.go index 79504692..5f1d665a 100644 --- a/appview/db/timeline.go +++ b/appview/db/timeline.go @@ -37,7 +37,7 @@ func MakeTimeline(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, return nil, err } - stars, err := getTimelineStars(e, limit) + stars, err := getTimelineStars(e, limit, loggedInUserDid) if err != nil { return nil, err } @@ -63,6 +63,33 @@ func MakeTimeline(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, return events, nil } +func fetchStarStatuses(e Execer, loggedInUserDid string, repos []Repo) (map[string]bool, error) { + if loggedInUserDid == "" { + return nil, nil + } + + var repoAts []syntax.ATURI + for _, r := range repos { + repoAts = append(repoAts, r.RepoAt()) + } + + return GetStarStatuses(e, loggedInUserDid, repoAts) +} + +func getRepoStarInfo(repo *Repo, starStatuses map[string]bool) (bool, int64) { + var isStarred bool + if starStatuses != nil { + isStarred = starStatuses[repo.RepoAt().String()] + } + + var starCount int64 + if repo.RepoStats != nil { + starCount = int64(repo.RepoStats.StarCount) + } + + return isStarred, starCount +} + func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) { repos, err := GetRepos(e, limit) if err != nil { @@ -90,17 +117,9 @@ func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEv uriToRepo[r.RepoAt().String()] = r } - var starStatuses map[string]bool - if loggedInUserDid != "" { - var repoAts []syntax.ATURI - for _, r := range repos { - repoAts = append(repoAts, r.RepoAt()) - } - var err error - starStatuses, err = GetStarStatuses(e, loggedInUserDid, repoAts) - if err != nil { - return nil, err - } + starStatuses, err := fetchStarStatuses(e, loggedInUserDid, repos) + if err != nil { + return nil, err } var events []TimelineEvent @@ -112,15 +131,7 @@ func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEv } } - var isStarred bool - if starStatuses != nil { - isStarred = starStatuses[r.RepoAt().String()] - } - - var starCount int64 - if r.RepoStats != nil { - starCount = int64(r.RepoStats.StarCount) - } + isStarred, starCount := getRepoStarInfo(&r, starStatuses) events = append(events, TimelineEvent{ Repo: &r, @@ -134,7 +145,7 @@ func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEv return events, nil } -func getTimelineStars(e Execer, limit int) ([]TimelineEvent, error) { +func getTimelineStars(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) { stars, err := GetStars(e, limit) if err != nil { return nil, err @@ -150,11 +161,25 @@ func getTimelineStars(e Execer, limit int) ([]TimelineEvent, error) { } stars = stars[:n] + var repos []Repo + for _, s := range stars { + repos = append(repos, *s.Repo) + } + + starStatuses, err := fetchStarStatuses(e, loggedInUserDid, repos) + if err != nil { + return nil, err + } + var events []TimelineEvent for _, s := range stars { + isStarred, starCount := getRepoStarInfo(s.Repo, starStatuses) + events = append(events, TimelineEvent{ - Star: &s, - EventAt: s.Created, + Star: &s, + EventAt: s.Created, + IsStarred: isStarred, + StarCount: starCount, }) } diff --git a/appview/pages/templates/timeline/fragments/timeline.html b/appview/pages/templates/timeline/fragments/timeline.html index 6adb4e10..b420c048 100644 --- a/appview/pages/templates/timeline/fragments/timeline.html +++ b/appview/pages/templates/timeline/fragments/timeline.html @@ -15,7 +15,7 @@ {{ if .Repo }} {{ template "timeline/fragments/repoEvent" (list $ .) }} {{ else if .Star }} - {{ template "timeline/fragments/starEvent" (list $ .Star) }} + {{ template "timeline/fragments/starEvent" (list $ .) }} {{ else if .Follow }} {{ template "timeline/fragments/followEvent" (list $ .) }} {{ end }} @@ -58,7 +58,8 @@ {{ define "timeline/fragments/starEvent" }} {{ $root := index . 0 }} - {{ $star := index . 1 }} + {{ $event := index . 1 }} + {{ $star := $event.Star }} {{ with $star }} {{ $starrerHandle := resolve .StarredByDid }} {{ $repoOwnerHandle := resolve .Repo.Did }} @@ -71,7 +72,7 @@ {{ template "repo/fragments/time" .Created }} {{ with .Repo }} - {{ template "user/fragments/repoCard" (list $root . true) }} + {{ template "user/fragments/repoCard" (list $root . true true (dict "IsStarred" $event.IsStarred "RepoAt" .RepoAt "Stats" (dict "StarCount" $event.StarCount))) }} {{ end }} {{ end }} {{ end }}