Fixed: Don't rescan folders for each artist added via a list

pull/1689/head
ta264 4 years ago committed by Qstick
parent d163b124a7
commit a49955e692

@ -48,6 +48,14 @@ namespace NzbDrone.Core.Test.ImportListTests
Mocker.GetMock<IImportListExclusionService>() Mocker.GetMock<IImportListExclusionService>()
.Setup(v => v.All()) .Setup(v => v.All())
.Returns(new List<ImportListExclusion>()); .Returns(new List<ImportListExclusion>());
Mocker.GetMock<IAddArtistService>()
.Setup(v => v.AddArtists(It.IsAny<List<Artist>>(), false))
.Returns((List<Artist> artists, bool doRefresh) => artists);
Mocker.GetMock<IAddAlbumService>()
.Setup(v => v.AddAlbums(It.IsAny<List<Album>>()))
.Returns((List<Album> albums) => albums);
} }
private void WithAlbum() private void WithAlbum()
@ -176,7 +184,7 @@ namespace NzbDrone.Core.Test.ImportListTests
Subject.Execute(new ImportListSyncCommand()); Subject.Execute(new ImportListSyncCommand());
Mocker.GetMock<IAddArtistService>() Mocker.GetMock<IAddArtistService>()
.Verify(v => v.AddArtists(It.Is<List<Artist>>(t => t.Count == 0))); .Verify(v => v.AddArtists(It.Is<List<Artist>>(t => t.Count == 0), false));
} }
[Test] [Test]
@ -188,7 +196,7 @@ namespace NzbDrone.Core.Test.ImportListTests
Subject.Execute(new ImportListSyncCommand()); Subject.Execute(new ImportListSyncCommand());
Mocker.GetMock<IAddArtistService>() Mocker.GetMock<IAddArtistService>()
.Verify(v => v.AddArtists(It.Is<List<Artist>>(t => t.Count == 0))); .Verify(v => v.AddArtists(It.Is<List<Artist>>(t => t.Count == 0), false));
} }
[Test] [Test]
@ -214,7 +222,7 @@ namespace NzbDrone.Core.Test.ImportListTests
Subject.Execute(new ImportListSyncCommand()); Subject.Execute(new ImportListSyncCommand());
Mocker.GetMock<IAddArtistService>() Mocker.GetMock<IAddArtistService>()
.Verify(v => v.AddArtists(It.Is<List<Artist>>(t => t.Count == 1 && t.First().Monitored == expectedArtistMonitored))); .Verify(v => v.AddArtists(It.Is<List<Artist>>(t => t.Count == 1 && t.First().Monitored == expectedArtistMonitored), false));
} }
[TestCase(ImportListMonitorType.None, false)] [TestCase(ImportListMonitorType.None, false)]
@ -240,7 +248,7 @@ namespace NzbDrone.Core.Test.ImportListTests
Subject.Execute(new ImportListSyncCommand()); Subject.Execute(new ImportListSyncCommand());
Mocker.GetMock<IAddArtistService>() Mocker.GetMock<IAddArtistService>()
.Verify(v => v.AddArtists(It.Is<List<Artist>>(t => t.Count == 0))); .Verify(v => v.AddArtists(It.Is<List<Artist>>(t => t.Count == 0), false));
} }
[Test] [Test]

@ -8,6 +8,7 @@ using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.MetadataSource; using NzbDrone.Core.MetadataSource;
using NzbDrone.Core.Music; using NzbDrone.Core.Music;
using NzbDrone.Core.Music.Commands;
using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.ImportLists namespace NzbDrone.Core.ImportLists
@ -24,6 +25,7 @@ namespace NzbDrone.Core.ImportLists
private readonly IAddArtistService _addArtistService; private readonly IAddArtistService _addArtistService;
private readonly IAddAlbumService _addAlbumService; private readonly IAddAlbumService _addAlbumService;
private readonly IEventAggregator _eventAggregator; private readonly IEventAggregator _eventAggregator;
private readonly IManageCommandQueue _commandQueueManager;
private readonly Logger _logger; private readonly Logger _logger;
public ImportListSyncService(IImportListFactory importListFactory, public ImportListSyncService(IImportListFactory importListFactory,
@ -36,6 +38,7 @@ namespace NzbDrone.Core.ImportLists
IAddArtistService addArtistService, IAddArtistService addArtistService,
IAddAlbumService addAlbumService, IAddAlbumService addAlbumService,
IEventAggregator eventAggregator, IEventAggregator eventAggregator,
IManageCommandQueue commandQueueManager,
Logger logger) Logger logger)
{ {
_importListFactory = importListFactory; _importListFactory = importListFactory;
@ -48,6 +51,7 @@ namespace NzbDrone.Core.ImportLists
_addArtistService = addArtistService; _addArtistService = addArtistService;
_addAlbumService = addAlbumService; _addAlbumService = addAlbumService;
_eventAggregator = eventAggregator; _eventAggregator = eventAggregator;
_commandQueueManager = commandQueueManager;
_logger = logger; _logger = logger;
} }
@ -113,13 +117,19 @@ namespace NzbDrone.Core.ImportLists
} }
} }
_addArtistService.AddArtists(artistsToAdd); var addedArtists = _addArtistService.AddArtists(artistsToAdd, false);
_addAlbumService.AddAlbums(albumsToAdd); var addedAlbums = _addAlbumService.AddAlbums(albumsToAdd);
var message = string.Format($"Import List Sync Completed. Items found: {reports.Count}, Artists added: {artistsToAdd.Count}, Albums added: {albumsToAdd.Count}"); var message = string.Format($"Import List Sync Completed. Items found: {reports.Count}, Artists added: {addedArtists.Count}, Albums added: {addedAlbums.Count}");
_logger.ProgressInfo(message); _logger.ProgressInfo(message);
var toRefresh = addedArtists.Select(x => x.Id).Concat(addedAlbums.Select(x => x.Artist.Value.Id)).Distinct().ToList();
if (toRefresh.Any())
{
_commandQueueManager.Push(new BulkRefreshArtistCommand(toRefresh, true));
}
return processed; return processed;
} }

@ -6,10 +6,12 @@ namespace NzbDrone.Core.Music.Events
public class ArtistsImportedEvent : IEvent public class ArtistsImportedEvent : IEvent
{ {
public List<int> ArtistIds { get; private set; } public List<int> ArtistIds { get; private set; }
public bool DoRefresh { get; private set; }
public ArtistsImportedEvent(List<int> artistIds) public ArtistsImportedEvent(List<int> artistIds, bool doRefresh = true)
{ {
ArtistIds = artistIds; ArtistIds = artistIds;
DoRefresh = doRefresh;
} }
} }
} }

@ -1,4 +1,3 @@
using System.Linq;
using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.Music.Commands; using NzbDrone.Core.Music.Commands;
@ -26,7 +25,10 @@ namespace NzbDrone.Core.Music
public void Handle(ArtistsImportedEvent message) public void Handle(ArtistsImportedEvent message)
{ {
_commandQueueManager.PushMany(message.ArtistIds.Select(s => new RefreshArtistCommand(s, true)).ToList()); if (message.DoRefresh)
{
_commandQueueManager.Push(new BulkRefreshArtistCommand(message.ArtistIds, true));
}
} }
} }
} }

@ -17,7 +17,7 @@ namespace NzbDrone.Core.Music
public interface IAddArtistService public interface IAddArtistService
{ {
Artist AddArtist(Artist newArtist, bool doRefresh = true); Artist AddArtist(Artist newArtist, bool doRefresh = true);
List<Artist> AddArtists(List<Artist> newArtists); List<Artist> AddArtists(List<Artist> newArtists, bool doRefresh = true);
} }
public class AddArtistService : IAddArtistService public class AddArtistService : IAddArtistService
@ -63,7 +63,7 @@ namespace NzbDrone.Core.Music
return newArtist; return newArtist;
} }
public List<Artist> AddArtists(List<Artist> newArtists) public List<Artist> AddArtists(List<Artist> newArtists, bool doRefresh = true)
{ {
var added = DateTime.UtcNow; var added = DateTime.UtcNow;
var artistsToAdd = new List<Artist>(); var artistsToAdd = new List<Artist>();
@ -88,7 +88,7 @@ namespace NzbDrone.Core.Music
_artistMetadataService.UpsertMany(artistsToAdd.Select(x => x.Metadata.Value).ToList()); _artistMetadataService.UpsertMany(artistsToAdd.Select(x => x.Metadata.Value).ToList());
artistsToAdd.ForEach(x => x.ArtistMetadataId = x.Metadata.Value.Id); artistsToAdd.ForEach(x => x.ArtistMetadataId = x.Metadata.Value.Id);
return _artistService.AddArtists(artistsToAdd); return _artistService.AddArtists(artistsToAdd, doRefresh);
} }
private Artist AddSkyhookData(Artist newArtist) private Artist AddSkyhookData(Artist newArtist)

@ -16,7 +16,7 @@ namespace NzbDrone.Core.Music
Artist GetArtistByMetadataId(int artistMetadataId); Artist GetArtistByMetadataId(int artistMetadataId);
List<Artist> GetArtists(IEnumerable<int> artistIds); List<Artist> GetArtists(IEnumerable<int> artistIds);
Artist AddArtist(Artist newArtist, bool doRefresh); Artist AddArtist(Artist newArtist, bool doRefresh);
List<Artist> AddArtists(List<Artist> newArtists); List<Artist> AddArtists(List<Artist> newArtists, bool doRefresh);
Artist FindById(string foreignArtistId); Artist FindById(string foreignArtistId);
Artist FindByName(string title); Artist FindByName(string title);
Artist FindByNameInexact(string title); Artist FindByNameInexact(string title);
@ -60,11 +60,11 @@ namespace NzbDrone.Core.Music
return newArtist; return newArtist;
} }
public List<Artist> AddArtists(List<Artist> newArtists) public List<Artist> AddArtists(List<Artist> newArtists, bool doRefresh)
{ {
_cache.Clear(); _cache.Clear();
_artistRepository.InsertMany(newArtists); _artistRepository.InsertMany(newArtists);
_eventAggregator.PublishEvent(new ArtistsImportedEvent(newArtists.Select(s => s.Id).ToList())); _eventAggregator.PublishEvent(new ArtistsImportedEvent(newArtists.Select(s => s.Id).ToList(), doRefresh));
return newArtists; return newArtists;
} }

Loading…
Cancel
Save