package main import ( "errors" "fmt" "local/youtuber/config" "local/youtuber/feed" "local/youtuber/youtubedl" "log" "os" "path" "strings" "time" ) func main() { client, err := youtubedl.New() if err != nil { panic(err) } interval := config.Interval for true { err := do(client) if err != nil { log.Println(err) if err := config.Emailer.Send( config.To, config.Subject, fmt.Sprintf("error getting youtuber: %v", err), ); err != nil { panic(err) } } log.Printf("sleeping until %v", time.Now().Add(interval)) time.Sleep(interval) } } func do(client *youtubedl.Client) error { errs := "" results, err := feed.Fetch(config.Feed) if err != nil { return err } for _, result := range results { seasonNumber := fmt.Sprintf("%02d%02d", result.Date.Year()-2000, result.Date.Month()) episodeNumber := fmt.Sprintf("%02d", result.Date.Day()) season := fmt.Sprintf("Season_%s", seasonNumber) episode := fmt.Sprintf("Episode_%s_-_%s", episodeNumber, strings.Join(strings.Split(result.Title, " ")[2:], "_")) target := fmt.Sprintf("%s/%s.%%(ext)s", season, episode) target = path.Join(config.Root, target) if _, err := os.Stat(strings.ReplaceAll(target, "%(ext)s", "mp4")); !os.IsNotExist(err) { log.Printf("already exists: %s", target) continue } os.MkdirAll(path.Dir(target), os.ModePerm) if err := client.Download(result.Link, target); err != nil { errs += ", " + err.Error() } } if errs != "" { return errors.New(errs) } return nil }