package main import ( "context" "fmt" "log" "os" "path/filepath" "regexp" "strings" "github.com/gen2brain/beeep" "github.com/kkdai/youtube/v2" ytd "github.com/kkdai/youtube/v2/downloader" ) func DownloadR(url string) error { _, ongoing := ongoingDownloads[url] if ongoing { // return fmt.Errorf("Download %s is already ongoing", url) Warning.Printf("Download %s is already ongoing", url) return nil } ongoingDownloadsMutex.Lock() ongoingDownloads[url] = struct{}{} ongoingDownloadsMutex.Unlock() defer func() { ongoingDownloadsMutex.Lock() delete(ongoingDownloads, url) ongoingDownloadsMutex.Unlock() }() log.Printf("Downloading %s", url) err := beeep.Beep(beeep.DefaultFreq, beeep.DefaultDuration) if err != nil { Warning.Printf("Failed beeping with %+v", err) } err = beeep.Alert("Download Started", url, "assets/information.png") if err != nil { Warning.Printf("Failed alerting with %+v", err) } client := youtube.Client{} video, err := client.GetVideo(url) if err != nil { return fmt.Errorf("failed downloading %s with %+v", url, err) } // $ go run . download -m mp4 -q hd https://www.youtube.com/watch?v=D9trBXaXCgA // This works fine, now I have to figure out how to plug -m and -q into this shit below downloader := ytd.Downloader{ OutputDir: OUTPUT_DIR, Client: client, } videoTitle := Sanitize(video.Title) videoAuthor := Sanitize(video.Author) videoFileRoot := filepath.Join(OUTPUT_DIR, videoAuthor) err = os.MkdirAll(videoFileRoot, 0755) if err != nil { return fmt.Errorf("failed creating directory %s with %+v", videoFileRoot, err) } fullVideoPath := filepath.Join(OUTPUT_DIR, videoAuthor, videoTitle+".mp4") videoFileHandle, err := os.Open(fullVideoPath) if err == nil { videoFileHandle.Close() log.Printf("File %s already exists, skipping download", fullVideoPath) return nil } videoFile := filepath.Join(videoAuthor, videoTitle+".mp4") err = downloader.DownloadComposite(context.Background(), videoFile, video, "hd", "mp4", "") if err != nil { return fmt.Errorf("failed downloading %s with %+v", url, err) } log.Printf("Downloaded %s", url) return nil } var re = regexp.MustCompile(`[#!$%&/()";:?;,|*]`) func Sanitize(s string) string { s = strings.ReplaceAll(s, "&", "and") s = re.ReplaceAllString(s, "") return s }