From 20e5594f60f1c6ec55cc11b4ae9421d095a1c38b Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Sun, 24 Nov 2024 19:39:50 +0100 Subject: [PATCH] Add raw ytdlp downloader --- downloader/downloaders/kidai.go | 2 +- downloader/downloaders/utils.go | 2 +- downloader/downloaders/ytdlp-lib.go | 22 ++++++------ downloader/downloaders/ytdlp-raw.go | 52 ++++++++++++++++++++++++++++- downloader/main.go | 12 +++---- 5 files changed, 71 insertions(+), 19 deletions(-) diff --git a/downloader/downloaders/kidai.go b/downloader/downloaders/kidai.go index a6a6edf..b3ed9d4 100644 --- a/downloader/downloaders/kidai.go +++ b/downloader/downloaders/kidai.go @@ -32,7 +32,7 @@ func (d *KidaiDownloader) Download(url string) error { ongoingDownloadsMutex.Unlock() }() - log.Printf("Downloading %s", url) + log.Printf("Kidai downloading %s", url) go func() { err := beeep.Beep(beeep.DefaultFreq, beeep.DefaultDuration) diff --git a/downloader/downloaders/utils.go b/downloader/downloaders/utils.go index 46b36ac..90be68c 100644 --- a/downloader/downloaders/utils.go +++ b/downloader/downloaders/utils.go @@ -8,4 +8,4 @@ const OUTPUT_DIR = "." var ongoingDownloads = make(map[string]struct{}) var ongoingDownloadsMutex = &sync.Mutex{} -const DOWNLOAD_WORKERS = 1 \ No newline at end of file +const DOWNLOAD_WORKERS = 12 \ No newline at end of file diff --git a/downloader/downloaders/ytdlp-lib.go b/downloader/downloaders/ytdlp-lib.go index f8e5d41..0a06303 100644 --- a/downloader/downloaders/ytdlp-lib.go +++ b/downloader/downloaders/ytdlp-lib.go @@ -33,18 +33,20 @@ func (d *YTDLPLibDownloader) Download(url string) error { ongoingDownloads[url] = struct{}{} ongoingDownloadsMutex.Unlock() - log.Printf("Downloading %s", url) + log.Printf("YTDLPLib downloading %s", url) - err := beeep.Beep(beeep.DefaultFreq, beeep.DefaultDuration) - if err != nil { - log.Printf("Failed beeping with %+v", err) - } - err = beeep.Alert("Download Started", url, "assets/information.png") - if err != nil { - log.Printf("Failed alerting with %+v", err) - } + go func() { + err := beeep.Beep(beeep.DefaultFreq, beeep.DefaultDuration) + if err != nil { + log.Printf("Failed beeping with %+v", err) + } + err = beeep.Alert("Download Started", url, "assets/information.png") + if err != nil { + log.Printf("Failed alerting with %+v", err) + } + }() - _, err = dl.Run(context.TODO(), url) + _, err := dl.Run(context.TODO(), url) if err != nil { return fmt.Errorf("failed downloading %s with %+v", url, err) } diff --git a/downloader/downloaders/ytdlp-raw.go b/downloader/downloaders/ytdlp-raw.go index f5834b9..59908b4 100644 --- a/downloader/downloaders/ytdlp-raw.go +++ b/downloader/downloaders/ytdlp-raw.go @@ -1 +1,51 @@ -package downloaders \ No newline at end of file +package downloaders + +import ( + "fmt" + "log" + "os" + "os/exec" + + "github.com/gen2brain/beeep" +) + +type YTDLPRawDownloader struct{} + +func (d *YTDLPRawDownloader) Download(url string) error { + _, ongoing := ongoingDownloads[url] + if ongoing { + // return fmt.Errorf("Download %s is already ongoing", url) + log.Printf("Download %s is already ongoing", url) + return nil + } + ongoingDownloadsMutex.Lock() + ongoingDownloads[url] = struct{}{} + ongoingDownloadsMutex.Unlock() + + log.Printf("YTDLPRaw downloading %s", url) + + go func() { + err := beeep.Beep(beeep.DefaultFreq, beeep.DefaultDuration) + if err != nil { + log.Printf("Failed beeping with %+v", err) + } + err = beeep.Alert("Download Started", url, "assets/information.png") + if err != nil { + log.Printf("Failed alerting with %+v", err) + } + }() + + cmd := exec.Command("yt-dlp", "-o", "C:/Users/Administrator/ytdlpVideos/%(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) + } + + log.Printf("Downloaded %s", url) + ongoingDownloadsMutex.Lock() + delete(ongoingDownloads, url) + ongoingDownloadsMutex.Unlock() + return nil +} diff --git a/downloader/main.go b/downloader/main.go index 1cc999d..90437fd 100644 --- a/downloader/main.go +++ b/downloader/main.go @@ -36,7 +36,7 @@ func init() { log.Lmicroseconds|log.Lshortfile) } -var downloader downloaders.Downloader = &downloaders.YTDLPLibDownloader{} +var downloader downloaders.Downloader = &downloaders.YTDLPRawDownloader{} type DLHandler struct{} @@ -76,11 +76,11 @@ func (*DLHandler) HandleMessage(message *nsq.Message) error { } func main() { - // err := DownloadR("https://www.youtube.com/watch?v=QnvGX0C-LKE") - // if err != nil { - // Error.Printf("Error downloading: %v", err) - // } - // return + //err := downloader.Download("https://www.youtube.com/watch?v=SiKjprtiPaw") + //if err != nil { + // Error.Printf("Error downloading: %v", err) + //} + //return config := nsq.NewConfig() config.MaxAttempts = 5