refactor/significant-changes #3

Merged
mkelvers merged 71 commits from refactor/significant-changes into main 2026-05-14 11:25:25 +00:00
Showing only changes of commit a5b0aeca98 - Show all commits

View File

@@ -126,19 +126,63 @@ func (s *playbackService) BuildWatchData(ctx context.Context, animeID int, title
}
}
type SubtitleItem struct {
Lang string `json:"lang"`
URL string `json:"url,omitempty"`
Referer string `json:"referer,omitempty"`
Token string `json:"token"`
}
type ModeSource struct {
URL string `json:"url,omitempty"`
Referer string `json:"referer,omitempty"`
Token string `json:"token"`
Subtitles []SubtitleItem `json:"subtitles"`
Qualities []string `json:"qualities,omitempty"`
}
modeSources := map[string]ModeSource{}
var result *domain.StreamResult
for _, p := range s.providers {
res, err := p.GetStreams(ctx, animeID, searchTitles, episode, mode)
if err == nil && res != nil {
result = res
for _, m := range []string{"sub", "dub"} {
for _, p := range s.providers {
res, err := p.GetStreams(ctx, animeID, searchTitles, episode, m)
if err != nil || res == nil {
continue
}
var subItems []SubtitleItem
for _, sub := range res.Subtitles {
subToken, _ := s.SignProxyToken(sub.URL, res.Referer, "subtitle")
subItems = append(subItems, SubtitleItem{
Lang: sub.Label,
Token: subToken,
})
}
streamToken, _ := s.SignProxyToken(res.URL, res.Referer, "stream")
modeSources[m] = ModeSource{
URL: res.URL,
Referer: res.Referer,
Token: streamToken,
Subtitles: subItems,
}
if m == mode {
result = res
}
break
}
}
if result == nil {
if len(modeSources) == 0 {
return nil, fmt.Errorf("no streams found")
}
if result == nil {
return nil, fmt.Errorf("no streams found for mode %s", mode)
}
// 3. Get start time from progress
startTime := 0.0
var watchlistStatus string
@@ -193,8 +237,6 @@ func (s *playbackService) BuildWatchData(ctx context.Context, animeID int, title
}
// 5. Build provider data
// AllAnime currently returns one stream in result.URL
// We wrap it for the template
streams := []domain.ProviderStream{
{
Name: "Primary",
@@ -205,41 +247,6 @@ func (s *playbackService) BuildWatchData(ctx context.Context, animeID int, title
},
}
type SubtitleItem struct {
Lang string `json:"lang"`
URL string `json:"url,omitempty"`
Referer string `json:"referer,omitempty"`
Token string `json:"token"`
}
type ModeSource struct {
URL string `json:"url,omitempty"`
Referer string `json:"referer,omitempty"`
Token string `json:"token"`
Subtitles []SubtitleItem `json:"subtitles"`
Qualities []string `json:"qualities,omitempty"`
}
var subtitleItems []SubtitleItem
for _, sub := range result.Subtitles {
subToken, _ := s.SignProxyToken(sub.URL, result.Referer, "subtitle")
subtitleItems = append(subtitleItems, SubtitleItem{
Lang: sub.Label,
Token: subToken,
})
}
token, _ := s.SignProxyToken(result.URL, result.Referer, "stream")
modeSources := map[string]ModeSource{
mode: {
URL: result.URL,
Referer: result.Referer,
Token: token,
Subtitles: subtitleItems,
},
}
go s.warmStreamURL(result.URL, result.Referer)
// 6. Resolve relations/seasons
@@ -281,7 +288,14 @@ func (s *playbackService) BuildWatchData(ctx context.Context, animeID int, title
},
"ModeSources": modeSources,
"InitialMode": mode,
"AvailableModes": []string{"sub", "dub"},
"AvailableModes": func() []string {
var modes []string
for m := range modeSources {
modes = append(modes, m)
}
sort.Strings(modes)
return modes
}(),
"Segments": segments,
}