diff --git a/server/internal/message_queue.go b/server/internal/message_queue.go index ddb027e..47143b5 100644 --- a/server/internal/message_queue.go +++ b/server/internal/message_queue.go @@ -56,7 +56,7 @@ func (m *MessageQueue) downloadConsumer() { m.eventBus.SubscribeAsync(queueName, func(p *Process) { //TODO: provide valid context - sem.Acquire(context.TODO(), 1) + sem.Acquire(context.Background(), 1) defer sem.Release(1) m.logger.Info("received process from event bus", diff --git a/server/internal/playlist.go b/server/internal/playlist.go index b6dc224..c84ed87 100644 --- a/server/internal/playlist.go +++ b/server/internal/playlist.go @@ -5,6 +5,7 @@ import ( "errors" "log/slog" "os/exec" + "slices" "strings" "time" @@ -41,21 +42,24 @@ func PlaylistDetect(req DownloadRequest, mq *MessageQueue, db *MemoryDB, logger return err } - logger.Info("decoded metadata", slog.String("url", req.URL)) + if err := cmd.Wait(); err != nil { + return err + } + + logger.Info("decoded playlist metadata", slog.String("url", req.URL)) if m.Type == "" { - cmd.Wait() return errors.New("probably not a valid URL") } if m.Type == "playlist" { - logger.Info( - "playlist detected", - slog.String("url", req.URL), - slog.Int("count", m.Count), - ) + entries := slices.CompactFunc(slices.Compact(m.Entries), func(a DownloadInfo, b DownloadInfo) bool { + return a.URL == b.URL + }) - for _, meta := range m.Entries { + logger.Info("playlist detected", slog.String("url", req.URL), slog.Int("count", len(entries))) + + for _, meta := range entries { // detect playlist title from metadata since each playlist entry will be // treated as an individual download req.Rename = strings.Replace( @@ -81,9 +85,6 @@ func PlaylistDetect(req DownloadRequest, mq *MessageQueue, db *MemoryDB, logger db.Set(proc) mq.Publish(proc) } - - err = cmd.Wait() - return err } proc := &Process{