diff --git a/src/NzbDrone.Core/MediaFiles/BookImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/BookImport/Manual/ManualImportService.cs index 8f64b463c9..05e24ac0a3 100644 --- a/src/NzbDrone.Core/MediaFiles/BookImport/Manual/ManualImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/BookImport/Manual/ManualImportService.cs @@ -228,13 +228,20 @@ public List UpdateItems(List items) { var item = pair.Item; var decision = pair.Decision; + var explicitBook = item.Book; + var explicitEdition = item.Edition; if (decision.Item.Author != null) { item.Author = decision.Item.Author; } - if (decision.Item.Book != null) + if (explicitEdition != null) + { + item.Book = explicitBook; + item.Edition = explicitEdition; + } + else if (decision.Item.Book != null) { item.Book = decision.Item.Book; item.Edition = decision.Item.Edition; diff --git a/src/Readarr.Api.V1/ManualImport/ManualImportController.cs b/src/Readarr.Api.V1/ManualImport/ManualImportController.cs index 95c3690fd5..ec608c3365 100644 --- a/src/Readarr.Api.V1/ManualImport/ManualImportController.cs +++ b/src/Readarr.Api.V1/ManualImport/ManualImportController.cs @@ -5,6 +5,7 @@ using NzbDrone.Core.Books; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.BookImport.Manual; +using NzbDrone.Core.MetadataSource; using NzbDrone.Core.Qualities; using Readarr.Http; @@ -17,18 +18,21 @@ public class ManualImportController : Controller private readonly IBookService _bookService; private readonly IEditionService _editionService; private readonly IManualImportService _manualImportService; + private readonly IProvideBookInfo _bookInfo; private readonly Logger _logger; public ManualImportController(IManualImportService manualImportService, IAuthorService authorService, IEditionService editionService, IBookService bookService, + IProvideBookInfo bookInfo, Logger logger) { _authorService = authorService; _bookService = bookService; _editionService = editionService; _manualImportService = manualImportService; + _bookInfo = bookInfo; _logger = logger; } @@ -65,19 +69,44 @@ private ManualImportResource AddQualityWeight(ManualImportResource item) return item; } + private Edition ResolveEdition(Book book, string foreignEditionId) + { + if (foreignEditionId == null) + { + return null; + } + + var edition = _editionService.GetEditionByForeignEditionId(foreignEditionId); + if (edition != null) + { + return edition; + } + + if (book?.ForeignBookId == null) + { + return null; + } + + var tuple = _bookInfo.GetBookInfo(book.ForeignBookId); + return tuple.Item2.Editions.Value.SingleOrDefault(x => x.ForeignEditionId == foreignEditionId); + } + private List UpdateImportItems(List resources) { var items = new List(); foreach (var resource in resources) { + var book = resource.BookId.HasValue ? _bookService.GetBook(resource.BookId.Value) : null; + var edition = ResolveEdition(book, resource.ForeignEditionId); + items.Add(new ManualImportItem { Id = resource.Id, Path = resource.Path, Name = resource.Name, Author = resource.AuthorId.HasValue ? _authorService.GetAuthor(resource.AuthorId.Value) : null, - Book = resource.BookId.HasValue ? _bookService.GetBook(resource.BookId.Value) : null, - Edition = resource.ForeignEditionId == null ? null : _editionService.GetEditionByForeignEditionId(resource.ForeignEditionId), + Book = book, + Edition = edition, Quality = resource.Quality, ReleaseGroup = resource.ReleaseGroup, IndexerFlags = resource.IndexerFlags,