Files
silo-server/internal/catalog/history_display.go
T

59 lines
1.4 KiB
Go

package catalog
import (
"context"
"strings"
"github.com/Silo-Server/silo-server/internal/userstore"
)
func ResolveHistoryDisplayIDs(ctx context.Context, entries []userstore.WatchHistoryEntry, episodeRepo *EpisodeRepository) ([]string, error) {
episodeSeriesByID := make(map[string]string)
if episodeRepo != nil {
episodeIDs := make([]string, 0, len(entries))
seenEpisodeIDs := make(map[string]struct{}, len(entries))
for _, entry := range entries {
mediaItemID := strings.TrimSpace(entry.MediaItemID)
if mediaItemID == "" {
continue
}
if _, ok := seenEpisodeIDs[mediaItemID]; ok {
continue
}
seenEpisodeIDs[mediaItemID] = struct{}{}
episodeIDs = append(episodeIDs, mediaItemID)
}
episodes, err := episodeRepo.GetByIDs(ctx, episodeIDs)
if err != nil {
return nil, err
}
for _, episode := range episodes {
if episode == nil {
continue
}
if seriesID := strings.TrimSpace(episode.SeriesID); seriesID != "" {
episodeSeriesByID[episode.ContentID] = seriesID
}
}
}
ids := make([]string, 0, len(entries))
seen := make(map[string]struct{}, len(entries))
for _, entry := range entries {
displayID := strings.TrimSpace(entry.MediaItemID)
if seriesID, ok := episodeSeriesByID[displayID]; ok {
displayID = seriesID
}
if displayID == "" {
continue
}
if _, ok := seen[displayID]; ok {
continue
}
seen[displayID] = struct{}{}
ids = append(ids, displayID)
}
return ids, nil
}