diff --git a/src/NzbDrone.Core/MediaFiles/BookImport/ImportApprovedBooks.cs b/src/NzbDrone.Core/MediaFiles/BookImport/ImportApprovedBooks.cs index a8dd76e97..fc5f3fd9f 100644 --- a/src/NzbDrone.Core/MediaFiles/BookImport/ImportApprovedBooks.cs +++ b/src/NzbDrone.Core/MediaFiles/BookImport/ImportApprovedBooks.cs @@ -109,6 +109,14 @@ namespace NzbDrone.Core.MediaFiles.BookImport continue; } + var edition = EnsureEditionAdded(decisionList); + + if (edition == null) + { + // failed to add the edition, carry on with next one + continue; + } + // if (replaceExisting) // { // RemoveExistingTrackFiles(author, book); @@ -394,11 +402,54 @@ namespace NzbDrone.Core.MediaFiles.BookImport decision.Item.Book = dbBook; decision.Item.Edition = edition; } + + book = dbBook; } return book; } + private Edition EnsureEditionAdded(List> decisions) + { + var book = decisions.First().Item.Book; + var edition = decisions.First().Item.Edition; + + if (edition.Id == 0) + { + var dbEdition = _editionService.GetEditionByForeignEditionId(edition.ForeignEditionId); + + if (dbEdition == null) + { + _logger.Debug($"Adding remote edition {edition}"); + try + { + edition.BookId = book.Id; + edition.Monitored = false; + _editionService.InsertMany(new List { edition }); + + dbEdition = _editionService.GetEditionByForeignEditionId(edition.ForeignEditionId); + } + catch (Exception e) + { + _logger.Error(e, "Failed to add edition {0}", edition); + RejectBook(decisions); + + return null; + } + + // Populate the new DB book + foreach (var decision in decisions) + { + decision.Item.Edition = dbEdition; + } + + edition = dbEdition; + } + } + + return edition; + } + private void RejectBook(List> decisions) { foreach (var decision in decisions)