Compare commits

..

4 Commits

Author SHA1 Message Date
8ab4b4c280 Refactor sanitization 2024-11-05 15:59:29 +01:00
0ad8722bf9 Remove from ongoing downloads even if failed 2024-11-05 15:59:29 +01:00
d8c4c343f4 Skip downloading existing videos 2024-11-05 15:59:29 +01:00
52fdcc64ef Shorter timeout 2024-11-05 15:58:44 +01:00
2 changed files with 29 additions and 16 deletions

View File

@@ -23,6 +23,11 @@ func DownloadR(url string) error {
ongoingDownloadsMutex.Lock()
ongoingDownloads[url] = struct{}{}
ongoingDownloadsMutex.Unlock()
defer func() {
ongoingDownloadsMutex.Lock()
delete(ongoingDownloads, url)
ongoingDownloadsMutex.Unlock()
}()
log.Printf("Downloading %s", url)
@@ -47,20 +52,22 @@ func DownloadR(url string) error {
Client: client,
}
videoTitle := video.Title
videoAuthor := video.Author
videoTitle = strings.ReplaceAll(videoTitle, " ", "-")
videoTitle = strings.ReplaceAll(videoTitle, "&", "and")
videoTitle = strings.ReplaceAll(videoTitle, "?", "")
videoAuthor = strings.ReplaceAll(videoAuthor, " ", "-")
videoAuthor = strings.ReplaceAll(videoAuthor, "&", "and")
videoAuthor = strings.ReplaceAll(videoAuthor, "?", "")
videoTitle := Sanitize(video.Title)
videoAuthor := Sanitize(video.Author)
videoFileRoot := filepath.Join(OUTPUT_DIR, videoAuthor)
err = os.MkdirAll(videoFileRoot, 0755)
if err != nil {
return fmt.Errorf("failed creating directory %s with %+v", videoFileRoot, err)
}
fullVideoPath := filepath.Join(OUTPUT_DIR, videoAuthor, videoTitle+".mp4")
_, err = os.Open(fullVideoPath)
if err == nil {
log.Printf("File %s already exists, skipping download", fullVideoPath)
return nil
}
videoFile := filepath.Join(videoAuthor, videoTitle+".mp4")
err = downloader.DownloadComposite(context.Background(), videoFile, video, "hd", "mp4", "")
if err != nil {
@@ -68,8 +75,14 @@ func DownloadR(url string) error {
}
log.Printf("Downloaded %s", url)
ongoingDownloadsMutex.Lock()
delete(ongoingDownloads, url)
ongoingDownloadsMutex.Unlock()
return nil
}
func Sanitize(s string) string {
s = strings.ReplaceAll(s, "&", "and")
s = strings.ReplaceAll(s, "?", "")
s = strings.ReplaceAll(s, ":", "")
s = strings.ReplaceAll(s, ";", "")
s = strings.ReplaceAll(s, ",", "")
return s
}

View File

@@ -35,7 +35,7 @@ func init() {
log.Lmicroseconds|log.Lshortfile)
}
const DOWNLOAD_WORKERS = 1
const DOWNLOAD_WORKERS = 2
type DLHandler struct{}
@@ -52,7 +52,7 @@ func (*DLHandler) HandleMessage(message *nsq.Message) error {
defer cancel()
go func() {
ticker := time.NewTicker(5 * time.Second)
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for {