Fixed: Better aggregation of calibre data

pull/965/head
ta264 3 years ago
parent f584d2d8d2
commit 8ec13f5ead

@ -41,17 +41,22 @@ namespace NzbDrone.Core.Books.Calibre
private readonly IHttpClient _httpClient; private readonly IHttpClient _httpClient;
private readonly IMapCoversToLocal _mediaCoverService; private readonly IMapCoversToLocal _mediaCoverService;
private readonly IRemotePathMappingService _pathMapper; private readonly IRemotePathMappingService _pathMapper;
private readonly IRootFolderWatchingService _rootFolderWatchingService;
private readonly Logger _logger; private readonly Logger _logger;
private readonly ICached<CalibreBook> _bookCache;
public CalibreProxy(IHttpClient httpClient, public CalibreProxy(IHttpClient httpClient,
IMapCoversToLocal mediaCoverService, IMapCoversToLocal mediaCoverService,
IRemotePathMappingService pathMapper, IRemotePathMappingService pathMapper,
IRootFolderWatchingService rootFolderWatchingService,
ICacheManager cacheManager, ICacheManager cacheManager,
Logger logger) Logger logger)
{ {
_httpClient = httpClient; _httpClient = httpClient;
_mediaCoverService = mediaCoverService; _mediaCoverService = mediaCoverService;
_pathMapper = pathMapper; _pathMapper = pathMapper;
_rootFolderWatchingService = rootFolderWatchingService;
_bookCache = cacheManager.GetCache<CalibreBook>(GetType());
_logger = logger; _logger = logger;
} }
@ -196,6 +201,7 @@ namespace NzbDrone.Core.Books.Calibre
if (embed) if (embed)
{ {
_rootFolderWatchingService.ReportFileSystemChangeBeginning(file.Path);
EmbedMetadata(file.CalibreId, settings); EmbedMetadata(file.CalibreId, settings);
} }
} }
@ -340,6 +346,8 @@ namespace NzbDrone.Core.Books.Calibre
var localPath = _pathMapper.RemapRemoteToLocal(settings.Host, new OsPath(remotePath)).FullPath; var localPath = _pathMapper.RemapRemoteToLocal(settings.Host, new OsPath(remotePath)).FullPath;
result.Add(localPath); result.Add(localPath);
_bookCache.Set(localPath, book);
} }
} }
catch (HttpException ex) catch (HttpException ex)

@ -1,7 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using NLog; using NLog;
using NzbDrone.Common.Cache; using NzbDrone.Common.Cache;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Serializer; using NzbDrone.Common.Serializer;
using NzbDrone.Core.Books.Calibre; using NzbDrone.Core.Books.Calibre;
using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Parser.Model;
@ -18,8 +17,6 @@ namespace NzbDrone.Core.MediaFiles.BookImport.Aggregation.Aggregators
{ {
_logger = logger; _logger = logger;
_bookCache = cacheManager.GetCache<CalibreBook>(typeof(CalibreProxy)); _bookCache = cacheManager.GetCache<CalibreBook>(typeof(CalibreProxy));
_logger.Trace("Started calibre aug");
} }
public LocalBook Aggregate(LocalBook localTrack, bool others) public LocalBook Aggregate(LocalBook localTrack, bool others)
@ -31,8 +28,10 @@ namespace NzbDrone.Core.MediaFiles.BookImport.Aggregation.Aggregators
{ {
_logger.Trace($"Using calibre data for {localTrack.Path}:\n{book.ToJson()}"); _logger.Trace($"Using calibre data for {localTrack.Path}:\n{book.ToJson()}");
localTrack.CalibreId = book.Id;
var parsed = localTrack.FileTrackInfo; var parsed = localTrack.FileTrackInfo;
parsed.Asin = book.Identifiers.GetValueOrDefault("mobi-asin"); parsed.Asin = book.Identifiers.GetValueOrDefault("mobi-asin") ?? book.Identifiers.GetValueOrDefault("asin");
parsed.Isbn = book.Identifiers.GetValueOrDefault("isbn"); parsed.Isbn = book.Identifiers.GetValueOrDefault("isbn");
parsed.GoodreadsId = book.Identifiers.GetValueOrDefault("goodreads"); parsed.GoodreadsId = book.Identifiers.GetValueOrDefault("goodreads");
parsed.AuthorTitle = book.AuthorSort; parsed.AuthorTitle = book.AuthorSort;

@ -156,6 +156,7 @@ namespace NzbDrone.Core.MediaFiles.BookImport
var bookFile = new BookFile var bookFile = new BookFile
{ {
Path = localTrack.Path.CleanFilePath(), Path = localTrack.Path.CleanFilePath(),
CalibreId = localTrack.CalibreId,
Size = localTrack.Size, Size = localTrack.Size,
Modified = localTrack.Modified, Modified = localTrack.Modified,
DateAdded = DateTime.UtcNow, DateAdded = DateTime.UtcNow,
@ -199,12 +200,6 @@ namespace NzbDrone.Core.MediaFiles.BookImport
_mediaFileService.Delete(previousFile, DeleteMediaFileReason.ManualOverride); _mediaFileService.Delete(previousFile, DeleteMediaFileReason.ManualOverride);
} }
var rootFolder = _rootFolderService.GetBestRootFolder(localTrack.Path);
if (rootFolder.IsCalibreLibrary)
{
bookFile.CalibreId = bookFile.Path.ParseCalibreId();
}
_audioTagService.WriteTags(bookFile, false); _audioTagService.WriteTags(bookFile, false);
_eBookTagService.WriteTags(bookFile, false); _eBookTagService.WriteTags(bookFile, false);
} }

@ -180,7 +180,7 @@ namespace NzbDrone.Core.MediaFiles
.Select(decision => new BookFile .Select(decision => new BookFile
{ {
Path = decision.Item.Path, Path = decision.Item.Path,
CalibreId = decision.Item.Path.ParseCalibreId(), CalibreId = decision.Item.CalibreId,
Size = decision.Item.Size, Size = decision.Item.Size,
Modified = decision.Item.Modified, Modified = decision.Item.Modified,
DateAdded = DateTime.UtcNow, DateAdded = DateTime.UtcNow,

@ -9,6 +9,7 @@ namespace NzbDrone.Core.Parser.Model
public class LocalBook public class LocalBook
{ {
public string Path { get; set; } public string Path { get; set; }
public int CalibreId { get; set; }
public long Size { get; set; } public long Size { get; set; }
public DateTime Modified { get; set; } public DateTime Modified { get; set; }
public ParsedTrackInfo FileTrackInfo { get; set; } public ParsedTrackInfo FileTrackInfo { get; set; }

@ -227,8 +227,6 @@ namespace NzbDrone.Core.Parser
private static readonly Regex AfterDashRegex = new Regex(@"[-:].*", RegexOptions.Compiled); private static readonly Regex AfterDashRegex = new Regex(@"[-:].*", RegexOptions.Compiled);
private static readonly Regex CalibreIdRegex = new Regex(@"\((?<id>\d+)\)", RegexOptions.Compiled);
public static ParsedTrackInfo ParseMusicPath(string path) public static ParsedTrackInfo ParseMusicPath(string path)
{ {
var fileInfo = new FileInfo(path); var fileInfo = new FileInfo(path);
@ -481,15 +479,6 @@ namespace NzbDrone.Core.Parser
return null; return null;
} }
public static int ParseCalibreId(this string path)
{
var bookFolder = path.GetParentPath();
var match = CalibreIdRegex.Match(bookFolder);
return match.Success ? int.Parse(match.Groups["id"].Value) : 0;
}
public static ParsedBookInfo ParseBookTitle(string title) public static ParsedBookInfo ParseBookTitle(string title)
{ {
try try

Loading…
Cancel
Save