2014-08-15 09:35:41 -07:00
|
|
|
|
using MediaBrowser.Common.Progress;
|
2014-02-06 20:10:13 -07:00
|
|
|
|
using MediaBrowser.Controller.Providers;
|
|
|
|
|
using MediaBrowser.Model.Configuration;
|
2013-12-02 09:46:25 -07:00
|
|
|
|
using MediaBrowser.Model.Entities;
|
2014-01-01 20:53:27 -07:00
|
|
|
|
using MediaBrowser.Model.Querying;
|
2013-12-26 09:53:23 -07:00
|
|
|
|
using System;
|
2013-12-02 09:46:25 -07:00
|
|
|
|
using System.Collections.Generic;
|
2014-02-06 20:10:13 -07:00
|
|
|
|
using System.Linq;
|
2014-08-15 09:35:41 -07:00
|
|
|
|
using System.Runtime.Serialization;
|
2014-02-06 20:10:13 -07:00
|
|
|
|
using System.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
2013-12-02 09:46:25 -07:00
|
|
|
|
|
2013-02-20 18:33:05 -07:00
|
|
|
|
namespace MediaBrowser.Controller.Entities.Movies
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Class BoxSet
|
|
|
|
|
/// </summary>
|
2014-07-17 17:39:07 -07:00
|
|
|
|
public class BoxSet : Folder, IHasTrailers, IHasKeywords, IHasPreferredMetadataLanguage, IHasDisplayOrder, IHasLookupInfo<BoxSetInfo>, IMetadataContainer
|
2013-02-20 18:33:05 -07:00
|
|
|
|
{
|
2013-12-02 09:46:25 -07:00
|
|
|
|
public BoxSet()
|
|
|
|
|
{
|
|
|
|
|
RemoteTrailers = new List<MediaUrl>();
|
|
|
|
|
LocalTrailerIds = new List<Guid>();
|
2014-12-10 23:20:28 -07:00
|
|
|
|
RemoteTrailerIds = new List<Guid>();
|
2014-01-03 13:43:44 -07:00
|
|
|
|
|
|
|
|
|
DisplayOrder = ItemSortBy.PremiereDate;
|
2014-01-14 08:50:39 -07:00
|
|
|
|
Keywords = new List<string>();
|
2013-12-02 09:46:25 -07:00
|
|
|
|
}
|
|
|
|
|
|
2014-08-14 06:24:30 -07:00
|
|
|
|
protected override bool FilterLinkedChildrenPerUser
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-12-02 09:46:25 -07:00
|
|
|
|
public List<Guid> LocalTrailerIds { get; set; }
|
2014-12-10 23:20:28 -07:00
|
|
|
|
public List<Guid> RemoteTrailerIds { get; set; }
|
2014-01-01 20:53:27 -07:00
|
|
|
|
|
2013-12-02 09:46:25 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets or sets the remote trailers.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The remote trailers.</value>
|
|
|
|
|
public List<MediaUrl> RemoteTrailers { get; set; }
|
2013-12-05 09:50:21 -07:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets or sets the tags.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The tags.</value>
|
2014-01-14 08:50:39 -07:00
|
|
|
|
public List<string> Keywords { get; set; }
|
2013-12-26 09:53:23 -07:00
|
|
|
|
|
2013-12-26 17:23:58 -07:00
|
|
|
|
public string PreferredMetadataLanguage { get; set; }
|
|
|
|
|
|
2013-12-28 09:58:13 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets or sets the preferred metadata country code.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The preferred metadata country code.</value>
|
|
|
|
|
public string PreferredMetadataCountryCode { get; set; }
|
|
|
|
|
|
2014-01-03 13:32:27 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets or sets the display order.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The display order.</value>
|
|
|
|
|
public string DisplayOrder { get; set; }
|
|
|
|
|
|
2013-12-26 09:53:23 -07:00
|
|
|
|
protected override bool GetBlockUnratedValue(UserConfiguration config)
|
|
|
|
|
{
|
2014-02-21 08:24:29 -07:00
|
|
|
|
return config.BlockUnratedItems.Contains(UnratedItem.Movie);
|
2013-12-26 09:53:23 -07:00
|
|
|
|
}
|
2014-01-01 20:53:27 -07:00
|
|
|
|
|
2014-08-02 19:16:37 -07:00
|
|
|
|
[IgnoreDataMember]
|
|
|
|
|
public override bool IsPreSorted
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-10 23:20:28 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the trailer ids.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>List<Guid>.</returns>
|
|
|
|
|
public List<Guid> GetTrailerIds()
|
|
|
|
|
{
|
|
|
|
|
var list = LocalTrailerIds.ToList();
|
|
|
|
|
list.AddRange(RemoteTrailerIds);
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-01 20:53:27 -07:00
|
|
|
|
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
|
|
|
|
{
|
|
|
|
|
var children = base.GetChildren(user, includeLinkedChildren);
|
|
|
|
|
|
2014-01-03 13:43:44 -07:00
|
|
|
|
if (string.Equals(DisplayOrder, ItemSortBy.SortName, StringComparison.OrdinalIgnoreCase))
|
2014-01-03 13:32:27 -07:00
|
|
|
|
{
|
|
|
|
|
// Sort by name
|
|
|
|
|
return LibraryManager.Sort(children, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending);
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-03 13:43:44 -07:00
|
|
|
|
if (string.Equals(DisplayOrder, ItemSortBy.PremiereDate, StringComparison.OrdinalIgnoreCase))
|
2014-01-03 13:32:27 -07:00
|
|
|
|
{
|
|
|
|
|
// Sort by release date
|
|
|
|
|
return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending);
|
|
|
|
|
}
|
2014-08-14 06:24:30 -07:00
|
|
|
|
|
2014-01-03 13:32:27 -07:00
|
|
|
|
// Default sorting
|
2014-01-01 20:53:27 -07:00
|
|
|
|
return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending);
|
|
|
|
|
}
|
2014-02-06 20:10:13 -07:00
|
|
|
|
|
|
|
|
|
public BoxSetInfo GetLookupInfo()
|
|
|
|
|
{
|
|
|
|
|
return GetItemLookupInfo<BoxSetInfo>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task RefreshAllMetadata(MetadataRefreshOptions refreshOptions, IProgress<double> progress, CancellationToken cancellationToken)
|
|
|
|
|
{
|
|
|
|
|
// Refresh bottom up, children first, then the boxset
|
|
|
|
|
// By then hopefully the movies within will have Tmdb collection values
|
|
|
|
|
var items = RecursiveChildren.ToList();
|
|
|
|
|
|
|
|
|
|
var totalItems = items.Count;
|
|
|
|
|
var percentages = new Dictionary<Guid, double>(totalItems);
|
|
|
|
|
|
|
|
|
|
// Refresh songs
|
|
|
|
|
foreach (var item in items)
|
|
|
|
|
{
|
|
|
|
|
cancellationToken.ThrowIfCancellationRequested();
|
|
|
|
|
var innerProgress = new ActionableProgress<double>();
|
|
|
|
|
|
|
|
|
|
// Avoid implicitly captured closure
|
|
|
|
|
var currentChild = item;
|
|
|
|
|
innerProgress.RegisterAction(p =>
|
|
|
|
|
{
|
|
|
|
|
lock (percentages)
|
|
|
|
|
{
|
|
|
|
|
percentages[currentChild.Id] = p / 100;
|
|
|
|
|
|
|
|
|
|
var percent = percentages.Values.Sum();
|
|
|
|
|
percent /= totalItems;
|
|
|
|
|
percent *= 100;
|
|
|
|
|
progress.Report(percent);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2014-02-15 09:36:09 -07:00
|
|
|
|
// Avoid implicitly captured closure
|
2014-08-10 15:13:17 -07:00
|
|
|
|
await RefreshItem(item, refreshOptions, innerProgress, cancellationToken).ConfigureAwait(false);
|
2014-02-06 20:10:13 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Refresh current item
|
|
|
|
|
await RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
|
progress.Report(100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async Task RefreshItem(BaseItem item, MetadataRefreshOptions refreshOptions, IProgress<double> progress, CancellationToken cancellationToken)
|
|
|
|
|
{
|
|
|
|
|
await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
|
progress.Report(100);
|
|
|
|
|
}
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|