Added support for beta urls

This commit is contained in:
bytedream 2021-12-01 17:22:11 +01:00
parent 0721ecee63
commit 149f497d1c

View file

@ -13,6 +13,7 @@ import (
"path"
"path/filepath"
"reflect"
"regexp"
"runtime"
"sort"
"strconv"
@ -301,27 +302,64 @@ func download(urls []string) {
func parseURLs(urls []string) (allEpisodes []episodeInformation, total, successes int) {
videoDupes := map[string]utils.VideoStructure{}
betaUrl := regexp.MustCompile(`(?m)^https?://(www\.)?beta\.crunchyroll\.com*`)
for i, url := range urls {
out.StartProgressf("Parsing url %d", i+1)
var localTotal, localSuccesses int
var err error
var video utils.VideoStructure
var episode *crunchyroll.Episode
if betaUrl.MatchString(url) {
if episodeid, ok := crunchyroll.ParseBetaEpisodeURL(url); ok {
episode, err = crunchyroll.EpisodeFromID(crunchy, episodeid)
} else if seriesid, ok := crunchyroll.ParseBetaSeriesURL(url); ok {
var vid crunchyroll.Video
vid, err = crunchyroll.SeriesFromID(crunchy, seriesid)
switch vid.(type) {
case *crunchyroll.Series:
seasons, err := video.(*crunchyroll.Series).Seasons()
if err != nil {
out.EndProgressf(false, "Failed to get seasons for url %s: %s\n", url, err)
continue
}
video = utils.NewSeasonStructure(seasons).EpisodeStructure
if err := video.(*utils.EpisodeStructure).InitAll(); err != nil {
out.EndProgressf(false, "Failed to initialize series for url %s\n", url)
continue
}
case *crunchyroll.Movie:
movieListings, err := video.(*crunchyroll.Movie).MovieListing()
if err != nil {
out.EndProgressf(false, "Failed to get movie listing for url %s\n", url)
continue
}
video = utils.NewMovieListingStructure(movieListings)
if err := video.(*utils.MovieListingStructure).InitAll(); err != nil {
out.EndProgressf(false, "Failed to initialize movie for url %s\n", url)
continue
}
}
}
} else {
var seriesName string
var ok bool
if seriesName, _, _, _, ok = crunchyroll.ParseEpisodeURL(url); !ok {
seriesName, _ = crunchyroll.MatchVideo(url)
seriesName, ok = crunchyroll.MatchVideo(url)
}
if seriesName != "" {
if ok {
dupe, ok := videoDupes[seriesName]
if !ok {
video, err := crunchy.FindVideo(fmt.Sprintf("https://www.crunchyroll.com/%s", seriesName))
if err != nil {
continue
}
switch video.(type) {
var vid crunchyroll.Video
vid, err = crunchy.FindVideo(fmt.Sprintf("https://www.crunchyroll.com/%s", seriesName))
switch vid.(type) {
case *crunchyroll.Series:
seasons, err := video.(*crunchyroll.Series).Seasons()
seasons, err := vid.(*crunchyroll.Series).Seasons()
if err != nil {
out.EndProgressf(false, "Failed to get seasons for url %s: %s\n", url, err)
continue
@ -332,7 +370,7 @@ func parseURLs(urls []string) (allEpisodes []episodeInformation, total, successe
continue
}
case *crunchyroll.Movie:
movieListings, err := video.(*crunchyroll.Movie).MovieListing()
movieListings, err := vid.(*crunchyroll.Movie).MovieListing()
if err != nil {
out.EndProgressf(false, "Failed to get movie listing for url %s\n", url)
continue
@ -343,17 +381,36 @@ func parseURLs(urls []string) (allEpisodes []episodeInformation, total, successe
continue
}
}
videoDupes[seriesName] = dupe
}
video = dupe
} else {
err = fmt.Errorf("")
}
}
if err != nil {
out.EndProgressf(false, "URL %d seems to be invalid\n", i+1)
} else if episode != nil {
epstruct := utils.NewEpisodeStructure([]*crunchyroll.Episode{episode})
if err = epstruct.InitAll(); err != nil {
out.EndProgressf(false, "Could not init url %d, skipping\n", i+1)
} else if ep := parseEpisodes(epstruct, url); ep.Format != nil {
allEpisodes = append(allEpisodes, ep)
localSuccesses++
} else {
out.EndProgressf(false, "Could not parse url %d, skipping\n", i+1)
}
localTotal++
} else if video != nil {
if _, ok := crunchyroll.MatchVideo(url); ok {
out.Debugf("Parsed url %d as video\n", i+1)
var parsed []episodeInformation
parsed, localTotal, localSuccesses = parseVideo(dupe, url)
parsed, localTotal, localSuccesses = parseVideo(video, url)
allEpisodes = append(allEpisodes, parsed...)
} else if _, _, _, _, ok = crunchyroll.ParseEpisodeURL(url); ok {
out.Debugf("Parsed url %d as episode\n", i+1)
if episode := parseEpisodes(dupe.(*utils.EpisodeStructure), url); episode.Format != nil {
if episode := parseEpisodes(video.(*utils.EpisodeStructure), url); episode.Format != nil {
allEpisodes = append(allEpisodes, episode)
localSuccesses++
} else {
@ -364,10 +421,12 @@ func parseURLs(urls []string) (allEpisodes []episodeInformation, total, successe
out.EndProgressf(false, "Could not parse url %d, skipping\n", i+1)
continue
}
out.EndProgressf(true, "Parsed url %d with %d successes and %d fails\n", i+1, localSuccesses, localTotal-localSuccesses)
} else {
out.EndProgressf(false, "URL %d seems to be invalid\n", i+1)
}
out.EndProgressf(true, "Parsed url %d with %d successes and %d fails\n", i+1, localSuccesses, localTotal-localSuccesses)
total += localTotal
successes += localSuccesses
}