get people info during media refresh
This commit is contained in:
parent
de83adb38c
commit
aa6d6d8ec7
|
@ -45,7 +45,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
if (existing != null)
|
if (existing != null)
|
||||||
{
|
{
|
||||||
existing.Type = PersonType.GuestStar;
|
existing.Type = PersonType.GuestStar;
|
||||||
existing.SortOrder = person.SortOrder ?? existing.SortOrder;
|
MergeExisting(existing, person);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
existing.Role = person.Role;
|
existing.Role = person.Role;
|
||||||
}
|
}
|
||||||
|
|
||||||
existing.SortOrder = person.SortOrder ?? existing.SortOrder;
|
MergeExisting(existing, person);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -83,11 +83,22 @@ namespace MediaBrowser.Controller.Entities
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
existing.SortOrder = person.SortOrder ?? existing.SortOrder;
|
MergeExisting(existing, person);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void MergeExisting(PersonInfo existing, PersonInfo person)
|
||||||
|
{
|
||||||
|
existing.SortOrder = person.SortOrder ?? existing.SortOrder;
|
||||||
|
existing.ImageUrl = person.ImageUrl ?? existing.ImageUrl;
|
||||||
|
|
||||||
|
foreach (var id in person.ProviderIds)
|
||||||
|
{
|
||||||
|
existing.SetProviderId(id.Key, id.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static bool ContainsPerson(List<PersonInfo> people, string name)
|
public static bool ContainsPerson(List<PersonInfo> people, string name)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(name))
|
if (string.IsNullOrWhiteSpace(name))
|
||||||
|
|
|
@ -3,6 +3,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities
|
namespace MediaBrowser.Controller.Entities
|
||||||
{
|
{
|
||||||
|
@ -106,8 +107,13 @@ namespace MediaBrowser.Controller.Entities
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is the small Person stub that is attached to BaseItems
|
/// This is the small Person stub that is attached to BaseItems
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class PersonInfo
|
public class PersonInfo : IHasProviderIds
|
||||||
{
|
{
|
||||||
|
public PersonInfo()
|
||||||
|
{
|
||||||
|
ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
public Guid ItemId { get; set; }
|
public Guid ItemId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -132,6 +138,10 @@ namespace MediaBrowser.Controller.Entities
|
||||||
/// <value>The sort order.</value>
|
/// <value>The sort order.</value>
|
||||||
public int? SortOrder { get; set; }
|
public int? SortOrder { get; set; }
|
||||||
|
|
||||||
|
public string ImageUrl { get; set; }
|
||||||
|
|
||||||
|
public Dictionary<string, string> ProviderIds { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns a <see cref="System.String" /> that represents this instance.
|
/// Returns a <see cref="System.String" /> that represents this instance.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -254,10 +254,53 @@ namespace MediaBrowser.Providers.Manager
|
||||||
if (result.Item.SupportsPeople && result.People != null)
|
if (result.Item.SupportsPeople && result.People != null)
|
||||||
{
|
{
|
||||||
await LibraryManager.UpdatePeople(result.Item as BaseItem, result.People.ToList());
|
await LibraryManager.UpdatePeople(result.Item as BaseItem, result.People.ToList());
|
||||||
|
await SavePeopleMetadata(result.People, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
await result.Item.UpdateToRepository(reason, cancellationToken).ConfigureAwait(false);
|
await result.Item.UpdateToRepository(reason, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task SavePeopleMetadata(List<PersonInfo> people, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
foreach (var person in people)
|
||||||
|
{
|
||||||
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
|
if (person.ProviderIds.Any() || !string.IsNullOrWhiteSpace(person.ImageUrl))
|
||||||
|
{
|
||||||
|
var updateType = ItemUpdateType.MetadataDownload;
|
||||||
|
|
||||||
|
var saveEntity = false;
|
||||||
|
var personEntity = LibraryManager.GetPerson(person.Name);
|
||||||
|
foreach (var id in person.ProviderIds)
|
||||||
|
{
|
||||||
|
if (!string.Equals(personEntity.GetProviderId(id.Key), id.Value, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
personEntity.SetProviderId(id.Key, id.Value);
|
||||||
|
saveEntity = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(person.ImageUrl) && !personEntity.HasImage(ImageType.Primary))
|
||||||
|
{
|
||||||
|
personEntity.SetImage(new ItemImageInfo
|
||||||
|
{
|
||||||
|
Path = person.ImageUrl,
|
||||||
|
Type = ImageType.Primary,
|
||||||
|
IsPlaceholder = true
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
saveEntity = true;
|
||||||
|
updateType = updateType | ItemUpdateType.ImageUpdate;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (saveEntity)
|
||||||
|
{
|
||||||
|
await personEntity.UpdateToRepository(updateType, cancellationToken).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private readonly Task _cachedTask = Task.FromResult(true);
|
private readonly Task _cachedTask = Task.FromResult(true);
|
||||||
protected virtual Task AfterMetadataRefresh(TItemType item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
|
protected virtual Task AfterMetadataRefresh(TItemType item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
|
|
@ -104,7 +104,9 @@ namespace MediaBrowser.Providers.Movies
|
||||||
dataFilePath = dataFilePath ?? MovieDbProvider.Current.GetDataFilePath(tmdbId, language);
|
dataFilePath = dataFilePath ?? MovieDbProvider.Current.GetDataFilePath(tmdbId, language);
|
||||||
movieInfo = movieInfo ?? _jsonSerializer.DeserializeFromFile<MovieDbProvider.CompleteMovieData>(dataFilePath);
|
movieInfo = movieInfo ?? _jsonSerializer.DeserializeFromFile<MovieDbProvider.CompleteMovieData>(dataFilePath);
|
||||||
|
|
||||||
ProcessMainInfo(item, preferredCountryCode, movieInfo);
|
var settings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
|
ProcessMainInfo(item, settings, preferredCountryCode, movieInfo);
|
||||||
item.HasMetadata = true;
|
item.HasMetadata = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,9 +117,10 @@ namespace MediaBrowser.Providers.Movies
|
||||||
/// Processes the main info.
|
/// Processes the main info.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="resultItem">The result item.</param>
|
/// <param name="resultItem">The result item.</param>
|
||||||
|
/// <param name="settings">The settings.</param>
|
||||||
/// <param name="preferredCountryCode">The preferred country code.</param>
|
/// <param name="preferredCountryCode">The preferred country code.</param>
|
||||||
/// <param name="movieData">The movie data.</param>
|
/// <param name="movieData">The movie data.</param>
|
||||||
private void ProcessMainInfo(MetadataResult<T> resultItem, string preferredCountryCode, MovieDbProvider.CompleteMovieData movieData)
|
private void ProcessMainInfo(MetadataResult<T> resultItem, TmdbSettingsResult settings, string preferredCountryCode, MovieDbProvider.CompleteMovieData movieData)
|
||||||
{
|
{
|
||||||
var movie = resultItem.Item;
|
var movie = resultItem.Item;
|
||||||
|
|
||||||
|
@ -247,6 +250,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
}
|
}
|
||||||
|
|
||||||
resultItem.ResetPeople();
|
resultItem.ResetPeople();
|
||||||
|
var tmdbImageUrl = settings.images.base_url + "original";
|
||||||
|
|
||||||
//Actors, Directors, Writers - all in People
|
//Actors, Directors, Writers - all in People
|
||||||
//actors come from cast
|
//actors come from cast
|
||||||
|
@ -254,7 +258,25 @@ namespace MediaBrowser.Providers.Movies
|
||||||
{
|
{
|
||||||
foreach (var actor in movieData.casts.cast.OrderBy(a => a.order))
|
foreach (var actor in movieData.casts.cast.OrderBy(a => a.order))
|
||||||
{
|
{
|
||||||
resultItem.AddPerson(new PersonInfo { Name = actor.name.Trim(), Role = actor.character, Type = PersonType.Actor, SortOrder = actor.order });
|
var personInfo = new PersonInfo
|
||||||
|
{
|
||||||
|
Name = actor.name.Trim(),
|
||||||
|
Role = actor.character,
|
||||||
|
Type = PersonType.Actor,
|
||||||
|
SortOrder = actor.order
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(actor.profile_path))
|
||||||
|
{
|
||||||
|
personInfo.ImageUrl = tmdbImageUrl + actor.profile_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (actor.id > 0)
|
||||||
|
{
|
||||||
|
personInfo.SetProviderId(MetadataProviders.Tmdb, actor.id.ToString(CultureInfo.InvariantCulture));
|
||||||
|
}
|
||||||
|
|
||||||
|
resultItem.AddPerson(personInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,7 +292,24 @@ namespace MediaBrowser.Providers.Movies
|
||||||
type = PersonType.Writer;
|
type = PersonType.Writer;
|
||||||
}
|
}
|
||||||
|
|
||||||
resultItem.AddPerson(new PersonInfo { Name = person.name.Trim(), Role = person.job, Type = type });
|
var personInfo = new PersonInfo
|
||||||
|
{
|
||||||
|
Name = person.name.Trim(),
|
||||||
|
Role = person.job,
|
||||||
|
Type = type
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(person.profile_path))
|
||||||
|
{
|
||||||
|
personInfo.ImageUrl = tmdbImageUrl + person.profile_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (person.id > 0)
|
||||||
|
{
|
||||||
|
personInfo.SetProviderId(MetadataProviders.Tmdb, person.id.ToString(CultureInfo.InvariantCulture));
|
||||||
|
}
|
||||||
|
|
||||||
|
resultItem.AddPerson(personInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -826,6 +826,21 @@ namespace MediaBrowser.Providers.TV
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "id":
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case "Image":
|
||||||
|
{
|
||||||
|
var url = (reader.ReadElementContentAsString() ?? string.Empty).Trim();
|
||||||
|
if (!string.IsNullOrWhiteSpace(url))
|
||||||
|
{
|
||||||
|
personInfo.ImageUrl = TVUtils.BannerUrl + url;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case "SortOrder":
|
case "SortOrder":
|
||||||
{
|
{
|
||||||
var val = reader.ReadElementContentAsString();
|
var val = reader.ReadElementContentAsString();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user