2017-08-24 19:52:19 +00:00
|
|
|
|
using MediaBrowser.Controller.Providers;
|
2014-02-07 03:10:13 +00:00
|
|
|
|
using MediaBrowser.Model.Configuration;
|
2013-12-02 16:46:25 +00:00
|
|
|
|
using MediaBrowser.Model.Entities;
|
2014-01-02 03:53:27 +00:00
|
|
|
|
using MediaBrowser.Model.Querying;
|
2015-01-22 16:41:34 +00:00
|
|
|
|
using MediaBrowser.Model.Users;
|
2013-12-26 16:53:23 +00:00
|
|
|
|
using System;
|
2013-12-02 16:46:25 +00:00
|
|
|
|
using System.Collections.Generic;
|
2014-02-07 03:10:13 +00:00
|
|
|
|
using System.Linq;
|
2016-10-25 19:02:04 +00:00
|
|
|
|
using MediaBrowser.Model.Serialization;
|
2013-12-02 16:46:25 +00:00
|
|
|
|
|
2013-02-21 01:33:05 +00:00
|
|
|
|
namespace MediaBrowser.Controller.Entities.Movies
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Class BoxSet
|
|
|
|
|
/// </summary>
|
2016-05-31 18:07:54 +00:00
|
|
|
|
public class BoxSet : Folder, IHasTrailers, IHasDisplayOrder, IHasLookupInfo<BoxSetInfo>, IHasShares
|
2013-02-21 01:33:05 +00:00
|
|
|
|
{
|
2014-12-13 03:56:30 +00:00
|
|
|
|
public List<Share> Shares { get; set; }
|
2014-12-28 06:21:39 +00:00
|
|
|
|
|
2013-12-02 16:46:25 +00:00
|
|
|
|
public BoxSet()
|
|
|
|
|
{
|
2017-08-10 18:01:31 +00:00
|
|
|
|
RemoteTrailers = EmptyMediaUrlArray;
|
|
|
|
|
LocalTrailerIds = EmptyGuidArray;
|
|
|
|
|
RemoteTrailerIds = EmptyGuidArray;
|
2014-01-03 20:43:44 +00:00
|
|
|
|
|
|
|
|
|
DisplayOrder = ItemSortBy.PremiereDate;
|
2014-12-13 03:56:30 +00:00
|
|
|
|
Shares = new List<Share>();
|
2013-12-02 16:46:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-06-29 19:10:58 +00:00
|
|
|
|
[IgnoreDataMember]
|
2014-08-14 13:24:30 +00:00
|
|
|
|
protected override bool FilterLinkedChildrenPerUser
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-29 19:10:58 +00:00
|
|
|
|
[IgnoreDataMember]
|
|
|
|
|
public override bool SupportsInheritedParentImages
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-08-10 18:01:31 +00:00
|
|
|
|
public Guid[] LocalTrailerIds { get; set; }
|
|
|
|
|
public Guid[] RemoteTrailerIds { get; set; }
|
2014-01-02 03:53:27 +00:00
|
|
|
|
|
2013-12-02 16:46:25 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets or sets the remote trailers.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The remote trailers.</value>
|
2017-08-10 18:01:31 +00:00
|
|
|
|
public MediaUrl[] RemoteTrailers { get; set; }
|
2013-12-05 16:50:21 +00:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
2014-01-03 20:32:27 +00:00
|
|
|
|
/// Gets or sets the display order.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The display order.</value>
|
|
|
|
|
public string DisplayOrder { get; set; }
|
|
|
|
|
|
2014-12-20 06:06:27 +00:00
|
|
|
|
protected override bool GetBlockUnratedValue(UserPolicy config)
|
2013-12-26 16:53:23 +00:00
|
|
|
|
{
|
2014-02-21 15:24:29 +00:00
|
|
|
|
return config.BlockUnratedItems.Contains(UnratedItem.Movie);
|
2013-12-26 16:53:23 +00:00
|
|
|
|
}
|
2014-01-02 03:53:27 +00:00
|
|
|
|
|
2017-02-10 20:06:52 +00:00
|
|
|
|
public override double? GetDefaultPrimaryImageAspectRatio()
|
|
|
|
|
{
|
|
|
|
|
double value = 2;
|
|
|
|
|
value /= 3;
|
|
|
|
|
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
2015-11-06 15:02:22 +00:00
|
|
|
|
public override UnratedItem GetBlockUnratedType()
|
|
|
|
|
{
|
|
|
|
|
return UnratedItem.Movie;
|
|
|
|
|
}
|
|
|
|
|
|
2016-08-13 19:53:20 +00:00
|
|
|
|
protected override IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService)
|
2016-08-13 05:49:00 +00:00
|
|
|
|
{
|
2017-09-07 18:17:18 +00:00
|
|
|
|
if (IsLegacyBoxSet)
|
|
|
|
|
{
|
|
|
|
|
return base.GetNonCachedChildren(directoryService);
|
|
|
|
|
}
|
2016-08-13 19:53:20 +00:00
|
|
|
|
return new List<BaseItem>();
|
|
|
|
|
}
|
2016-08-13 05:49:00 +00:00
|
|
|
|
|
2017-06-03 07:36:32 +00:00
|
|
|
|
protected override List<BaseItem> LoadChildren()
|
2016-08-13 19:53:20 +00:00
|
|
|
|
{
|
2017-09-07 18:17:18 +00:00
|
|
|
|
if (IsLegacyBoxSet)
|
|
|
|
|
{
|
|
|
|
|
return base.LoadChildren();
|
|
|
|
|
}
|
|
|
|
|
|
2016-08-13 05:49:00 +00:00
|
|
|
|
// Save a trip to the database
|
|
|
|
|
return new List<BaseItem>();
|
|
|
|
|
}
|
|
|
|
|
|
2017-09-07 18:17:18 +00:00
|
|
|
|
[IgnoreDataMember]
|
|
|
|
|
private bool IsLegacyBoxSet
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrWhiteSpace(Path))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (LinkedChildren.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return !FileSystem.ContainsSubPath(ConfigurationManager.ApplicationPaths.DataPath, Path);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-08-03 02:16:37 +00:00
|
|
|
|
[IgnoreDataMember]
|
|
|
|
|
public override bool IsPreSorted
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-06 05:39:07 +00:00
|
|
|
|
public override bool IsAuthorizedToDelete(User user)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-19 04:37:44 +00:00
|
|
|
|
public override bool IsSaveLocalMetadataEnabled()
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-19 04:29:57 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Updates the official rating based on content and returns true or false indicating if it changed.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public bool UpdateRatingToContent()
|
|
|
|
|
{
|
|
|
|
|
var currentOfficialRating = OfficialRating;
|
|
|
|
|
|
|
|
|
|
// Gather all possible ratings
|
2017-05-19 16:40:02 +00:00
|
|
|
|
var ratings = GetLinkedChildren()
|
2015-01-19 04:29:57 +00:00
|
|
|
|
.Select(i => i.OfficialRating)
|
|
|
|
|
.Where(i => !string.IsNullOrEmpty(i))
|
|
|
|
|
.Distinct(StringComparer.OrdinalIgnoreCase)
|
|
|
|
|
.Select(i => new Tuple<string, int?>(i, LocalizationManager.GetRatingLevel(i)))
|
|
|
|
|
.OrderBy(i => i.Item2 ?? 1000)
|
|
|
|
|
.Select(i => i.Item1);
|
|
|
|
|
|
|
|
|
|
OfficialRating = ratings.FirstOrDefault() ?? currentOfficialRating;
|
|
|
|
|
|
|
|
|
|
return !string.Equals(currentOfficialRating ?? string.Empty, OfficialRating ?? string.Empty,
|
|
|
|
|
StringComparison.OrdinalIgnoreCase);
|
|
|
|
|
}
|
|
|
|
|
|
2017-08-19 19:43:35 +00:00
|
|
|
|
public override List<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
2014-01-02 03:53:27 +00:00
|
|
|
|
{
|
|
|
|
|
var children = base.GetChildren(user, includeLinkedChildren);
|
|
|
|
|
|
2014-01-03 20:43:44 +00:00
|
|
|
|
if (string.Equals(DisplayOrder, ItemSortBy.SortName, StringComparison.OrdinalIgnoreCase))
|
2014-01-03 20:32:27 +00:00
|
|
|
|
{
|
|
|
|
|
// Sort by name
|
2017-08-19 19:43:35 +00:00
|
|
|
|
return LibraryManager.Sort(children, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending).ToList();
|
2014-01-03 20:32:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-01-03 20:43:44 +00:00
|
|
|
|
if (string.Equals(DisplayOrder, ItemSortBy.PremiereDate, StringComparison.OrdinalIgnoreCase))
|
2014-01-03 20:32:27 +00:00
|
|
|
|
{
|
|
|
|
|
// Sort by release date
|
2017-08-19 19:43:35 +00:00
|
|
|
|
return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending).ToList();
|
2014-01-03 20:32:27 +00:00
|
|
|
|
}
|
2014-08-14 13:24:30 +00:00
|
|
|
|
|
2014-01-03 20:32:27 +00:00
|
|
|
|
// Default sorting
|
2017-08-19 19:43:35 +00:00
|
|
|
|
return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending).ToList();
|
2014-01-02 03:53:27 +00:00
|
|
|
|
}
|
2014-02-07 03:10:13 +00:00
|
|
|
|
|
|
|
|
|
public BoxSetInfo GetLookupInfo()
|
|
|
|
|
{
|
|
|
|
|
return GetItemLookupInfo<BoxSetInfo>();
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-13 03:56:30 +00:00
|
|
|
|
public override bool IsVisible(User user)
|
|
|
|
|
{
|
2015-04-05 15:01:57 +00:00
|
|
|
|
var userId = user.Id.ToString("N");
|
2014-12-13 03:56:30 +00:00
|
|
|
|
|
2015-04-05 15:01:57 +00:00
|
|
|
|
// Need to check Count > 0 for boxsets created prior to the introduction of Shares
|
|
|
|
|
if (Shares.Count > 0 && Shares.Any(i => string.Equals(userId, i.UserId, StringComparison.OrdinalIgnoreCase)))
|
|
|
|
|
{
|
2014-12-28 06:21:39 +00:00
|
|
|
|
return true;
|
2014-12-13 03:56:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-04-05 15:01:57 +00:00
|
|
|
|
if (base.IsVisible(user))
|
|
|
|
|
{
|
2017-08-24 19:52:19 +00:00
|
|
|
|
return base.GetChildren(user, true).Count > 0;
|
2015-04-05 15:01:57 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-12-13 03:56:30 +00:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2016-12-17 08:27:41 +00:00
|
|
|
|
|
|
|
|
|
public override bool IsVisibleStandalone(User user)
|
|
|
|
|
{
|
|
|
|
|
return IsVisible(user);
|
|
|
|
|
}
|
2013-02-21 01:33:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|