refactor: wire mode fallback into resolveModeSources

This commit is contained in:
2026-06-14 21:17:11 +02:00
parent 7bf0ffbd06
commit 3668ccb541

View File

@@ -25,7 +25,13 @@ func (s *playbackService) BuildWatchData(ctx context.Context, animeID int, title
} }
mode, modeSwitchedFrom := resolveMode(episode, mode, canonicalEpisodes.Episodes) 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 { if len(modeSources) == 0 {
return domain.WatchPageData{}, fmt.Errorf("no streams found") return domain.WatchPageData{}, fmt.Errorf("no streams found")
} }
@@ -123,23 +129,24 @@ func resolveMode(episode string, requestedMode string, episodes []domain.Canonic
return requestedMode, "" return requestedMode, ""
} }
func (s *playbackService) resolveModeSources(ctx context.Context, animeID int, searchTitles []string, episode string, mode string) (map[string]domain.ModeSource, *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) {
modeSources := map[string]domain.ModeSource{} if res := s.resolveStreamResult(ctx, animeID, searchTitles, episode, requestedMode); res != nil {
var result *domain.StreamResult return map[string]domain.ModeSource{
requestedMode: s.buildModeSource(res),
}, res, requestedMode, ""
}
for _, currentMode := range []string{"sub", "dub"} { for _, fallbackMode := range fallbackModes(requestedMode) {
res := s.resolveStreamResult(ctx, animeID, searchTitles, episode, currentMode) res := s.resolveStreamResult(ctx, animeID, searchTitles, episode, fallbackMode)
if res == nil { if res == nil {
continue continue
} }
return map[string]domain.ModeSource{
modeSources[currentMode] = s.buildModeSource(res) fallbackMode: s.buildModeSource(res),
if currentMode == mode { }, res, fallbackMode, requestedMode
result = res
}
} }
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 { func (s *playbackService) resolveStreamResult(ctx context.Context, animeID int, searchTitles []string, episode string, mode string) *domain.StreamResult {