mirror of https://github.com/jellyfin/jellyfin.git
pull person sort order from tvdb/tmdb data
This commit is contained in:
parent
de339b8265
commit
bce86c5022
|
@ -247,11 +247,16 @@ namespace MediaBrowser.Api
|
|||
item.PremiereDate = request.PremiereDate.HasValue ? request.PremiereDate.Value.ToUniversalTime() : (DateTime?)null;
|
||||
item.ProductionYear = request.ProductionYear;
|
||||
item.ProductionLocations = request.ProductionLocations;
|
||||
item.AspectRatio = request.AspectRatio;
|
||||
item.Language = request.Language;
|
||||
item.OfficialRating = request.OfficialRating;
|
||||
item.CustomRating = request.CustomRating;
|
||||
|
||||
var hasAspectRatio = item as IHasAspectRatio;
|
||||
if (hasAspectRatio != null)
|
||||
{
|
||||
hasAspectRatio.AspectRatio = request.AspectRatio;
|
||||
}
|
||||
|
||||
item.DontFetchMeta = !(request.EnableInternetProviders ?? true);
|
||||
if (request.EnableInternetProviders ?? true)
|
||||
{
|
||||
|
|
|
@ -681,6 +681,11 @@ namespace MediaBrowser.Api
|
|||
{
|
||||
var album = originalItem as MusicAlbum;
|
||||
|
||||
if (album == null)
|
||||
{
|
||||
album = originalItem.Parents.OfType<MusicAlbum>().FirstOrDefault();
|
||||
}
|
||||
|
||||
if (album != null)
|
||||
{
|
||||
var linkedItemWithThemes = album.SoundtrackIds
|
||||
|
@ -744,17 +749,12 @@ namespace MediaBrowser.Api
|
|||
: (Folder)_libraryManager.RootFolder)
|
||||
: _dtoService.GetItemByDtoId(id, userId);
|
||||
|
||||
while (GetSoundtrackSongIds(item).Count == 0 && inheritFromParent && item.Parent != null)
|
||||
{
|
||||
item = item.Parent;
|
||||
}
|
||||
|
||||
// Get everything
|
||||
var fields = Enum.GetNames(typeof(ItemFields))
|
||||
.Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true))
|
||||
.ToList();
|
||||
|
||||
var dtos = GetSoundtrackSongIds(item)
|
||||
var dtos = GetSoundtrackSongIds(item, inheritFromParent)
|
||||
.Select(_libraryManager.GetItemById)
|
||||
.OfType<MusicAlbum>()
|
||||
.SelectMany(i => i.RecursiveChildren)
|
||||
|
@ -772,7 +772,7 @@ namespace MediaBrowser.Api
|
|||
};
|
||||
}
|
||||
|
||||
private List<Guid> GetSoundtrackSongIds(BaseItem item)
|
||||
private IEnumerable<Guid> GetSoundtrackSongIds(BaseItem item, bool inherit)
|
||||
{
|
||||
var hasSoundtracks = item as IHasSoundtracks;
|
||||
|
||||
|
@ -781,7 +781,14 @@ namespace MediaBrowser.Api
|
|||
return hasSoundtracks.SoundtrackIds;
|
||||
}
|
||||
|
||||
return new List<Guid>();
|
||||
if (!inherit)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
hasSoundtracks = item.Parents.OfType<IHasSoundtracks>().FirstOrDefault();
|
||||
|
||||
return hasSoundtracks != null ? hasSoundtracks.SoundtrackIds : new List<Guid>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -155,7 +155,7 @@ namespace MediaBrowser.Api.UserLibrary
|
|||
/// <returns>IEnumerable{PersonInfo}.</returns>
|
||||
private IEnumerable<PersonInfo> GetAllPeople(IEnumerable<BaseItem> itemsList, string[] personTypes)
|
||||
{
|
||||
var people = itemsList.SelectMany(i => i.People.OrderBy(p => p.Type));
|
||||
var people = itemsList.SelectMany(i => i.People.OrderBy(p => p.SortOrder ?? int.MaxValue).ThenBy(p => p.Type));
|
||||
|
||||
return personTypes.Length == 0 ?
|
||||
|
||||
|
|
|
@ -483,6 +483,22 @@ namespace MediaBrowser.Controller.Entities
|
|||
[IgnoreDataMember]
|
||||
public Folder Parent { get; set; }
|
||||
|
||||
[IgnoreDataMember]
|
||||
public IEnumerable<Folder> Parents
|
||||
{
|
||||
get
|
||||
{
|
||||
var parent = Parent;
|
||||
|
||||
while (parent != null)
|
||||
{
|
||||
yield return parent;
|
||||
|
||||
parent = parent.Parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When the item first debuted. For movies this could be premiere date, episodes would be first aired
|
||||
/// </summary>
|
||||
|
@ -630,11 +646,6 @@ namespace MediaBrowser.Controller.Entities
|
|||
/// <value>The original run time ticks.</value>
|
||||
public long? OriginalRunTimeTicks { get; set; }
|
||||
/// <summary>
|
||||
/// Gets or sets the aspect ratio.
|
||||
/// </summary>
|
||||
/// <value>The aspect ratio.</value>
|
||||
public string AspectRatio { get; set; }
|
||||
/// <summary>
|
||||
/// Gets or sets the production year.
|
||||
/// </summary>
|
||||
/// <value>The production year.</value>
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
namespace MediaBrowser.Controller.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// Interface IHasAspectRatio
|
||||
/// </summary>
|
||||
public interface IHasAspectRatio
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the aspect ratio.
|
||||
/// </summary>
|
||||
/// <value>The aspect ratio.</value>
|
||||
string AspectRatio { get; set; }
|
||||
}
|
||||
}
|
|
@ -49,6 +49,12 @@ namespace MediaBrowser.Controller.Entities
|
|||
/// <value>The type.</value>
|
||||
public string Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the sort order - ascending
|
||||
/// </summary>
|
||||
/// <value>The sort order.</value>
|
||||
public int? SortOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns a <see cref="System.String" /> that represents this instance.
|
||||
/// </summary>
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace MediaBrowser.Controller.Entities
|
|||
/// <summary>
|
||||
/// Class Video
|
||||
/// </summary>
|
||||
public class Video : BaseItem, IHasMediaStreams
|
||||
public class Video : BaseItem, IHasMediaStreams, IHasAspectRatio
|
||||
{
|
||||
public bool IsMultiPart { get; set; }
|
||||
|
||||
|
@ -65,6 +65,12 @@ namespace MediaBrowser.Controller.Entities
|
|||
return GetPlayableStreamFiles(Path);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the aspect ratio.
|
||||
/// </summary>
|
||||
/// <value>The aspect ratio.</value>
|
||||
public string AspectRatio { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Should be overridden to return the proper folder where metadata lives
|
||||
/// </summary>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using MediaBrowser.Model.LiveTv;
|
||||
using System.IO;
|
||||
using MediaBrowser.Model.LiveTv;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -23,6 +24,14 @@ namespace MediaBrowser.Controller.LiveTv
|
|||
/// <returns>Task{IEnumerable{ChannelInfo}}.</returns>
|
||||
Task<IEnumerable<ChannelInfo>> GetChannelsAsync(CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the channel image asynchronous.
|
||||
/// </summary>
|
||||
/// <param name="channelId">The channel identifier.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Task{Stream}.</returns>
|
||||
Task<Stream> GetChannelImageAsync(string channelId, CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the recordings asynchronous.
|
||||
/// </summary>
|
||||
|
|
|
@ -89,6 +89,7 @@
|
|||
<Compile Include="Entities\GameGenre.cs" />
|
||||
<Compile Include="Entities\GameSystem.cs" />
|
||||
<Compile Include="Entities\IByReferenceItem.cs" />
|
||||
<Compile Include="Entities\IHasAspectRatio.cs" />
|
||||
<Compile Include="Entities\IHasCriticRating.cs" />
|
||||
<Compile Include="Entities\IHasSoundtracks.cs" />
|
||||
<Compile Include="Entities\IItemByName.cs" />
|
||||
|
|
|
@ -375,9 +375,10 @@ namespace MediaBrowser.Controller.Providers
|
|||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
var hasAspectRatio = item as IHasAspectRatio;
|
||||
if (!string.IsNullOrWhiteSpace(val) && hasAspectRatio != null)
|
||||
{
|
||||
item.AspectRatio = val;
|
||||
hasAspectRatio.AspectRatio = val;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -845,7 +845,7 @@ namespace MediaBrowser.Providers.Movies
|
|||
//actors come from cast
|
||||
if (movieData.casts != null && movieData.casts.cast != null)
|
||||
{
|
||||
foreach (var actor in movieData.casts.cast.OrderBy(a => a.order)) movie.AddPerson(new PersonInfo { Name = actor.name.Trim(), Role = actor.character, Type = PersonType.Actor });
|
||||
foreach (var actor in movieData.casts.cast.OrderBy(a => a.order)) movie.AddPerson(new PersonInfo { Name = actor.name.Trim(), Role = actor.character, Type = PersonType.Actor, SortOrder = actor.order });
|
||||
}
|
||||
|
||||
//and the rest from crew
|
||||
|
|
|
@ -301,9 +301,13 @@ namespace MediaBrowser.Providers.Savers
|
|||
builder.Append("<Website>" + SecurityElement.Escape(item.HomePageUrl) + "</Website>");
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(item.AspectRatio))
|
||||
var hasAspectRatio = item as IHasAspectRatio;
|
||||
if (hasAspectRatio != null)
|
||||
{
|
||||
builder.Append("<AspectRatio>" + SecurityElement.Escape(item.AspectRatio) + "</AspectRatio>");
|
||||
if (!string.IsNullOrEmpty(hasAspectRatio.AspectRatio))
|
||||
{
|
||||
builder.Append("<AspectRatio>" + SecurityElement.Escape(hasAspectRatio.AspectRatio) + "</AspectRatio>");
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(item.Language))
|
||||
|
|
|
@ -1056,6 +1056,23 @@ namespace MediaBrowser.Providers.TV
|
|||
break;
|
||||
}
|
||||
|
||||
case "SortOrder":
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
int rval;
|
||||
|
||||
// int.TryParse is local aware, so it can be probamatic, force us culture
|
||||
if (int.TryParse(val, NumberStyles.Integer, UsCulture, out rval))
|
||||
{
|
||||
personInfo.SortOrder = rval;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
reader.Skip();
|
||||
break;
|
||||
|
|
|
@ -433,7 +433,7 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|||
// Ordering by person type to ensure actors and artists are at the front.
|
||||
// This is taking advantage of the fact that they both begin with A
|
||||
// This should be improved in the future
|
||||
var people = item.People.OrderBy(i => i.Type).ToList();
|
||||
var people = item.People.OrderBy(i => i.SortOrder ?? int.MaxValue).ThenBy(i => i.Type).ToList();
|
||||
|
||||
// Attach People by transforming them into BaseItemPerson (DTO)
|
||||
dto.People = new BaseItemPerson[people.Count];
|
||||
|
@ -760,7 +760,11 @@ namespace MediaBrowser.Server.Implementations.Dto
|
|||
dto.ProductionLocations = item.ProductionLocations;
|
||||
}
|
||||
|
||||
dto.AspectRatio = item.AspectRatio;
|
||||
var hasAspectRatio = item as IHasAspectRatio;
|
||||
if (hasAspectRatio != null)
|
||||
{
|
||||
dto.AspectRatio = hasAspectRatio.AspectRatio;
|
||||
}
|
||||
|
||||
dto.BackdropImageTags = GetBackdropImageTags(item);
|
||||
|
||||
|
|
Loading…
Reference in New Issue