From ed07f82218dcde4b4b20db4fc3a4bfc01be29c60 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 14 Jul 2024 23:31:39 +0300 Subject: [PATCH] Fixed: Linking Next/Last albums for bulk edit artists Clear statistics cache for ArtistEditedEvent --- .../Artist/ArtistEditorController.cs | 25 +++++++++++++++++-- src/Lidarr.Api.V1/Artist/ArtistResource.cs | 4 +-- .../ArtistStats/ArtistStatisticsService.cs | 8 ++++++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/Lidarr.Api.V1/Artist/ArtistEditorController.cs b/src/Lidarr.Api.V1/Artist/ArtistEditorController.cs index efbaa11e9..e7c69ab20 100644 --- a/src/Lidarr.Api.V1/Artist/ArtistEditorController.cs +++ b/src/Lidarr.Api.V1/Artist/ArtistEditorController.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using Lidarr.Api.V1.Albums; using Lidarr.Http; using Microsoft.AspNetCore.Mvc; using NzbDrone.Common.Extensions; @@ -13,11 +14,13 @@ namespace Lidarr.Api.V1.Artist public class ArtistEditorController : Controller { private readonly IArtistService _artistService; + private readonly IAlbumService _albumService; private readonly IManageCommandQueue _commandQueueManager; - public ArtistEditorController(IArtistService artistService, IManageCommandQueue commandQueueManager) + public ArtistEditorController(IArtistService artistService, IAlbumService albumService, IManageCommandQueue commandQueueManager) { _artistService = artistService; + _albumService = albumService; _commandQueueManager = commandQueueManager; } @@ -89,7 +92,11 @@ namespace Lidarr.Api.V1.Artist }); } - return Accepted(_artistService.UpdateArtists(artistToUpdate, !resource.MoveFiles).ToResource()); + var resources = _artistService.UpdateArtists(artistToUpdate, !resource.MoveFiles).ToResource(); + + LinkNextPreviousAlbums(resources.ToArray()); + + return Accepted(resources); } [HttpDelete] @@ -99,5 +106,19 @@ namespace Lidarr.Api.V1.Artist return new { }; } + + private void LinkNextPreviousAlbums(params ArtistResource[] artists) + { + var artistMetadataIds = artists.Select(x => x.ArtistMetadataId).Distinct().ToList(); + + var nextAlbums = _albumService.GetNextAlbumsByArtistMetadataId(artistMetadataIds); + var lastAlbums = _albumService.GetLastAlbumsByArtistMetadataId(artistMetadataIds); + + foreach (var artistResource in artists) + { + artistResource.NextAlbum = nextAlbums.FirstOrDefault(x => x.ArtistMetadataId == artistResource.ArtistMetadataId).ToResource(); + artistResource.LastAlbum = lastAlbums.FirstOrDefault(x => x.ArtistMetadataId == artistResource.ArtistMetadataId).ToResource(); + } + } } } diff --git a/src/Lidarr.Api.V1/Artist/ArtistResource.cs b/src/Lidarr.Api.V1/Artist/ArtistResource.cs index 73fbe4240..dc6b32343 100644 --- a/src/Lidarr.Api.V1/Artist/ArtistResource.cs +++ b/src/Lidarr.Api.V1/Artist/ArtistResource.cs @@ -108,9 +108,7 @@ namespace Lidarr.Api.V1.Artist Tags = model.Tags, Added = model.Added, AddOptions = model.AddOptions, - Ratings = model.Metadata.Value.Ratings, - - Statistics = new ArtistStatisticsResource() + Ratings = model.Metadata.Value.Ratings }; } diff --git a/src/NzbDrone.Core/ArtistStats/ArtistStatisticsService.cs b/src/NzbDrone.Core/ArtistStats/ArtistStatisticsService.cs index 1ef4936ab..38c0ca767 100644 --- a/src/NzbDrone.Core/ArtistStats/ArtistStatisticsService.cs +++ b/src/NzbDrone.Core/ArtistStats/ArtistStatisticsService.cs @@ -16,6 +16,7 @@ namespace NzbDrone.Core.ArtistStats public class ArtistStatisticsService : IArtistStatisticsService, IHandle, + IHandle, IHandle, IHandle, IHandle, @@ -77,6 +78,13 @@ namespace NzbDrone.Core.ArtistStats _cache.Remove(message.Artist.Id.ToString()); } + [EventHandleOrder(EventHandleOrder.First)] + public void Handle(ArtistEditedEvent message) + { + _cache.Remove("AllArtists"); + _cache.Remove(message.Artist.Id.ToString()); + } + [EventHandleOrder(EventHandleOrder.First)] public void Handle(ArtistUpdatedEvent message) {