package downloaders import ( "fmt" "os" "os/exec" logger "git.site.quack-lab.dev/dave/cylogger" ) type YTDLPRawDownloader struct{} func (d *YTDLPRawDownloader) Download(url string) error { downloadlogger := logger.Default.WithPrefix(fmt.Sprintf("url=%q", url)) _, ongoing := ongoingDownloads[url] if ongoing { // return fmt.Errorf("Download %s is already ongoing", url) downloadlogger.Info("Download is already ongoing") return nil } ongoingDownloadsMutex.Lock() ongoingDownloads[url] = struct{}{} ongoingDownloadsMutex.Unlock() downloadlogger.Info("YTDLPRaw downloading") cmd := exec.Command("yt-dlp", "-o", "C:/Users/Administrator/ytdlpVideos/%(uploader)s/%(title)s.%(ext)s", "-f", "bestvideo[ext=mp4]+bestaudio[ext=m4a]", "-N", "12", "--sponsorblock-mark", "all", url) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err := cmd.Run() if err != nil { return fmt.Errorf("failed downloading %s with %+v", url, err) } downloadlogger.Info("Downloaded") ongoingDownloadsMutex.Lock() delete(ongoingDownloads, url) ongoingDownloadsMutex.Unlock() return nil }