From d5ee434d8e25630745b52e43cfeeb0221486f5ce Mon Sep 17 00:00:00 2001 From: mkelvers Date: Wed, 6 May 2026 14:09:15 +0200 Subject: [PATCH] fix: resolve build error in playback service --- api/playback/proxy_security.go | 1 + api/playback/service_base.go | 18 ++++++++++++++++++ api/playback/service_sources.go | 1 + api/playback/types.go | 14 ++++++++------ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/api/playback/proxy_security.go b/api/playback/proxy_security.go index 5559a9d..78cd4f4 100644 --- a/api/playback/proxy_security.go +++ b/api/playback/proxy_security.go @@ -134,6 +134,7 @@ func (s *Service) buildClientModeSources(modeSources map[string]ModeSource) (map clientModeSources[mode] = ModeSource{ Token: streamToken, Subtitles: subtitles, + Qualities: source.Qualities, } } diff --git a/api/playback/service_base.go b/api/playback/service_base.go index ba83a6c..8e0c62e 100644 --- a/api/playback/service_base.go +++ b/api/playback/service_base.go @@ -326,6 +326,7 @@ func (s *Service) fetchPlaybackSourcesAndSegments(ctx context.Context, showID st URL: resolved.URL, Referer: resolved.Referer, Subtitles: toSubtitleItems(resolved), + Qualities: toQualities(resolved.AvailableQualities), }, OK: true, } @@ -368,6 +369,22 @@ func (s *Service) GetEpisodeMetadata(ctx context.Context, malID int, episode str return s.allAnimeClient.GetEpisodeMetadata(ctx, showID, episode) } +func toQualities(sources []StreamSource) []string { + seen := make(map[string]struct{}) + var qualities []string + for _, s := range sources { + q := strings.TrimSpace(s.Quality) + if q == "" || q == "auto" { + continue + } + if _, ok := seen[q]; !ok { + seen[q] = struct{}{} + qualities = append(qualities, q) + } + } + return qualities +} + func cloneSlice[T any](items []T) []T { if items == nil { return []T{} @@ -390,6 +407,7 @@ func cloneModeSources(modeSources map[string]ModeSource) map[string]ModeSource { URL: source.URL, Referer: source.Referer, Subtitles: cloneSlice(source.Subtitles), + Qualities: cloneSlice(source.Qualities), } } return cloned diff --git a/api/playback/service_sources.go b/api/playback/service_sources.go index 2ed3ae4..02d1d50 100644 --- a/api/playback/service_sources.go +++ b/api/playback/service_sources.go @@ -52,6 +52,7 @@ func (s *Service) resolveModeSourceWithCache( return StreamSource{}, err } + selected.AvailableQualities = sources return selected, nil } diff --git a/api/playback/types.go b/api/playback/types.go index ca9db4d..35175e8 100644 --- a/api/playback/types.go +++ b/api/playback/types.go @@ -1,12 +1,13 @@ package playback type StreamSource struct { - URL string - Quality string - Provider string - Type string - Referer string - Subtitles []Subtitle + URL string + Quality string + Provider string + Type string + Referer string + Subtitles []Subtitle + AvailableQualities []StreamSource } type Subtitle struct { @@ -19,6 +20,7 @@ type ModeSource struct { Referer string `json:"referer,omitempty"` Token string `json:"token"` Subtitles []SubtitleItem `json:"subtitles"` + Qualities []string `json:"qualities,omitempty"` } type SubtitleItem struct {