From 8e37aa2e7815523fb18ba9aa34d493eabb9262bf Mon Sep 17 00:00:00 2001 From: ta264 Date: Sun, 6 Feb 2022 14:20:20 +0000 Subject: [PATCH] Fixed: Take publisher and format into account when choosing best edition --- .../BookImport/Identification/Distance.cs | 6 ++-- .../Identification/DistanceCalculator.cs | 33 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/BookImport/Identification/Distance.cs b/src/NzbDrone.Core/MediaFiles/BookImport/Identification/Distance.cs index 246c95d1d..5d1fcda9a 100644 --- a/src/NzbDrone.Core/MediaFiles/BookImport/Identification/Distance.cs +++ b/src/NzbDrone.Core/MediaFiles/BookImport/Identification/Distance.cs @@ -18,11 +18,13 @@ public class Distance { "asin", 10.0 }, { "asin_missing", 0.1 }, { "media_count", 1.0 }, - { "media_format", 1.0 }, + { "ebook_format", 0.1 }, + { "audio_format", 0.1 }, + { "wrong_format", 5.0 }, { "year", 1.0 }, { "country", 0.5 }, { "language", 5.0 }, - { "label", 0.5 }, + { "publisher", 0.5 }, { "catalog_number", 0.5 }, { "book_disambiguation", 0.5 }, { "book_id", 5.0 }, diff --git a/src/NzbDrone.Core/MediaFiles/BookImport/Identification/DistanceCalculator.cs b/src/NzbDrone.Core/MediaFiles/BookImport/Identification/DistanceCalculator.cs index ed0eaeebc..2ca89825d 100644 --- a/src/NzbDrone.Core/MediaFiles/BookImport/Identification/DistanceCalculator.cs +++ b/src/NzbDrone.Core/MediaFiles/BookImport/Identification/DistanceCalculator.cs @@ -22,6 +22,10 @@ public static class DistanceCalculator private static readonly RegexReplace CleanTitleCruft = new RegexReplace(@"\((?:unabridged)\)", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Compiled); + private static readonly List EbookFormats = new List { "Kindle Edition", "Nook", "ebook" }; + + private static readonly List AudiobookFormats = new List { "Audiobook", "Audio CD", "Audio Cassette", "Audible Audio", "CD-ROM", "MP3 CD" }; + public static Distance BookDistance(List localTracks, Edition edition) { var dist = new Distance(); @@ -123,6 +127,35 @@ public static Distance BookDistance(List localTracks, Edition edition Logger.Trace($"language: {localLanguage} vs {editionLanguage}; {dist.NormalizedDistance()}"); } + // Publisher - only if set for both the local book and remote edition + var localPublisher = localTracks.MostCommon(x => x.FileTrackInfo.Publisher); + var editionPublisher = edition.Publisher; + if (localPublisher.IsNotNullOrWhiteSpace() && editionPublisher.IsNotNullOrWhiteSpace()) + { + dist.AddString("publisher", localPublisher, editionPublisher); + Logger.Trace($"publisher: {localPublisher} vs {editionPublisher}; {dist.NormalizedDistance()}"); + } + + // try to tilt it towards the correct "type" of release + var isAudio = MediaFileExtensions.AudioExtensions.Contains(localTracks.First().Path.GetPathExtension()); + + if (edition.Format.IsNotNullOrWhiteSpace()) + { + if (!isAudio) + { + // text books should prefer ebook formats + dist.AddBool("ebook_format", !EbookFormats.Contains(edition.Format)); + + // text books should not match audio entries + dist.AddBool("wrong_format", AudiobookFormats.Contains(edition.Format)); + } + else + { + // audio books should prefer audio formats + dist.AddBool("audio_format", !AudiobookFormats.Contains(edition.Format)); + } + } + return dist; }