ライブラリを番組一覧・番組ページ・再生の3段にする(ステップ12)
This commit is contained in:
@@ -231,6 +231,71 @@ func (f *fakeJobStore) ListSucceededJobs(_ context.Context, limit int) ([]store.
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (f *fakeJobStore) ListLibrarySeries(_ context.Context) ([]store.LibrarySeries, error) {
|
||||
if f.err != nil {
|
||||
return nil, f.err
|
||||
}
|
||||
bySeries := make(map[string]*store.LibrarySeries)
|
||||
latestIDs := make(map[string]int64)
|
||||
for _, job := range f.jobs {
|
||||
if job.Status != "succeeded" {
|
||||
continue
|
||||
}
|
||||
item := bySeries[job.SeriesID]
|
||||
if item == nil {
|
||||
item = &store.LibrarySeries{SeriesID: job.SeriesID}
|
||||
bySeries[job.SeriesID] = item
|
||||
}
|
||||
item.EpisodeCount++
|
||||
if job.FileSizeBytes != nil {
|
||||
item.TotalSizeBytes += *job.FileSizeBytes
|
||||
}
|
||||
current := store.Job{ID: latestIDs[job.SeriesID], FinishedAt: item.LatestFinishedAt}
|
||||
if item.SeriesTitle == "" || jobFinishedLater(job, current) {
|
||||
item.SeriesTitle = job.SeriesTitle
|
||||
item.LatestTitle = job.Title
|
||||
item.BroadcasterName = job.BroadcasterName
|
||||
item.ThumbnailPath = job.ThumbnailPath
|
||||
if job.FinishedAt != nil {
|
||||
finished := *job.FinishedAt
|
||||
item.LatestFinishedAt = &finished
|
||||
}
|
||||
latestIDs[job.SeriesID] = job.ID
|
||||
}
|
||||
_, item.Subscribed = f.subscriptions[job.SeriesID]
|
||||
}
|
||||
result := make([]store.LibrarySeries, 0, len(bySeries))
|
||||
for _, item := range bySeries {
|
||||
result = append(result, *item)
|
||||
}
|
||||
sort.Slice(result, func(i, j int) bool {
|
||||
left, right := result[i].LatestFinishedAt, result[j].LatestFinishedAt
|
||||
if left == nil || right == nil {
|
||||
if left != right {
|
||||
return left != nil
|
||||
}
|
||||
} else if !left.Equal(*right) {
|
||||
return left.After(*right)
|
||||
}
|
||||
return result[i].SeriesID < result[j].SeriesID
|
||||
})
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (f *fakeJobStore) ListSucceededJobsBySeries(_ context.Context, seriesID string) ([]store.Job, error) {
|
||||
if f.err != nil {
|
||||
return nil, f.err
|
||||
}
|
||||
var result []store.Job
|
||||
for _, job := range f.jobs {
|
||||
if job.Status == "succeeded" && job.SeriesID == seriesID {
|
||||
result = append(result, job)
|
||||
}
|
||||
}
|
||||
sortJobsLatest(result)
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (f *fakeJobStore) GetSucceededJob(_ context.Context, id int64) (store.Job, error) {
|
||||
if f.err != nil {
|
||||
return store.Job{}, f.err
|
||||
|
||||
Reference in New Issue
Block a user