mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-10-31 10:37:22 -04:00 
			
		
		
		
	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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user