60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
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
|
|
}
|