46 lines
890 B
Go

package main
import (
"context"
"log"
"m3u8-downloader/pkg/constants"
"m3u8-downloader/pkg/media"
"os"
"os/signal"
"sync"
"syscall"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigChan
log.Println("Shutting down...")
cancel()
}()
variants, err := media.GetAllVariants(constants.MasterURL)
if err != nil {
log.Fatalf("Failed to get variants: %v", err)
}
log.Printf("Found %d variants", len(variants))
var wg sync.WaitGroup
sem := make(chan struct{}, constants.WorkerCount*len(variants))
for _, variant := range variants {
wg.Add(1)
go func(v *media.StreamVariant) {
defer wg.Done()
media.VariantDownloader(ctx, v, sem)
}(variant)
}
wg.Wait()
log.Println("All variant downloaders finished.")
}