Fixed: Make sure exactly one edition is monitored when using remote candidates

pull/1470/head
ta264 3 years ago
parent 2a4f681b17
commit ef35efb127

@ -132,6 +132,7 @@ namespace NzbDrone.Core.MediaFiles.BookImport.Identification
if (!candidateReleases.Any()) if (!candidateReleases.Any())
{ {
_logger.Debug("No local candidates found, trying remote");
candidateReleases = _candidateService.GetRemoteCandidates(localBookRelease, idOverrides); candidateReleases = _candidateService.GetRemoteCandidates(localBookRelease, idOverrides);
if (!config.AddNewAuthors) if (!config.AddNewAuthors)
{ {

@ -429,13 +429,25 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
book.UseDbFieldsFrom(dbBook); book.UseDbFieldsFrom(dbBook);
var editions = _editionService.GetEditionsByBook(dbBook.Id).ToDictionary(x => x.ForeignEditionId); var editions = _editionService.GetEditionsByBook(dbBook.Id).ToDictionary(x => x.ForeignEditionId);
// If we have any database editions, exactly one will be monitored.
// So unmonitor all the found editions and let the UseDbFieldsFrom set
// the monitored status
foreach (var edition in book.Editions.Value) foreach (var edition in book.Editions.Value)
{ {
edition.Monitored = false;
if (editions.TryGetValue(edition.ForeignEditionId, out var dbEdition)) if (editions.TryGetValue(edition.ForeignEditionId, out var dbEdition))
{ {
edition.UseDbFieldsFrom(dbEdition); edition.UseDbFieldsFrom(dbEdition);
} }
} }
// Double check at least one edition is monitored
if (book.Editions.Value.Any() && !book.Editions.Value.Any(x => x.Monitored))
{
var mostPopular = book.Editions.Value.OrderByDescending(x => x.Ratings.Popularity).First();
mostPopular.Monitored = true;
}
} }
var author = _authorService.FindById(authorId); var author = _authorService.FindById(authorId);

Loading…
Cancel
Save