From ceec69ef659b89b0c539e2ded0e338f3fa825bd0 Mon Sep 17 00:00:00 2001 From: bytedream Date: Thu, 24 Feb 2022 22:09:55 +0100 Subject: [PATCH] Better audio filtering --- utils/url.go | 53 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/utils/url.go b/utils/url.go index 5181358..9bdec77 100644 --- a/utils/url.go +++ b/utils/url.go @@ -7,7 +7,7 @@ import ( // ExtractEpisodesFromUrl extracts all episodes from an url. // If audio is not empty, the episodes gets filtered after the given locale -func ExtractEpisodesFromUrl(crunchy *crunchyroll.Crunchyroll, url string, audio crunchyroll.LOCALE) ([]*crunchyroll.Episode, error) { +func ExtractEpisodesFromUrl(crunchy *crunchyroll.Crunchyroll, url string, audio ...crunchyroll.LOCALE) ([]*crunchyroll.Episode, error) { series, episodes, err := ParseUrl(crunchy, url) if err != nil { return nil, err @@ -21,10 +21,20 @@ func ExtractEpisodesFromUrl(crunchy *crunchyroll.Crunchyroll, url string, audio return nil, err } for _, season := range seasons { - if audio != "" { - if audioLocale, err := season.AudioLocale(); err != nil { + if audio != nil { + locale, err := season.AudioLocale() + if err != nil { return nil, err - } else if audioLocale != audio { + } + + var found bool + for _, l := range audio { + if locale == l { + found = true + break + } + } + if !found { continue } } @@ -35,15 +45,34 @@ func ExtractEpisodesFromUrl(crunchy *crunchyroll.Crunchyroll, url string, audio eps = append(eps, e...) } } else if episodes != nil { - for _, episode := range episodes { - if audio == "" { - eps = append(eps, episode) - } else if audioLocale, err := episode.AudioLocale(); err != nil { - return nil, err - } else if audioLocale == audio { - eps = append(eps, episode) - } + if audio == nil { + return episodes, nil } + + for _, episode := range episodes { + locale, err := episode.AudioLocale() + if err != nil { + return nil, err + } + if audio != nil { + var found bool + for _, l := range audio { + if locale == l { + found = true + break + } + } + if !found { + continue + } + } + + eps = append(eps, episode) + } + } + + if len(eps) == 0 { + return nil, fmt.Errorf("could not find any matching episode") } return eps, nil