jellyfin/MediaBrowser.Controller/Entities/Movies/BoxSet.cs

222 lines
6.4 KiB
C#
Raw Normal View History

2015-01-28 22:29:02 +01:00
using MediaBrowser.Controller.Entities.TV;
2014-02-07 04:10:13 +01:00
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration;
2013-12-02 17:46:25 +01:00
using MediaBrowser.Model.Entities;
2014-01-02 04:53:27 +01:00
using MediaBrowser.Model.Querying;
2015-01-22 17:41:34 +01:00
using MediaBrowser.Model.Users;
2013-12-26 17:53:23 +01:00
using System;
2013-12-02 17:46:25 +01:00
using System.Collections.Generic;
2014-02-07 04:10:13 +01:00
using System.Linq;
2016-10-25 21:02:04 +02:00
using MediaBrowser.Model.Serialization;
2016-05-06 06:50:39 +02:00
using MediaBrowser.Controller.Entities.Audio;
2013-12-02 17:46:25 +01:00
2013-02-21 02:33:05 +01:00
namespace MediaBrowser.Controller.Entities.Movies
{
/// <summary>
/// Class BoxSet
/// </summary>
public class BoxSet : Folder, IHasTrailers, IHasDisplayOrder, IHasLookupInfo<BoxSetInfo>, IHasShares
2013-02-21 02:33:05 +01:00
{
2014-12-13 04:56:30 +01:00
public List<Share> Shares { get; set; }
2014-12-28 07:21:39 +01:00
2013-12-02 17:46:25 +01:00
public BoxSet()
{
2017-08-10 20:01:31 +02:00
RemoteTrailers = EmptyMediaUrlArray;
LocalTrailerIds = EmptyGuidArray;
RemoteTrailerIds = EmptyGuidArray;
2014-01-03 21:43:44 +01:00
DisplayOrder = ItemSortBy.PremiereDate;
2014-12-13 04:56:30 +01:00
Shares = new List<Share>();
2013-12-02 17:46:25 +01:00
}
2017-06-29 21:10:58 +02:00
[IgnoreDataMember]
2014-08-14 15:24:30 +02:00
protected override bool FilterLinkedChildrenPerUser
{
get
{
return true;
}
}
2017-06-29 21:10:58 +02:00
[IgnoreDataMember]
public override bool SupportsInheritedParentImages
{
get
{
return false;
}
}
2017-08-10 20:01:31 +02:00
public Guid[] LocalTrailerIds { get; set; }
public Guid[] RemoteTrailerIds { get; set; }
2014-01-02 04:53:27 +01:00
2013-12-02 17:46:25 +01:00
/// <summary>
/// Gets or sets the remote trailers.
/// </summary>
/// <value>The remote trailers.</value>
2017-08-10 20:01:31 +02:00
public MediaUrl[] RemoteTrailers { get; set; }
/// <summary>
/// Gets or sets the display order.
/// </summary>
/// <value>The display order.</value>
public string DisplayOrder { get; set; }
2014-12-20 07:06:27 +01:00
protected override bool GetBlockUnratedValue(UserPolicy config)
2013-12-26 17:53:23 +01:00
{
return config.BlockUnratedItems.Contains(UnratedItem.Movie);
2013-12-26 17:53:23 +01:00
}
2014-01-02 04:53:27 +01:00
2017-02-10 21:06:52 +01:00
public override double? GetDefaultPrimaryImageAspectRatio()
{
double value = 2;
value /= 3;
return value;
}
2015-11-06 16:02:22 +01:00
public override UnratedItem GetBlockUnratedType()
{
return UnratedItem.Movie;
}
2016-08-13 21:53:20 +02:00
protected override IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService)
{
2016-08-13 21:53:20 +02:00
if (IsLegacyBoxSet)
{
2016-08-19 20:44:58 +02:00
return base.GetNonCachedChildren(directoryService);
2016-08-13 21:53:20 +02:00
}
return new List<BaseItem>();
}
2017-06-03 09:36:32 +02:00
protected override List<BaseItem> LoadChildren()
2016-08-13 21:53:20 +02:00
{
if (IsLegacyBoxSet)
{
return base.LoadChildren();
}
// Save a trip to the database
return new List<BaseItem>();
}
[IgnoreDataMember]
public override bool IsPreSorted
{
get
{
return true;
}
}
2015-08-15 03:44:30 +02:00
[IgnoreDataMember]
protected override bool SupportsShortcutChildren
{
get
{
2016-08-13 21:53:20 +02:00
if (IsLegacyBoxSet)
{
2017-08-12 21:09:13 +02:00
return false;
2016-08-13 21:53:20 +02:00
}
return false;
}
}
[IgnoreDataMember]
private bool IsLegacyBoxSet
{
get
{
2017-06-21 16:51:11 +02:00
if (string.IsNullOrWhiteSpace(Path))
{
return false;
}
2016-08-14 05:12:26 +02:00
return !FileSystem.ContainsSubPath(ConfigurationManager.ApplicationPaths.DataPath, Path);
2015-08-15 03:44:30 +02:00
}
}
2015-02-06 06:39:07 +01:00
public override bool IsAuthorizedToDelete(User user)
{
return true;
}
2015-02-19 05:37:44 +01:00
public override bool IsSaveLocalMetadataEnabled()
{
return true;
}
2015-01-19 05:29:57 +01: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 18:40:02 +02:00
var ratings = GetLinkedChildren()
2015-01-19 05:29:57 +01: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);
}
2014-01-02 04:53:27 +01:00
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
{
var children = base.GetChildren(user, includeLinkedChildren);
2014-01-03 21:43:44 +01:00
if (string.Equals(DisplayOrder, ItemSortBy.SortName, StringComparison.OrdinalIgnoreCase))
{
// Sort by name
return LibraryManager.Sort(children, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending);
}
2014-01-03 21:43:44 +01:00
if (string.Equals(DisplayOrder, ItemSortBy.PremiereDate, StringComparison.OrdinalIgnoreCase))
{
// Sort by release date
return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending);
}
2014-08-14 15:24:30 +02:00
// Default sorting
2014-01-02 04:53:27 +01:00
return LibraryManager.Sort(children, user, new[] { ItemSortBy.ProductionYear, ItemSortBy.PremiereDate, ItemSortBy.SortName }, SortOrder.Ascending);
}
2014-02-07 04:10:13 +01:00
public BoxSetInfo GetLookupInfo()
{
return GetItemLookupInfo<BoxSetInfo>();
}
2014-12-13 04:56:30 +01:00
public override bool IsVisible(User user)
{
2015-04-05 17:01:57 +02:00
var userId = user.Id.ToString("N");
2014-12-13 04:56:30 +01:00
2015-04-05 17:01:57 +02: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 07:21:39 +01:00
return true;
2014-12-13 04:56:30 +01:00
}
2015-04-05 17:01:57 +02:00
if (base.IsVisible(user))
{
2017-04-22 21:32:24 +02:00
return base.GetChildren(user, true).Any();
2015-04-05 17:01:57 +02:00
}
2014-12-13 04:56:30 +01:00
return false;
}
2016-12-17 09:27:41 +01:00
public override bool IsVisibleStandalone(User user)
{
return IsVisible(user);
}
2013-02-21 02:33:05 +01:00
}
}