diff --git a/src/NzbDrone.Core/Books/Calibre/CalibreBook.cs b/src/NzbDrone.Core/Books/Calibre/CalibreBook.cs index b10282bb0..54815e02c 100644 --- a/src/NzbDrone.Core/Books/Calibre/CalibreBook.cs +++ b/src/NzbDrone.Core/Books/Calibre/CalibreBook.cs @@ -24,6 +24,8 @@ public class CalibreBook public List Languages { get; set; } + public List Tags { get; set; } + public string Comments { get; set; } public double Rating { get; set; } @@ -72,6 +74,11 @@ public Dictionary> Diff(CalibreBook other) output.Add("Languages", Tuple.Create(string.Join(" / ", Languages), string.Join(" / ", other.Languages))); } + if (!Tags.OrderBy(x => x).SequenceEqual(other.Tags.OrderBy(x => x))) + { + output.Add("Tags", Tuple.Create(string.Join(" / ", Tags), string.Join(" / ", other.Tags))); + } + if (Comments != other.Comments) { output.Add("Comments", Tuple.Create(Comments, other.Comments)); diff --git a/src/NzbDrone.Core/Books/Calibre/CalibreProxy.cs b/src/NzbDrone.Core/Books/Calibre/CalibreProxy.cs index 1012b5d8a..244b5ecdd 100644 --- a/src/NzbDrone.Core/Books/Calibre/CalibreProxy.cs +++ b/src/NzbDrone.Core/Books/Calibre/CalibreProxy.cs @@ -184,6 +184,9 @@ public void SetFields(BookFile file, CalibreSettings settings, bool updateCover } } + var textInfo = CultureInfo.InvariantCulture.TextInfo; + var genres = book.Genres.Select(x => textInfo.ToTitleCase(x.Replace('-', ' '))).ToList(); + var payload = new CalibreChangesPayload { LoadedBookIds = new List { file.CalibreId }, @@ -195,6 +198,7 @@ public void SetFields(BookFile file, CalibreSettings settings, bool updateCover PubDate = book.ReleaseDate, Publisher = edition.Publisher, Languages = edition.Language.CanonicalizeLanguage(), + Tags = genres, Comments = edition.Overview, Rating = (int)(edition.Ratings.Value * 2), Identifiers = new Dictionary diff --git a/src/NzbDrone.Core/Books/Calibre/Resources/CalibreChanges.cs b/src/NzbDrone.Core/Books/Calibre/Resources/CalibreChanges.cs index 420496a13..1762437ee 100644 --- a/src/NzbDrone.Core/Books/Calibre/Resources/CalibreChanges.cs +++ b/src/NzbDrone.Core/Books/Calibre/Resources/CalibreChanges.cs @@ -20,6 +20,7 @@ public class CalibreChanges public DateTime? PubDate { get; set; } public string Publisher { get; set; } public string Languages { get; set; } + public List Tags { get; set; } public string Comments { get; set; } public decimal Rating { get; set; } public Dictionary Identifiers { get; set; } diff --git a/src/NzbDrone.Core/MediaFiles/EbookTagService.cs b/src/NzbDrone.Core/MediaFiles/EbookTagService.cs index 216e1dd3c..923394196 100644 --- a/src/NzbDrone.Core/MediaFiles/EbookTagService.cs +++ b/src/NzbDrone.Core/MediaFiles/EbookTagService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.IO.Abstractions; using System.Linq; @@ -226,6 +227,9 @@ private IEnumerable GetPreviews(List files) var oldTags = dict[file.CalibreId]; + var textInfo = CultureInfo.InvariantCulture.TextInfo; + var genres = book.Genres.Select(x => textInfo.ToTitleCase(x.Replace('-', ' '))).ToList(); + var newTags = new CalibreBook { Title = edition.Title, @@ -233,6 +237,7 @@ private IEnumerable GetPreviews(List files) PubDate = book.ReleaseDate, Publisher = edition.Publisher, Languages = new List { edition.Language.CanonicalizeLanguage() }, + Tags = genres, Comments = edition.Overview, Rating = (int)(edition.Ratings.Value * 2) / 2.0, Identifiers = new Dictionary