From 3668ccb541546910649c4d361a26bb2c5ce96157 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Sun, 14 Jun 2026 21:17:11 +0200 Subject: [PATCH] refactor: wire mode fallback into resolveModeSources --- internal/playback/watch_data.go | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/internal/playback/watch_data.go b/internal/playback/watch_data.go index 6c80684..40ffff5 100644 --- a/internal/playback/watch_data.go +++ b/internal/playback/watch_data.go @@ -25,7 +25,13 @@ func (s *playbackService) BuildWatchData(ctx context.Context, animeID int, title } mode, modeSwitchedFrom := resolveMode(episode, mode, canonicalEpisodes.Episodes) - modeSources, result := s.resolveModeSources(ctx, animeID, searchTitles, episode, mode) + modeSources, result, resolvedMode, resolvedModeSwitchedFrom := s.resolveModeSources(ctx, animeID, searchTitles, episode, mode) + if resolvedMode != "" { + mode = resolvedMode + } + if resolvedModeSwitchedFrom != "" { + modeSwitchedFrom = resolvedModeSwitchedFrom + } if len(modeSources) == 0 { return domain.WatchPageData{}, fmt.Errorf("no streams found") } @@ -123,23 +129,24 @@ func resolveMode(episode string, requestedMode string, episodes []domain.Canonic return requestedMode, "" } -func (s *playbackService) resolveModeSources(ctx context.Context, animeID int, searchTitles []string, episode string, mode string) (map[string]domain.ModeSource, *domain.StreamResult) { - modeSources := map[string]domain.ModeSource{} - var result *domain.StreamResult +func (s *playbackService) resolveModeSources(ctx context.Context, animeID int, searchTitles []string, episode string, requestedMode string) (map[string]domain.ModeSource, *domain.StreamResult, string, string) { + if res := s.resolveStreamResult(ctx, animeID, searchTitles, episode, requestedMode); res != nil { + return map[string]domain.ModeSource{ + requestedMode: s.buildModeSource(res), + }, res, requestedMode, "" + } - for _, currentMode := range []string{"sub", "dub"} { - res := s.resolveStreamResult(ctx, animeID, searchTitles, episode, currentMode) + for _, fallbackMode := range fallbackModes(requestedMode) { + res := s.resolveStreamResult(ctx, animeID, searchTitles, episode, fallbackMode) if res == nil { continue } - - modeSources[currentMode] = s.buildModeSource(res) - if currentMode == mode { - result = res - } + return map[string]domain.ModeSource{ + fallbackMode: s.buildModeSource(res), + }, res, fallbackMode, requestedMode } - return modeSources, result + return map[string]domain.ModeSource{}, nil, requestedMode, "" } func (s *playbackService) resolveStreamResult(ctx context.Context, animeID int, searchTitles []string, episode string, mode string) *domain.StreamResult {