Refactor everything to use nsq instead of hosting a http server
The point of this is (hopefully) some sort of resiliency I do not want to lose any messages ever And I want to be able to kill this process whenever it is misbehaving Hopefully this achieves that goal
This commit is contained in:
@@ -12,11 +12,6 @@ import (
|
||||
|
||||
const OUTPUT_DIR = "C:/Users/Administrator/ytdlpVideos"
|
||||
|
||||
type DownloadWorker struct {
|
||||
id int
|
||||
input chan *DownloadTask
|
||||
}
|
||||
|
||||
var ongoingDownloads = make(map[string]struct{})
|
||||
var ongoingDownloadsMutex = &sync.Mutex{}
|
||||
|
||||
@@ -31,42 +26,35 @@ var dl = ytdlp.New().
|
||||
RecodeVideo("mp4").
|
||||
ConcurrentFragments(6)
|
||||
|
||||
func (w *DownloadWorker) Run() {
|
||||
for {
|
||||
task, ok := <-w.input
|
||||
if !ok {
|
||||
log.Printf("DownloadWorker %d: input channel closed, exiting", w.id)
|
||||
return
|
||||
}
|
||||
_, ongoing := ongoingDownloads[task.Url]
|
||||
if ongoing {
|
||||
log.Printf("DownloadWorker %d: Download %s is already ongoing", w.id, task.Url)
|
||||
continue
|
||||
}
|
||||
ongoingDownloadsMutex.Lock()
|
||||
ongoingDownloads[task.Url] = struct{}{}
|
||||
ongoingDownloadsMutex.Unlock()
|
||||
|
||||
log.Printf("DownloadWorker %d: Downloading %s", w.id, task.Url)
|
||||
|
||||
err := beeep.Beep(beeep.DefaultFreq, beeep.DefaultDuration)
|
||||
if err != nil {
|
||||
log.Printf("Failed beeping with %+v", err)
|
||||
}
|
||||
err = beeep.Alert("Download Started", task.Url, "assets/information.png")
|
||||
if err != nil {
|
||||
log.Printf("Failed alerting with %+v", err)
|
||||
}
|
||||
|
||||
_, err = dl.Run(context.TODO(), task.Url)
|
||||
if err != nil {
|
||||
log.Printf("DownloadWorker %d: Failed downloading %s with %+v", w.id, task.Url, err)
|
||||
continue
|
||||
}
|
||||
|
||||
log.Printf("DownloadWorker %d: Downloaded %s", w.id, task.Url)
|
||||
ongoingDownloadsMutex.Lock()
|
||||
delete(ongoingDownloads, task.Url)
|
||||
ongoingDownloadsMutex.Unlock()
|
||||
func Download(url string) error {
|
||||
_, ongoing := ongoingDownloads[url]
|
||||
if ongoing {
|
||||
// return fmt.Errorf("Download %s is already ongoing", url)
|
||||
return nil
|
||||
}
|
||||
ongoingDownloadsMutex.Lock()
|
||||
ongoingDownloads[url] = struct{}{}
|
||||
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)
|
||||
}
|
||||
|
||||
_, err = dl.Run(context.TODO(), url)
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user