Files
silo-server/internal/catalog/user_data_rollup.go
T
QuickandGitHub cac435c4b9 Fix watch-state unwatch sync across user data and Jellyfin mappings (#179)
* Refine playback session handling and API responses

* fix(watchstate): harden completed-history visibility
2026-06-18 19:17:22 -04:00

45 lines
1.1 KiB
Go

package catalog
import (
"github.com/Silo-Server/silo-server/internal/models"
"github.com/Silo-Server/silo-server/internal/userstore"
)
// EpisodeRollupUserData computes aggregate watch state for a season or series
// from pre-fetched per-episode progress. Completed history should already be
// folded into progressMap by the caller's userstore helper.
func EpisodeRollupUserData(episodes []*models.Episode, progressMap map[string]userstore.WatchProgress) *SeasonUserData {
if len(episodes) == 0 {
return &SeasonUserData{}
}
watchedCount := 0
inProgressCount := 0
totalEpisodes := 0
for _, ep := range episodes {
if ep == nil {
continue
}
totalEpisodes++
progress, ok := progressMap[ep.ContentID]
if ok && progress.Completed {
watchedCount++
continue
}
if ok && progress.PositionSeconds > 0 {
inProgressCount++
}
}
if totalEpisodes == 0 {
return &SeasonUserData{}
}
unplayedCount := totalEpisodes - watchedCount
return &SeasonUserData{
WatchedCount: watchedCount,
UnplayedCount: unplayedCount,
InProgressCount: inProgressCount,
Played: watchedCount == totalEpisodes,
}
}