pull person sort order from tvdb/tmdb data

pull/702/head
Luke Pulverenti 11 years ago
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…
Cancel
Save