feat: add proxy transport with dns caching, subtitle handler, and stream pre-warm

This commit is contained in:
2026-05-13 13:35:27 +02:00
parent 8006868fe2
commit 846fe9ccd9
3 changed files with 202 additions and 5 deletions

View File

@@ -222,9 +222,10 @@ func (s *playbackService) BuildWatchData(ctx context.Context, animeID int, title
var subtitleItems []SubtitleItem
for _, sub := range result.Subtitles {
subToken, _ := s.SignProxyToken(sub.URL, result.Referer, "subtitle")
subtitleItems = append(subtitleItems, SubtitleItem{
Lang: sub.Label,
URL: sub.URL,
Lang: sub.Label,
Token: subToken,
})
}
@@ -239,6 +240,8 @@ func (s *playbackService) BuildWatchData(ctx context.Context, animeID int, title
},
}
go s.warmStreamURL(result.URL, result.Referer)
// 6. Resolve relations/seasons
relations, _ := s.jikan.GetFullRelations(ctx, animeID)
type SeasonEntry struct {
@@ -368,3 +371,24 @@ func (s *playbackService) fetchSkipSegments(ctx context.Context, malID int, epis
return segments
}
func (s *playbackService) warmStreamURL(targetURL, referer string) {
req, err := http.NewRequest(http.MethodGet, targetURL, nil)
if err != nil {
return
}
if referer != "" {
req.Header.Set("Referer", referer)
}
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/121.0")
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
req = req.WithContext(ctx)
resp, err := s.httpClient.Do(req)
if err != nil {
return
}
_ = resp.Body.Close()
}