refactor: replace interface{} with any and use strings.TrimPrefix in playback

This commit is contained in:
2026-04-22 10:55:28 +02:00
parent a0ad500a43
commit 57fed5a981

View File

@@ -42,8 +42,8 @@ func newAllAnimeClient() *allAnimeClient {
} }
} }
func (c *allAnimeClient) graphqlRequest(ctx context.Context, query string, variables map[string]interface{}) (map[string]interface{}, error) { func (c *allAnimeClient) graphqlRequest(ctx context.Context, query string, variables map[string]any) (map[string]any, error) {
payload := map[string]interface{}{ payload := map[string]any{
"query": query, "query": query,
"variables": variables, "variables": variables,
} }
@@ -77,12 +77,12 @@ func (c *allAnimeClient) graphqlRequest(ctx context.Context, query string, varia
return nil, fmt.Errorf("graphql status %d", resp.StatusCode) return nil, fmt.Errorf("graphql status %d", resp.StatusCode)
} }
var parsed map[string]interface{} var parsed map[string]any
if err := json.Unmarshal(respBody, &parsed); err != nil { if err := json.Unmarshal(respBody, &parsed); err != nil {
return nil, fmt.Errorf("decode graphql response: %w", err) return nil, fmt.Errorf("decode graphql response: %w", err)
} }
if errs, ok := parsed["errors"].([]interface{}); ok && len(errs) > 0 { if errs, ok := parsed["errors"].([]any); ok && len(errs) > 0 {
return nil, fmt.Errorf("graphql error: %v", errs[0]) return nil, fmt.Errorf("graphql error: %v", errs[0])
} }
@@ -100,8 +100,8 @@ func (c *allAnimeClient) Search(ctx context.Context, query string, mode string)
} }
}` }`
variables := map[string]interface{}{ variables := map[string]any{
"search": map[string]interface{}{ "search": map[string]any{
"allowAdult": false, "allowAdult": false,
"allowUnknown": false, "allowUnknown": false,
"query": query, "query": query,
@@ -117,24 +117,24 @@ func (c *allAnimeClient) Search(ctx context.Context, query string, mode string)
return nil, err return nil, err
} }
data, ok := result["data"].(map[string]interface{}) data, ok := result["data"].(map[string]any)
if !ok { if !ok {
return nil, fmt.Errorf("invalid search response") return nil, fmt.Errorf("invalid search response")
} }
shows, ok := data["shows"].(map[string]interface{}) shows, ok := data["shows"].(map[string]any)
if !ok { if !ok {
return nil, fmt.Errorf("invalid shows payload") return nil, fmt.Errorf("invalid shows payload")
} }
edges, ok := shows["edges"].([]interface{}) edges, ok := shows["edges"].([]any)
if !ok { if !ok {
return nil, fmt.Errorf("invalid search edges") return nil, fmt.Errorf("invalid search edges")
} }
out := make([]searchResult, 0, len(edges)) out := make([]searchResult, 0, len(edges))
for _, edge := range edges { for _, edge := range edges {
item, ok := edge.(map[string]interface{}) item, ok := edge.(map[string]any)
if !ok { if !ok {
continue continue
} }
@@ -164,27 +164,27 @@ func (c *allAnimeClient) GetEpisodes(ctx context.Context, showID string, mode st
} }
}` }`
result, err := c.graphqlRequest(ctx, graphqlQuery, map[string]interface{}{"showId": showID}) result, err := c.graphqlRequest(ctx, graphqlQuery, map[string]any{"showId": showID})
if err != nil { if err != nil {
return nil, err return nil, err
} }
data, ok := result["data"].(map[string]interface{}) data, ok := result["data"].(map[string]any)
if !ok { if !ok {
return nil, fmt.Errorf("invalid episode response") return nil, fmt.Errorf("invalid episode response")
} }
show, ok := data["show"].(map[string]interface{}) show, ok := data["show"].(map[string]any)
if !ok || show == nil { if !ok || show == nil {
return nil, fmt.Errorf("show not found") return nil, fmt.Errorf("show not found")
} }
detail, ok := show["availableEpisodesDetail"].(map[string]interface{}) detail, ok := show["availableEpisodesDetail"].(map[string]any)
if !ok { if !ok {
return nil, fmt.Errorf("invalid episodes detail") return nil, fmt.Errorf("invalid episodes detail")
} }
rawList, ok := detail[mode].([]interface{}) rawList, ok := detail[mode].([]any)
if !ok { if !ok {
return nil, fmt.Errorf("no episodes for mode %s", mode) return nil, fmt.Errorf("no episodes for mode %s", mode)
} }
@@ -223,7 +223,7 @@ func (c *allAnimeClient) GetEpisodeSources(ctx context.Context, showID string, e
} }
}` }`
variables := map[string]interface{}{ variables := map[string]any{
"showId": showID, "showId": showID,
"translationType": mode, "translationType": mode,
"episodeString": episode, "episodeString": episode,
@@ -234,7 +234,7 @@ func (c *allAnimeClient) GetEpisodeSources(ctx context.Context, showID string, e
return nil, err return nil, err
} }
data, ok := result["data"].(map[string]interface{}) data, ok := result["data"].(map[string]any)
if !ok { if !ok {
return nil, fmt.Errorf("invalid source response") return nil, fmt.Errorf("invalid source response")
} }
@@ -244,7 +244,7 @@ func (c *allAnimeClient) GetEpisodeSources(ctx context.Context, showID string, e
return nil, err return nil, err
} }
rawSourceURLs, ok := episodeData["sourceUrls"].([]interface{}) rawSourceURLs, ok := episodeData["sourceUrls"].([]any)
if !ok || len(rawSourceURLs) == 0 { if !ok || len(rawSourceURLs) == 0 {
return nil, fmt.Errorf("no source urls") return nil, fmt.Errorf("no source urls")
} }
@@ -310,7 +310,7 @@ type sourceReference struct {
Name string Name string
} }
func buildSourceReferences(rawSourceURLs []interface{}) []sourceReference { func buildSourceReferences(rawSourceURLs []any) []sourceReference {
priorityOrder := []string{"default", "yt-mp4", "s-mp4", "luf-mp4"} priorityOrder := []string{"default", "yt-mp4", "s-mp4", "luf-mp4"}
prioritySet := map[string]struct{}{"default": {}, "yt-mp4": {}, "s-mp4": {}, "luf-mp4": {}} prioritySet := map[string]struct{}{"default": {}, "yt-mp4": {}, "s-mp4": {}, "luf-mp4": {}}
@@ -319,7 +319,7 @@ func buildSourceReferences(rawSourceURLs []interface{}) []sourceReference {
seen := make(map[string]struct{}) seen := make(map[string]struct{})
for _, source := range rawSourceURLs { for _, source := range rawSourceURLs {
item, ok := source.(map[string]interface{}) item, ok := source.(map[string]any)
if !ok { if !ok {
continue continue
} }
@@ -360,8 +360,8 @@ func buildSourceReferences(rawSourceURLs []interface{}) []sourceReference {
return ordered return ordered
} }
func extractEpisodeData(data map[string]interface{}) (map[string]interface{}, error) { func extractEpisodeData(data map[string]any) (map[string]any, error) {
episodeData, ok := data["episode"].(map[string]interface{}) episodeData, ok := data["episode"].(map[string]any)
if ok && episodeData != nil { if ok && episodeData != nil {
return episodeData, nil return episodeData, nil
} }
@@ -376,12 +376,12 @@ func extractEpisodeData(data map[string]interface{}) (map[string]interface{}, er
return nil, fmt.Errorf("decode episode payload: %w", err) return nil, fmt.Errorf("decode episode payload: %w", err)
} }
var parsed map[string]interface{} var parsed map[string]any
if err := json.Unmarshal(decoded, &parsed); err != nil { if err := json.Unmarshal(decoded, &parsed); err != nil {
return nil, fmt.Errorf("parse decoded payload: %w", err) return nil, fmt.Errorf("parse decoded payload: %w", err)
} }
episodeData, ok = parsed["episode"].(map[string]interface{}) episodeData, ok = parsed["episode"].(map[string]any)
if !ok || episodeData == nil { if !ok || episodeData == nil {
return nil, fmt.Errorf("decoded payload missing episode") return nil, fmt.Errorf("decoded payload missing episode")
} }
@@ -443,9 +443,7 @@ func decodeSourceURL(encoded string) string {
return "" return ""
} }
if strings.HasPrefix(encoded, "--") { encoded = strings.TrimPrefix(encoded, "--")
encoded = encoded[2:]
}
substitutions := map[string]string{ substitutions := map[string]string{
"79": "A", "7a": "B", "7b": "C", "7c": "D", "7d": "E", "79": "A", "7a": "B", "7b": "C", "7c": "D", "7d": "E",