mirror of https://github.com/Radarr/Radarr
To tidy: speed up movie module
This commit is contained in:
parent
bd7780196c
commit
6af1289640
|
@ -1,9 +1,11 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Threading;
|
||||
using NLog;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Extensions;
|
||||
|
@ -17,7 +19,8 @@ namespace NzbDrone.Core.MediaCover
|
|||
{
|
||||
public interface IMapCoversToLocal
|
||||
{
|
||||
void ConvertToLocalUrls(int movieId, IEnumerable<MediaCover> covers);
|
||||
Dictionary<string, FileInfo> GetCoverFileInfos();
|
||||
void ConvertToLocalUrls(int movieId, IEnumerable<MediaCover> covers, Dictionary<string, FileInfo> fileInfos = null);
|
||||
string GetCoverPath(int movieId, MediaCoverTypes mediaCoverTypes, int? height = null);
|
||||
}
|
||||
|
||||
|
@ -70,7 +73,19 @@ namespace NzbDrone.Core.MediaCover
|
|||
return Path.Combine(GetMovieCoverPath(movieId), coverTypes.ToString().ToLower() + heightSuffix + ".jpg");
|
||||
}
|
||||
|
||||
public void ConvertToLocalUrls(int movieId, IEnumerable<MediaCover> covers)
|
||||
public Dictionary<string, FileInfo> GetCoverFileInfos()
|
||||
{
|
||||
if (!_diskProvider.FolderExists(_coverRootFolder))
|
||||
{
|
||||
return new Dictionary<string, FileInfo>();
|
||||
}
|
||||
|
||||
return _diskProvider
|
||||
.GetFileInfos(_coverRootFolder, SearchOption.AllDirectories)
|
||||
.ToDictionary(x => x.FullName, PathEqualityComparer.Instance);
|
||||
}
|
||||
|
||||
public void ConvertToLocalUrls(int movieId, IEnumerable<MediaCover> covers, Dictionary<string, FileInfo> fileInfos = null)
|
||||
{
|
||||
if (movieId == 0)
|
||||
{
|
||||
|
@ -90,9 +105,21 @@ namespace NzbDrone.Core.MediaCover
|
|||
mediaCover.RemoteUrl = mediaCover.Url;
|
||||
mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/" + movieId + "/" + mediaCover.CoverType.ToString().ToLower() + ".jpg";
|
||||
|
||||
if (_diskProvider.FileExists(filePath))
|
||||
FileInfo file;
|
||||
var fileExists = false;
|
||||
if (fileInfos != null)
|
||||
{
|
||||
var lastWrite = _diskProvider.FileGetLastWrite(filePath);
|
||||
fileExists = fileInfos.TryGetValue(filePath, out file);
|
||||
}
|
||||
else
|
||||
{
|
||||
file = _diskProvider.GetFileInfo(filePath);
|
||||
fileExists = file.Exists;
|
||||
}
|
||||
|
||||
if (fileExists)
|
||||
{
|
||||
var lastWrite = file.LastWriteTimeUtc;
|
||||
mediaCover.Url += "?lastWrite=" + lastWrite.Ticks;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using FluentValidation;
|
||||
using Nancy;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Datastore.Events;
|
||||
|
@ -40,23 +43,25 @@ namespace Radarr.Api.V3.Movies
|
|||
private readonly IManageCommandQueue _commandQueueManager;
|
||||
private readonly IUpgradableSpecification _qualityUpgradableSpecification;
|
||||
private readonly IConfigService _configService;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public MovieModule(IBroadcastSignalRMessage signalRBroadcaster,
|
||||
IMovieService moviesService,
|
||||
IMovieTranslationService movieTranslationService,
|
||||
IAddMovieService addMovieService,
|
||||
IMapCoversToLocal coverMapper,
|
||||
IManageCommandQueue commandQueueManager,
|
||||
IUpgradableSpecification qualityUpgradableSpecification,
|
||||
IConfigService configService,
|
||||
RootFolderValidator rootFolderValidator,
|
||||
MappedNetworkDriveValidator mappedNetworkDriveValidator,
|
||||
MoviePathValidator moviesPathValidator,
|
||||
MovieExistsValidator moviesExistsValidator,
|
||||
MovieAncestorValidator moviesAncestorValidator,
|
||||
SystemFolderValidator systemFolderValidator,
|
||||
ProfileExistsValidator profileExistsValidator,
|
||||
MovieFolderAsRootFolderValidator movieFolderAsRootFolderValidator)
|
||||
IMovieService moviesService,
|
||||
IMovieTranslationService movieTranslationService,
|
||||
IAddMovieService addMovieService,
|
||||
IMapCoversToLocal coverMapper,
|
||||
IManageCommandQueue commandQueueManager,
|
||||
IUpgradableSpecification qualityUpgradableSpecification,
|
||||
IConfigService configService,
|
||||
RootFolderValidator rootFolderValidator,
|
||||
MappedNetworkDriveValidator mappedNetworkDriveValidator,
|
||||
MoviePathValidator moviesPathValidator,
|
||||
MovieExistsValidator moviesExistsValidator,
|
||||
MovieAncestorValidator moviesAncestorValidator,
|
||||
SystemFolderValidator systemFolderValidator,
|
||||
ProfileExistsValidator profileExistsValidator,
|
||||
MovieFolderAsRootFolderValidator movieFolderAsRootFolderValidator,
|
||||
Logger logger)
|
||||
: base(signalRBroadcaster)
|
||||
{
|
||||
_moviesService = moviesService;
|
||||
|
@ -66,6 +71,7 @@ namespace Radarr.Api.V3.Movies
|
|||
_configService = configService;
|
||||
_coverMapper = coverMapper;
|
||||
_commandQueueManager = commandQueueManager;
|
||||
_logger = logger;
|
||||
|
||||
GetResourceAll = AllMovie;
|
||||
GetResourceById = GetMovie;
|
||||
|
@ -104,6 +110,8 @@ namespace Radarr.Api.V3.Movies
|
|||
var moviesResources = new List<MovieResource>();
|
||||
var configLanguage = (Language)_configService.MovieInfoLanguage;
|
||||
|
||||
Dictionary<string, FileInfo> coverFileInfos = null;
|
||||
|
||||
if (tmdbId > 0)
|
||||
{
|
||||
var movie = _moviesService.FindByTmdbId(tmdbId);
|
||||
|
@ -117,17 +125,34 @@ namespace Radarr.Api.V3.Movies
|
|||
}
|
||||
else
|
||||
{
|
||||
var translations = _movieTranslationService.GetAllTranslationsForLanguage(configLanguage);
|
||||
var movies = _moviesService.GetAllMovies();
|
||||
_logger.Debug("Getting all movies");
|
||||
|
||||
var movieTask = Task.Run(() => _moviesService.GetAllMovies());
|
||||
_logger.Debug("started movie task");
|
||||
|
||||
var translations = _movieTranslationService
|
||||
.GetAllTranslationsForLanguage(configLanguage)
|
||||
.ToDictionary(x => x.Id);
|
||||
_logger.Debug("Got translations");
|
||||
|
||||
coverFileInfos = _coverMapper.GetCoverFileInfos();
|
||||
_logger.Debug("got cover file infos");
|
||||
|
||||
var movies = movieTask.GetAwaiter().GetResult();
|
||||
_logger.Debug("Got movies");
|
||||
|
||||
moviesResources = new List<MovieResource>(movies.Count);
|
||||
|
||||
foreach (var movie in movies)
|
||||
{
|
||||
var translation = GetMovieTranslation(translations, movie, configLanguage);
|
||||
moviesResources.Add(movie.ToResource(_qualityUpgradableSpecification, translation));
|
||||
var translation = GetTranslationFromDict(translations, movie, configLanguage);
|
||||
var resource = movie.ToResource(_qualityUpgradableSpecification, translation);
|
||||
_coverMapper.ConvertToLocalUrls(resource.Id, resource.Images, coverFileInfos);
|
||||
moviesResources.Add(resource);
|
||||
}
|
||||
}
|
||||
|
||||
MapCoversToLocal(moviesResources.ToArray());
|
||||
_logger.Debug("Mapped resources; done");
|
||||
|
||||
return moviesResources;
|
||||
}
|
||||
|
@ -168,6 +193,21 @@ namespace Radarr.Api.V3.Movies
|
|||
return translations.FirstOrDefault(t => t.Language == configLanguage && t.MovieId == movie.Id);
|
||||
}
|
||||
|
||||
private MovieTranslation GetTranslationFromDict(Dictionary<int, MovieTranslation> translations, Movie movie, Language configLanguage)
|
||||
{
|
||||
if (configLanguage == Language.Original)
|
||||
{
|
||||
return new MovieTranslation
|
||||
{
|
||||
Title = movie.OriginalTitle,
|
||||
Overview = movie.Overview
|
||||
};
|
||||
}
|
||||
|
||||
translations.TryGetValue(movie.Id, out var translation);
|
||||
return translation;
|
||||
}
|
||||
|
||||
private int AddMovie(MovieResource moviesResource)
|
||||
{
|
||||
var movie = _addMovieService.AddMovie(moviesResource.ToModel());
|
||||
|
@ -211,12 +251,9 @@ namespace Radarr.Api.V3.Movies
|
|||
_moviesService.DeleteMovie(id, deleteFiles, addExclusion);
|
||||
}
|
||||
|
||||
private void MapCoversToLocal(params MovieResource[] movies)
|
||||
private void MapCoversToLocal(MovieResource movie)
|
||||
{
|
||||
foreach (var moviesResource in movies)
|
||||
{
|
||||
_coverMapper.ConvertToLocalUrls(moviesResource.Id, moviesResource.Images);
|
||||
}
|
||||
_coverMapper.ConvertToLocalUrls(movie.Id, movie.Images);
|
||||
}
|
||||
|
||||
public void Handle(MovieImportedEvent message)
|
||||
|
|
Loading…
Reference in New Issue