59 lines
1.4 KiB
Go
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
|
|
}
|