package downloaders import ( "context" "fmt" logger "git.site.quack-lab.dev/dave/cylogger" "github.com/lrstanley/go-ytdlp" ) var dl = ytdlp.New(). // FormatSort("bestvideo[ext=mp4]+bestaudio[ext=m4a]"). FormatSort("res,ext:mp4:m4a"). Output("C:/Users/Administrator/ytdlpVideos/%(uploader)s/%(title)s.%(ext)s"). LimitRate(fmt.Sprintf("%dM", 150/DOWNLOAD_WORKERS)). // HTTPChunkSize("20M"). MarkWatched(). SponsorblockMark("all"). RecodeVideo("mp4"). ConcurrentFragments(6) type YTDLPLibDownloader struct{} func (d *YTDLPLibDownloader) 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("YTDLPLib downloading") // go func() { // err := beeep.Beep(beeep.DefaultFreq, beeep.DefaultDuration) // if err != nil { // downloadlogger.Error("Failed beeping with %+v", err) // } // err = beeep.Alert("Download Started", url, "assets/information.png") // if err != nil { // downloadlogger.Error("Failed alerting with %+v", err) // } // }() _, err := dl.Run(context.TODO(), url) 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 }