diff --git a/src/client/client.go b/src/client/client.go index 518b427..5209851 100644 --- a/src/client/client.go +++ b/src/client/client.go @@ -190,7 +190,7 @@ func (c *Client) CheckTracks(tracks []*models.Track) error { return nil } -func (c *Client) CreatePlaylist(tracks []*models.Track) error { +func (c *Client) RefreshLibrary() error { if c.System == "" { return fmt.Errorf("could not get music system") } @@ -204,6 +204,13 @@ func (c *Client) CreatePlaylist(tracks []*models.Track) error { slog.Debug("falling back on SLEEP env variable") time.Sleep(time.Duration(c.Cfg.Sleep) * time.Minute) } + return nil +} + +func (c *Client) CreatePlaylist(tracks []*models.Track) error { + if c.System == "" { + return fmt.Errorf("could not get music system") + } if err := c.API.SearchSongs(tracks); err != nil { // search newly added songs slog.Warn("SearchSongs failed", "context", err) diff --git a/src/downloader/downloader.go b/src/downloader/downloader.go index 9451f66..4229801 100644 --- a/src/downloader/downloader.go +++ b/src/downloader/downloader.go @@ -54,15 +54,17 @@ func NewDownloader(cfg *cfg.DownloadConfig, httpClient *util.HttpClient, filterL Downloaders: downloader}, nil } -func (c *DownloadClient) StartDownload(tracks *[]*models.Track) { +func (c *DownloadClient) StartDownload(tracks *[]*models.Track) int { if c.Cfg.ExcludeLocal { // remove locally found tracks, so they can't be added to playlist filterLocalTracks(tracks, true) } + var newDownloads atomic.Int32 + if c.needsDownloadDir() { if err := os.MkdirAll(c.Cfg.DownloadDir, 0755); err != nil { slog.Error(err.Error()) - return + return 0 } } @@ -100,13 +102,17 @@ func (c *DownloadClient) StartDownload(tracks *[]*models.Track) { return nil } + if track.Present { + newDownloads.Add(1) + } + return nil }) } if err := g.Wait(); err != nil { slog.Warn(err.Error()) - return + return int(newDownloads.Load()) } if m, ok := d.(Monitor); ok { @@ -117,6 +123,7 @@ func (c *DownloadClient) StartDownload(tracks *[]*models.Track) { } filterLocalTracks(tracks, false) + return int(newDownloads.Load()) } func (c *DownloadClient) needsDownloadDir() bool { for _, svc := range c.Cfg.Services { diff --git a/src/main/main.go b/src/main/main.go index 6b32e5e..d5a5d86 100644 --- a/src/main/main.go +++ b/src/main/main.go @@ -216,7 +216,14 @@ func main() { } if cfg.Flags.DownloadMode != "skip" { - downloader.StartDownload(&tracks) + newDownloads := downloader.StartDownload(&tracks) + if newDownloads > 0 { + if err := client.RefreshLibrary(); err != nil { + slog.Warn(err.Error()) + } + } else { + slog.Info("no new tracks downloaded, skipping library refresh", "system", cfg.System) + } if len(tracks) == 0 { slog.Error("couldn't download any tracks", "notify", true) os.Exit(1)