diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index a94c9958c..272274679 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -86,7 +86,6 @@
-
diff --git a/MediaBrowser.Providers/Movies/ManualMovieDbPersonImageProvider.cs b/MediaBrowser.Providers/Movies/ManualMovieDbPersonImageProvider.cs
index a074b10c2..2ad540849 100644
--- a/MediaBrowser.Providers/Movies/ManualMovieDbPersonImageProvider.cs
+++ b/MediaBrowser.Providers/Movies/ManualMovieDbPersonImageProvider.cs
@@ -46,43 +46,26 @@ namespace MediaBrowser.Providers.Movies
return images.Where(i => i.Type == imageType);
}
- public Task> GetAllImages(IHasImages item, CancellationToken cancellationToken)
- {
- return GetAllImagesInternal(item, true, cancellationToken);
- }
-
- public async Task> GetAllImagesInternal(IHasImages item, bool retryOnMissingData, CancellationToken cancellationToken)
+ public async Task> GetAllImages(IHasImages item, CancellationToken cancellationToken)
{
var person = (Person)item;
var id = person.GetProviderId(MetadataProviders.Tmdb);
if (!string.IsNullOrEmpty(id))
{
+ await MovieDbPersonProvider.Current.DownloadPersonInfoIfNeeded(id, cancellationToken).ConfigureAwait(false);
+
var dataFilePath = MovieDbPersonProvider.GetPersonDataFilePath(_config.ApplicationPaths, id);
- try
- {
- var result = _jsonSerializer.DeserializeFromFile(dataFilePath);
+ var result = _jsonSerializer.DeserializeFromFile(dataFilePath);
- var images = result.images ?? new MovieDbPersonProvider.Images();
+ var images = result.images ?? new MovieDbPersonProvider.Images();
- var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
- var tmdbImageUrl = tmdbSettings.images.base_url + "original";
+ var tmdbImageUrl = tmdbSettings.images.base_url + "original";
- return GetImages(images, tmdbImageUrl);
- }
- catch (FileNotFoundException)
- {
-
- }
-
- if (retryOnMissingData)
- {
- await MovieDbPersonProvider.Current.DownloadPersonInfo(id, cancellationToken).ConfigureAwait(false);
-
- return await GetAllImagesInternal(item, false, cancellationToken).ConfigureAwait(false);
- }
+ return GetImages(images, tmdbImageUrl);
}
return new List();
diff --git a/MediaBrowser.Providers/Movies/MovieDbPersonProvider.cs b/MediaBrowser.Providers/Movies/MovieDbPersonProvider.cs
index 3efd8d7fe..c16c50412 100644
--- a/MediaBrowser.Providers/Movies/MovieDbPersonProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbPersonProvider.cs
@@ -86,7 +86,7 @@ namespace MediaBrowser.Providers.Movies
protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo)
{
- if (HasAltMeta(item) && !ConfigurationManager.Configuration.EnableTmdbUpdates)
+ if (HasAltMeta(item))
return false;
return base.NeedsRefreshInternal(item, providerInfo);
@@ -235,17 +235,12 @@ namespace MediaBrowser.Providers.Movies
/// Task.
private async Task FetchInfo(Person person, string id, bool isForcedRefresh, CancellationToken cancellationToken)
{
- var dataFilePath = GetPersonDataFilePath(ConfigurationManager.ApplicationPaths, id);
+ await DownloadPersonInfoIfNeeded(id, cancellationToken).ConfigureAwait(false);
- // Only download if not already there
- // The prescan task will take care of updates so we don't need to re-download here
- if (!File.Exists(dataFilePath))
+ if (isForcedRefresh || !HasAltMeta(person))
{
- await DownloadPersonInfo(id, cancellationToken).ConfigureAwait(false);
- }
+ var dataFilePath = GetPersonDataFilePath(ConfigurationManager.ApplicationPaths, id);
- if (isForcedRefresh || ConfigurationManager.Configuration.EnableTmdbUpdates || !HasAltMeta(person))
- {
var info = JsonSerializer.DeserializeFromFile(dataFilePath);
cancellationToken.ThrowIfCancellationRequested();
@@ -254,10 +249,17 @@ namespace MediaBrowser.Providers.Movies
}
}
- internal async Task DownloadPersonInfo(string id, CancellationToken cancellationToken)
+ internal async Task DownloadPersonInfoIfNeeded(string id, CancellationToken cancellationToken)
{
var personDataPath = GetPersonDataPath(ConfigurationManager.ApplicationPaths, id);
+ var fileInfo = _fileSystem.GetFileSystemInfo(personDataPath);
+
+ if (fileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 7)
+ {
+ return;
+ }
+
var url = string.Format(@"http://api.themoviedb.org/3/person/{1}?api_key={0}&append_to_response=credits,images", MovieDbProvider.ApiKey, id);
using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
diff --git a/MediaBrowser.Providers/Movies/PersonUpdatesPreScanTask.cs b/MediaBrowser.Providers/Movies/PersonUpdatesPreScanTask.cs
deleted file mode 100644
index cbfbf6768..000000000
--- a/MediaBrowser.Providers/Movies/PersonUpdatesPreScanTask.cs
+++ /dev/null
@@ -1,236 +0,0 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Common.Net;
-using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Model.Logging;
-using MediaBrowser.Model.Serialization;
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Providers.Movies
-{
- public class PersonUpdatesPreScanTask : IPeoplePrescanTask
- {
- ///
- /// The updates URL
- ///
- private const string UpdatesUrl = "http://api.themoviedb.org/3/person/changes?start_date={0}&api_key={1}&page={2}";
-
- ///
- /// The _HTTP client
- ///
- private readonly IHttpClient _httpClient;
- ///
- /// The _logger
- ///
- private readonly ILogger _logger;
- ///
- /// The _config
- ///
- private readonly IServerConfigurationManager _config;
- private readonly IJsonSerializer _json;
- private readonly IFileSystem _fileSystem;
-
- ///
- /// Initializes a new instance of the class.
- ///
- /// The logger.
- /// The HTTP client.
- /// The config.
- public PersonUpdatesPreScanTask(ILogger logger, IHttpClient httpClient, IServerConfigurationManager config, IJsonSerializer json, IFileSystem fileSystem)
- {
- _logger = logger;
- _httpClient = httpClient;
- _config = config;
- _json = json;
- _fileSystem = fileSystem;
- }
-
- protected readonly CultureInfo UsCulture = new CultureInfo("en-US");
-
- ///
- /// Runs the specified progress.
- ///
- /// The progress.
- /// The cancellation token.
- /// Task.
- public async Task Run(IProgress progress, CancellationToken cancellationToken)
- {
- if (!_config.Configuration.EnableInternetProviders || !_config.Configuration.EnableTmdbUpdates)
- {
- progress.Report(100);
- return;
- }
-
- var path = MovieDbPersonProvider.GetPersonsDataPath(_config.CommonApplicationPaths);
-
- Directory.CreateDirectory(path);
-
- var timestampFile = Path.Combine(path, "time.txt");
-
- var timestampFileInfo = new FileInfo(timestampFile);
-
- // Don't check for updates every single time
- if (timestampFileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(timestampFileInfo)).TotalDays < 10)
- {
- return;
- }
-
- // Find out the last time we queried tvdb for updates
- var lastUpdateTime = timestampFileInfo.Exists ? File.ReadAllText(timestampFile, Encoding.UTF8) : string.Empty;
-
- var existingDirectories = GetExistingIds(path).ToList();
-
- if (!string.IsNullOrEmpty(lastUpdateTime))
- {
- long lastUpdateTicks;
-
- if (long.TryParse(lastUpdateTime, NumberStyles.Any, UsCulture, out lastUpdateTicks))
- {
- var lastUpdateDate = new DateTime(lastUpdateTicks, DateTimeKind.Utc);
-
- // They only allow up to 14 days of updates
- if ((DateTime.UtcNow - lastUpdateDate).TotalDays > 13)
- {
- lastUpdateDate = DateTime.UtcNow.AddDays(-13);
- }
-
- var updatedIds = await GetIdsToUpdate(lastUpdateDate, 1, cancellationToken).ConfigureAwait(false);
-
- var existingDictionary = existingDirectories.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
-
- var idsToUpdate = updatedIds.Where(i => !string.IsNullOrWhiteSpace(i) && existingDictionary.ContainsKey(i));
-
- await UpdatePeople(idsToUpdate, progress, cancellationToken).ConfigureAwait(false);
- }
- }
-
- File.WriteAllText(timestampFile, DateTime.UtcNow.Ticks.ToString(UsCulture), Encoding.UTF8);
- progress.Report(100);
- }
-
- ///
- /// Gets the existing ids.
- ///
- /// The path.
- /// IEnumerable{System.String}.
- private IEnumerable GetExistingIds(string path)
- {
- return Directory.EnumerateDirectories(path)
- .SelectMany(Directory.EnumerateDirectories)
- .Select(Path.GetFileNameWithoutExtension);
- }
-
- ///
- /// Gets the ids to update.
- ///
- /// The last update time.
- /// The page.
- /// The cancellation token.
- /// Task{IEnumerable{System.String}}.
- private async Task> GetIdsToUpdate(DateTime lastUpdateTime, int page, CancellationToken cancellationToken)
- {
- var hasMorePages = false;
- var list = new List();
-
- // First get last time
- using (var stream = await _httpClient.Get(new HttpRequestOptions
- {
- Url = string.Format(UpdatesUrl, lastUpdateTime.ToString("yyyy-MM-dd"), MovieDbProvider.ApiKey, page),
- CancellationToken = cancellationToken,
- EnableHttpCompression = true,
- ResourcePool = MovieDbProvider.Current.MovieDbResourcePool,
- AcceptHeader = MovieDbProvider.AcceptHeader
-
- }).ConfigureAwait(false))
- {
- var obj = _json.DeserializeFromStream(stream);
-
- var data = obj.results.Select(i => i.id.ToString(UsCulture));
-
- list.AddRange(data);
-
- hasMorePages = page < obj.total_pages;
- }
-
- if (hasMorePages)
- {
- var more = await GetIdsToUpdate(lastUpdateTime, page + 1, cancellationToken).ConfigureAwait(false);
-
- list.AddRange(more);
- }
-
- return list;
- }
-
- ///
- /// Updates the people.
- ///
- /// The ids.
- /// The progress.
- /// The cancellation token.
- /// Task.
- private async Task UpdatePeople(IEnumerable ids, IProgress progress, CancellationToken cancellationToken)
- {
- var list = ids.ToList();
- var numComplete = 0;
-
- foreach (var id in list)
- {
- try
- {
- await UpdatePerson(id, cancellationToken).ConfigureAwait(false);
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error updating tmdb person id {0}", ex, id);
- }
-
- numComplete++;
- double percent = numComplete;
- percent /= list.Count;
- percent *= 100;
-
- progress.Report(percent);
- }
- }
-
- ///
- /// Updates the person.
- ///
- /// The id.
- /// The cancellation token.
- /// Task.
- private Task UpdatePerson(string id, CancellationToken cancellationToken)
- {
- _logger.Info("Updating person from tmdb " + id);
-
- return MovieDbPersonProvider.Current.DownloadPersonInfo(id, cancellationToken);
- }
-
- class Result
- {
- public int id { get; set; }
- public bool? adult { get; set; }
- }
-
- class RootObject
- {
- public List results { get; set; }
- public int page { get; set; }
- public int total_pages { get; set; }
- public int total_results { get; set; }
-
- public RootObject()
- {
- results = new List();
- }
- }
- }
-}