From b3f99d8c20d8978489f040d372fc8abc8540adeb Mon Sep 17 00:00:00 2001 From: ta264 Date: Thu, 4 Aug 2022 21:55:21 +0100 Subject: [PATCH] Fixed: Add missing author when a book's author changes in metadata Fixes READARR-VH --- .../AuthorStats/AuthorStatisticsService.cs | 16 ++++++++++++++++ .../Books/Services/RefreshBookService.cs | 6 +++++- src/Readarr.Api.V1/Author/AuthorController.cs | 7 +++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/AuthorStats/AuthorStatisticsService.cs b/src/NzbDrone.Core/AuthorStats/AuthorStatisticsService.cs index f86566c6e..3469ba033 100644 --- a/src/NzbDrone.Core/AuthorStats/AuthorStatisticsService.cs +++ b/src/NzbDrone.Core/AuthorStats/AuthorStatisticsService.cs @@ -15,12 +15,14 @@ namespace NzbDrone.Core.AuthorStats } public class AuthorStatisticsService : IAuthorStatisticsService, + IHandle, IHandle, IHandle, IHandle, IHandle, IHandle, IHandle, + IHandle, IHandle { private readonly IAuthorStatisticsRepository _authorStatisticsRepository; @@ -68,6 +70,13 @@ namespace NzbDrone.Core.AuthorStats return authorStatistics; } + [EventHandleOrder(EventHandleOrder.First)] + public void Handle(AuthorAddedEvent message) + { + _cache.Remove("AllAuthors"); + _cache.Remove(message.Author.Id.ToString()); + } + [EventHandleOrder(EventHandleOrder.First)] public void Handle(AuthorUpdatedEvent message) { @@ -110,6 +119,13 @@ namespace NzbDrone.Core.AuthorStats _cache.Remove(message.Book.AuthorId.ToString()); } + [EventHandleOrder(EventHandleOrder.First)] + public void Handle(BookUpdatedEvent message) + { + _cache.Remove("AllAuthors"); + _cache.Remove(message.Book.AuthorId.ToString()); + } + [EventHandleOrder(EventHandleOrder.First)] public void Handle(BookFileDeletedEvent message) { diff --git a/src/NzbDrone.Core/Books/Services/RefreshBookService.cs b/src/NzbDrone.Core/Books/Services/RefreshBookService.cs index b222d7bcb..c5478c7e6 100644 --- a/src/NzbDrone.Core/Books/Services/RefreshBookService.cs +++ b/src/NzbDrone.Core/Books/Services/RefreshBookService.cs @@ -14,6 +14,7 @@ using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.MetadataSource; +using NzbDrone.Core.RootFolders; namespace NzbDrone.Core.Books { @@ -30,6 +31,7 @@ namespace NzbDrone.Core.Books { private readonly IBookService _bookService; private readonly IAuthorService _authorService; + private readonly IRootFolderService _rootFolderService; private readonly IAddAuthorService _addAuthorService; private readonly IEditionService _editionService; private readonly IProvideAuthorInfo _authorInfo; @@ -44,6 +46,7 @@ namespace NzbDrone.Core.Books public RefreshBookService(IBookService bookService, IAuthorService authorService, + IRootFolderService rootFolderService, IAddAuthorService addAuthorService, IEditionService editionService, IAuthorMetadataService authorMetadataService, @@ -60,6 +63,7 @@ namespace NzbDrone.Core.Books { _bookService = bookService; _authorService = authorService; + _rootFolderService = rootFolderService; _addAuthorService = addAuthorService; _editionService = editionService; _authorInfo = authorInfo; @@ -142,7 +146,7 @@ namespace NzbDrone.Core.Books Metadata = remote.AuthorMetadata.Value, MetadataProfileId = oldAuthor.MetadataProfileId, QualityProfileId = oldAuthor.QualityProfileId, - RootFolderPath = oldAuthor.RootFolderPath, + RootFolderPath = _rootFolderService.GetBestRootFolderPath(oldAuthor.Path), Monitored = oldAuthor.Monitored, Tags = oldAuthor.Tags }; diff --git a/src/Readarr.Api.V1/Author/AuthorController.cs b/src/Readarr.Api.V1/Author/AuthorController.cs index 0d859f6e0..0d58356c0 100644 --- a/src/Readarr.Api.V1/Author/AuthorController.cs +++ b/src/Readarr.Api.V1/Author/AuthorController.cs @@ -29,6 +29,7 @@ namespace Readarr.Api.V1.Author IHandle, IHandle, IHandle, + IHandle, IHandle, IHandle, IHandle, @@ -255,6 +256,12 @@ namespace Readarr.Api.V1.Author BroadcastResourceChange(ModelAction.Updated, GetAuthorResource(message.BookFile.Author.Value)); } + [NonAction] + public void Handle(AuthorAddedEvent message) + { + BroadcastResourceChange(ModelAction.Updated, GetAuthorResource(message.Author)); + } + [NonAction] public void Handle(AuthorUpdatedEvent message) {