aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Channels/Channel.cs6
-rw-r--r--MediaBrowser.Controller/Channels/IChannelManager.cs2
-rw-r--r--MediaBrowser.Controller/Drawing/IImageEncoder.cs2
-rw-r--r--MediaBrowser.Controller/Drawing/IImageProcessor.cs4
-rw-r--r--MediaBrowser.Controller/Drawing/ImageHelper.cs10
-rw-r--r--MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs2
-rw-r--r--MediaBrowser.Controller/Dto/DtoOptions.cs21
-rw-r--r--MediaBrowser.Controller/Entities/AggregateFolder.cs1
-rw-r--r--MediaBrowser.Controller/Entities/Audio/Audio.cs4
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs25
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicArtist.cs14
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicGenre.cs10
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs118
-rw-r--r--MediaBrowser.Controller/Entities/CollectionFolder.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs116
-rw-r--r--MediaBrowser.Controller/Entities/GameGenre.cs10
-rw-r--r--MediaBrowser.Controller/Entities/Genre.cs10
-rw-r--r--MediaBrowser.Controller/Entities/IHasImages.cs2
-rw-r--r--MediaBrowser.Controller/Entities/IHasUserData.cs2
-rw-r--r--MediaBrowser.Controller/Entities/IItemByName.cs7
-rw-r--r--MediaBrowser.Controller/Entities/InternalItemsQuery.cs51
-rw-r--r--MediaBrowser.Controller/Entities/Movies/BoxSet.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Movies/Movie.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Person.cs16
-rw-r--r--MediaBrowser.Controller/Entities/Studio.cs10
-rw-r--r--MediaBrowser.Controller/Entities/TV/Episode.cs2
-rw-r--r--MediaBrowser.Controller/Entities/TV/Season.cs27
-rw-r--r--MediaBrowser.Controller/Entities/TV/Series.cs65
-rw-r--r--MediaBrowser.Controller/Entities/UserRootFolder.cs8
-rw-r--r--MediaBrowser.Controller/Entities/UserView.cs16
-rw-r--r--MediaBrowser.Controller/Entities/UserViewBuilder.cs73
-rw-r--r--MediaBrowser.Controller/Entities/Video.cs41
-rw-r--r--MediaBrowser.Controller/Entities/Year.cs20
-rw-r--r--MediaBrowser.Controller/IO/FileData.cs2
-rw-r--r--MediaBrowser.Controller/Library/ILibraryManager.cs24
-rw-r--r--MediaBrowser.Controller/Library/IMusicManager.cs18
-rw-r--r--MediaBrowser.Controller/Library/IUserDataManager.cs4
-rw-r--r--MediaBrowser.Controller/Library/IUserViewManager.cs3
-rw-r--r--MediaBrowser.Controller/Library/ItemResolveArgs.cs2
-rw-r--r--MediaBrowser.Controller/LiveTv/ILiveTvManager.cs11
-rw-r--r--MediaBrowser.Controller/LiveTv/LiveStream.cs50
-rw-r--r--MediaBrowser.Controller/LiveTv/LiveTvChannel.cs4
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj8
-rw-r--r--MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs20
-rw-r--r--MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs2
-rw-r--r--MediaBrowser.Controller/MediaEncoding/MediaEncoderHelpers.cs2
-rw-r--r--MediaBrowser.Controller/Net/IHttpResultFactory.cs4
-rw-r--r--MediaBrowser.Controller/Net/StaticResultOptions.cs2
-rw-r--r--MediaBrowser.Controller/Playlists/Playlist.cs26
-rw-r--r--MediaBrowser.Controller/Providers/DirectoryService.cs2
-rw-r--r--MediaBrowser.Controller/Providers/IDirectoryService.cs2
-rw-r--r--MediaBrowser.Controller/Providers/LocalImageInfo.cs2
-rw-r--r--MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs3
-rw-r--r--MediaBrowser.Controller/Resolvers/IItemResolver.cs2
-rw-r--r--MediaBrowser.Controller/Resolvers/IResolverIgnoreRule.cs2
-rw-r--r--MediaBrowser.Controller/TV/ITVSeriesManager.cs10
56 files changed, 436 insertions, 470 deletions
diff --git a/MediaBrowser.Controller/Channels/Channel.cs b/MediaBrowser.Controller/Channels/Channel.cs
index a2590dec7..35c2ea1aa 100644
--- a/MediaBrowser.Controller/Channels/Channel.cs
+++ b/MediaBrowser.Controller/Channels/Channel.cs
@@ -38,12 +38,12 @@ namespace MediaBrowser.Controller.Channels
set { }
}
- protected override async Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query)
+ protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query)
{
try
{
// Don't blow up here because it could cause parent screens with other content to fail
- return await ChannelManager.GetChannelItemsInternal(new ChannelItemQuery
+ return ChannelManager.GetChannelItemsInternal(new ChannelItemQuery
{
ChannelId = Id.ToString("N"),
Limit = query.Limit,
@@ -52,7 +52,7 @@ namespace MediaBrowser.Controller.Channels
SortBy = query.SortBy,
SortOrder = query.SortOrder
- }, new Progress<double>(), CancellationToken.None);
+ }, new Progress<double>(), CancellationToken.None).Result;
}
catch
{
diff --git a/MediaBrowser.Controller/Channels/IChannelManager.cs b/MediaBrowser.Controller/Channels/IChannelManager.cs
index 792744628..824bdf8ff 100644
--- a/MediaBrowser.Controller/Channels/IChannelManager.cs
+++ b/MediaBrowser.Controller/Channels/IChannelManager.cs
@@ -110,7 +110,7 @@ namespace MediaBrowser.Controller.Channels
/// <param name="item">The item.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{IEnumerable{MediaSourceInfo}}.</returns>
- Task<IEnumerable<MediaSourceInfo>> GetStaticMediaSources(BaseItem item, CancellationToken cancellationToken);
+ IEnumerable<MediaSourceInfo> GetStaticMediaSources(BaseItem item, CancellationToken cancellationToken);
/// <summary>
/// Gets the channel folder.
diff --git a/MediaBrowser.Controller/Drawing/IImageEncoder.cs b/MediaBrowser.Controller/Drawing/IImageEncoder.cs
index 64d997dba..9b895587f 100644
--- a/MediaBrowser.Controller/Drawing/IImageEncoder.cs
+++ b/MediaBrowser.Controller/Drawing/IImageEncoder.cs
@@ -19,7 +19,7 @@ namespace MediaBrowser.Controller.Drawing
/// <summary>
/// Encodes the image.
/// </summary>
- void EncodeImage(string inputPath, ImageSize? originalImageSize, string outputPath, bool autoOrient, int quality, ImageProcessingOptions options, ImageFormat outputFormat);
+ string EncodeImage(string inputPath, DateTime dateModified, string outputPath, bool autoOrient, int quality, ImageProcessingOptions options, ImageFormat outputFormat);
/// <summary>
/// Creates the image collage.
diff --git a/MediaBrowser.Controller/Drawing/IImageProcessor.cs b/MediaBrowser.Controller/Drawing/IImageProcessor.cs
index a107c1232..d98638d55 100644
--- a/MediaBrowser.Controller/Drawing/IImageProcessor.cs
+++ b/MediaBrowser.Controller/Drawing/IImageProcessor.cs
@@ -105,7 +105,7 @@ namespace MediaBrowser.Controller.Drawing
/// Creates the image collage.
/// </summary>
/// <param name="options">The options.</param>
- Task CreateImageCollage(ImageCollageOptions options);
+ void CreateImageCollage(ImageCollageOptions options);
/// <summary>
/// Gets a value indicating whether [supports image collage creation].
@@ -114,5 +114,7 @@ namespace MediaBrowser.Controller.Drawing
bool SupportsImageCollageCreation { get; }
IImageEncoder ImageEncoder { get; set; }
+
+ void SaveImageSize(string path, DateTime imageDateModified, ImageSize size);
}
}
diff --git a/MediaBrowser.Controller/Drawing/ImageHelper.cs b/MediaBrowser.Controller/Drawing/ImageHelper.cs
index 30c4e90fb..54f2ff987 100644
--- a/MediaBrowser.Controller/Drawing/ImageHelper.cs
+++ b/MediaBrowser.Controller/Drawing/ImageHelper.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Entities;
+using System;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities;
@@ -18,6 +19,13 @@ namespace MediaBrowser.Controller.Drawing
return GetSizeEstimate(options);
}
+ public static IImageProcessor ImageProcessor { get; set; }
+
+ public static void SaveImageSize(string path, DateTime dateModified, ImageSize size)
+ {
+ ImageProcessor.SaveImageSize(path, dateModified, size);
+ }
+
private static ImageSize GetSizeEstimate(ImageProcessingOptions options)
{
if (options.Width.HasValue && options.Height.HasValue)
diff --git a/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs b/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs
index 70ac08343..cfb3a97ee 100644
--- a/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs
+++ b/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs
@@ -10,6 +10,8 @@ namespace MediaBrowser.Controller.Drawing
{
public class ImageProcessingOptions
{
+ public string ItemId { get; set; }
+ public string ItemType { get; set; }
public IHasImages Item { get; set; }
public ItemImageInfo Image { get; set; }
diff --git a/MediaBrowser.Controller/Dto/DtoOptions.cs b/MediaBrowser.Controller/Dto/DtoOptions.cs
index e69b64948..b9d9d7dda 100644
--- a/MediaBrowser.Controller/Dto/DtoOptions.cs
+++ b/MediaBrowser.Controller/Dto/DtoOptions.cs
@@ -23,17 +23,28 @@ namespace MediaBrowser.Controller.Dto
public bool AddCurrentProgram { get; set; }
public DtoOptions()
+ : this(true)
+ {
+ }
+
+ public DtoOptions(bool allFields)
{
- Fields = new List<ItemFields>();
ImageTypeLimit = int.MaxValue;
EnableImages = true;
EnableUserData = true;
AddCurrentProgram = true;
- Fields = Enum.GetNames(typeof (ItemFields))
- .Select(i => (ItemFields) Enum.Parse(typeof (ItemFields), i, true))
- .Except(DefaultExcludedFields)
- .ToList();
+ if (allFields)
+ {
+ Fields = Enum.GetNames(typeof(ItemFields))
+ .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true))
+ .Except(DefaultExcludedFields)
+ .ToList();
+ }
+ else
+ {
+ Fields = new List<ItemFields>();
+ }
ImageTypes = Enum.GetNames(typeof(ImageType))
.Select(i => (ImageType)Enum.Parse(typeof(ImageType), i, true))
diff --git a/MediaBrowser.Controller/Entities/AggregateFolder.cs b/MediaBrowser.Controller/Entities/AggregateFolder.cs
index a1de23c93..fe8ac0919 100644
--- a/MediaBrowser.Controller/Entities/AggregateFolder.cs
+++ b/MediaBrowser.Controller/Entities/AggregateFolder.cs
@@ -6,7 +6,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization;
diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs
index 92d8d95bc..4d35531cb 100644
--- a/MediaBrowser.Controller/Entities/Audio/Audio.cs
+++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs
@@ -131,7 +131,7 @@ namespace MediaBrowser.Controller.Entities.Audio
/// Creates the name of the sort.
/// </summary>
/// <returns>System.String.</returns>
- protected override string CreateSortName()
+ protected override string CreateSortNameInternal()
{
return (ParentIndexNumber != null ? ParentIndexNumber.Value.ToString("0000 - ") : "")
+ (IndexNumber != null ? IndexNumber.Value.ToString("0000 - ") : "") + Name;
@@ -209,7 +209,7 @@ namespace MediaBrowser.Controller.Entities.Audio
if (SourceType == SourceType.Channel)
{
var sources = ChannelManager.GetStaticMediaSources(this, CancellationToken.None)
- .Result.ToList();
+ .ToList();
if (sources.Count > 0)
{
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
index f40ab3cde..e9eca19cf 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
@@ -8,6 +8,7 @@ using System.Linq;
using MediaBrowser.Model.Serialization;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Dto;
@@ -42,20 +43,22 @@ namespace MediaBrowser.Controller.Entities.Audio
[IgnoreDataMember]
public MusicArtist MusicArtist
{
- get
- {
- var artist = GetParents().OfType<MusicArtist>().FirstOrDefault();
+ get { return GetMusicArtist(new DtoOptions(true)); }
+ }
- if (artist == null)
+ public MusicArtist GetMusicArtist(DtoOptions options)
+ {
+ var artist = GetParents().OfType<MusicArtist>().FirstOrDefault();
+
+ if (artist == null)
+ {
+ var name = AlbumArtist;
+ if (!string.IsNullOrWhiteSpace(name))
{
- var name = AlbumArtist;
- if (!string.IsNullOrWhiteSpace(name))
- {
- artist = LibraryManager.GetArtist(name);
- }
+ artist = LibraryManager.GetArtist(name, options);
}
- return artist;
}
+ return artist;
}
[IgnoreDataMember]
@@ -171,7 +174,7 @@ namespace MediaBrowser.Controller.Entities.Audio
id.AlbumArtists = AlbumArtists;
- var artist = MusicArtist;
+ var artist = GetMusicArtist(new DtoOptions(false));
if (artist != null)
{
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
index 8d83f8a35..b0b9493a5 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
@@ -266,20 +266,6 @@ namespace MediaBrowser.Controller.Entities.Audio
return info;
}
- public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
- {
- return inputItems.Where(GetItemFilter());
- }
-
- public Func<BaseItem, bool> GetItemFilter()
- {
- return i =>
- {
- var hasArtist = i as IHasArtist;
- return hasArtist != null && hasArtist.HasAnyArtist(Name);
- };
- }
-
[IgnoreDataMember]
public override bool SupportsPeople
{
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
index 2f99e530e..d4a85b4d0 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
@@ -91,16 +91,6 @@ namespace MediaBrowser.Controller.Entities.Audio
}
}
- public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
- {
- return inputItems.Where(GetItemFilter());
- }
-
- public Func<BaseItem, bool> GetItemFilter()
- {
- return i => i is IHasMusicGenres && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase);
- }
-
[IgnoreDataMember]
public override bool SupportsPeople
{
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 999f6db3f..346442f59 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -21,7 +21,8 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
+
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Extensions;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Sorting;
@@ -186,10 +187,15 @@ namespace MediaBrowser.Controller.Entities
}
set
{
+ var isSortNameDefault = IsSortNameDefault(SortName);
+
_name = value;
- // lazy load this again
- _sortName = null;
+ if (isSortNameDefault)
+ {
+ // lazy load this again
+ SortName = null;
+ }
}
}
@@ -580,7 +586,6 @@ namespace MediaBrowser.Controller.Entities
}
}
- private string _forcedSortName;
/// <summary>
/// Gets or sets the name of the forced sort.
/// </summary>
@@ -588,8 +593,42 @@ namespace MediaBrowser.Controller.Entities
[IgnoreDataMember]
public string ForcedSortName
{
- get { return _forcedSortName; }
- set { _forcedSortName = value; _sortName = null; }
+ get
+ {
+ var sortName = SortName;
+
+ if (string.IsNullOrWhiteSpace(sortName))
+ {
+ return null;
+ }
+
+ if (string.Equals(sortName, CreateSortName(), StringComparison.OrdinalIgnoreCase))
+ {
+ return null;
+ }
+
+ return sortName;
+ }
+ set
+ {
+ if (string.IsNullOrWhiteSpace(value))
+ {
+ SortName = null;
+ }
+ else
+ {
+ var newValue = CreateSortNameFromCustomValue(value);
+
+ if (string.Equals(newValue, CreateSortName(), StringComparison.OrdinalIgnoreCase))
+ {
+ SortName = null;
+ }
+ else
+ {
+ SortName = newValue;
+ }
+ }
+ }
}
private string _sortName;
@@ -604,15 +643,7 @@ namespace MediaBrowser.Controller.Entities
{
if (_sortName == null)
{
- if (!string.IsNullOrWhiteSpace(ForcedSortName))
- {
- // Need the ToLower because that's what CreateSortName does
- _sortName = ModifySortChunks(ForcedSortName).ToLower();
- }
- else
- {
- _sortName = CreateSortName();
- }
+ _sortName = CreateSortName();
}
return _sortName;
}
@@ -622,6 +653,31 @@ namespace MediaBrowser.Controller.Entities
}
}
+ private string CreateSortNameFromCustomValue(string value)
+ {
+ return string.IsNullOrWhiteSpace(value) ? null : NormalizeCustomSortName(value);
+ }
+
+ protected virtual string NormalizeCustomSortName(string value)
+ {
+ if (ConfigurationManager.Configuration.EnableSimpleSortNameHandling)
+ {
+ return value.RemoveDiacritics().ToLower();
+ }
+
+ return ModifySortChunks(value).ToLower();
+ }
+
+ public bool IsSortNameDefault(string value)
+ {
+ if (string.IsNullOrWhiteSpace(value))
+ {
+ return true;
+ }
+
+ return string.Equals(CreateSortNameFromCustomValue(value), CreateSortName(), StringComparison.OrdinalIgnoreCase);
+ }
+
public string GetInternalMetadataPath()
{
var basePath = ConfigurationManager.ApplicationPaths.InternalMetadataPath;
@@ -643,14 +699,22 @@ namespace MediaBrowser.Controller.Entities
return System.IO.Path.Combine(basePath, idString.Substring(0, 2), idString);
}
+ protected string CreateSortName()
+ {
+ if (string.IsNullOrWhiteSpace(Name))
+ {
+ return null;
+ }
+
+ return CreateSortNameInternal();
+ }
+
/// <summary>
/// Creates the name of the sort.
/// </summary>
/// <returns>System.String.</returns>
- protected virtual string CreateSortName()
+ protected virtual string CreateSortNameInternal()
{
- if (Name == null) return null; //some items may not have name filled in properly
-
if (!EnableAlphaNumericSorting)
{
return Name.TrimStart();
@@ -1303,7 +1367,6 @@ namespace MediaBrowser.Controller.Entities
public void AfterMetadataRefresh()
{
- _sortName = null;
}
/// <summary>
@@ -1680,7 +1743,7 @@ namespace MediaBrowser.Controller.Entities
private BaseItem FindLinkedChild(LinkedChild info)
{
- if (!string.IsNullOrEmpty(info.Path))
+ if (!string.IsNullOrWhiteSpace(info.Path))
{
var itemByPath = LibraryManager.FindByPath(info.Path, null);
@@ -1809,10 +1872,13 @@ namespace MediaBrowser.Controller.Entities
/// Do whatever refreshing is necessary when the filesystem pertaining to this item has changed.
/// </summary>
/// <returns>Task.</returns>
- public virtual Task ChangedExternally()
+ public virtual void ChangedExternally()
{
- ProviderManager.QueueRefresh(Id, new MetadataRefreshOptions(FileSystem), RefreshPriority.High);
- return Task.FromResult(true);
+ ProviderManager.QueueRefresh(Id, new MetadataRefreshOptions(FileSystem)
+ {
+ ValidateChildren = true,
+
+ }, RefreshPriority.High);
}
/// <summary>
@@ -2187,8 +2253,6 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public virtual bool BeforeMetadataRefresh()
{
- _sortName = null;
-
var hasChanges = false;
if (string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Path))
@@ -2210,7 +2274,7 @@ namespace MediaBrowser.Controller.Entities
return path;
}
- public virtual Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> itemFields)
+ public virtual void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields)
{
if (RunTimeTicks.HasValue)
{
@@ -2226,8 +2290,6 @@ namespace MediaBrowser.Controller.Entities
}
}
}
-
- return Task.FromResult(true);
}
protected Task RefreshMetadataForOwnedItem(BaseItem ownedItem, bool copyTitleMetadata, MetadataRefreshOptions options, CancellationToken cancellationToken)
diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs
index 24474ba55..0a5faa727 100644
--- a/MediaBrowser.Controller/Entities/CollectionFolder.cs
+++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs
@@ -7,7 +7,7 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Extensions;
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index edac27f99..7566911a1 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -10,8 +10,9 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.Channels;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
@@ -671,8 +672,9 @@ namespace MediaBrowser.Controller.Entities
{
return ItemRepository.GetItemList(new InternalItemsQuery
{
- ParentId = Id,
- GroupByPresentationUniqueKey = false
+ Parent = this,
+ GroupByPresentationUniqueKey = false,
+ DtoOptions = new DtoOptions(true)
});
}
@@ -690,9 +692,13 @@ namespace MediaBrowser.Controller.Entities
{
Recursive = false,
Limit = 0,
- ParentId = Id
+ Parent = this,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
- }).Result;
+ });
return result.TotalRecordCount;
}
@@ -705,9 +711,13 @@ namespace MediaBrowser.Controller.Entities
IsFolder = false,
IsVirtualItem = false,
EnableTotalRecordCount = true,
- Limit = 0
+ Limit = 0,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
- }).Result.TotalRecordCount;
+ }).TotalRecordCount;
}
public QueryResult<BaseItem> QueryRecursive(InternalItemsQuery query)
@@ -733,7 +743,10 @@ namespace MediaBrowser.Controller.Entities
if (!(this is UserRootFolder) && !(this is AggregateFolder))
{
- query.ParentId = query.ParentId ?? Id;
+ if (!query.ParentId.HasValue)
+ {
+ query.Parent = this;
+ }
}
if (RequiresPostFiltering2(query))
@@ -813,30 +826,6 @@ namespace MediaBrowser.Controller.Entities
}
}
- if (query.SortBy != null && query.SortBy.Length > 0)
- {
- if (query.SortBy.Contains(ItemSortBy.AiredEpisodeOrder, StringComparer.OrdinalIgnoreCase))
- {
- Logger.Debug("Query requires post-filtering due to ItemSortBy.AiredEpisodeOrder");
- return true;
- }
- if (query.SortBy.Contains(ItemSortBy.GameSystem, StringComparer.OrdinalIgnoreCase))
- {
- Logger.Debug("Query requires post-filtering due to ItemSortBy.GameSystem");
- return true;
- }
- if (query.SortBy.Contains(ItemSortBy.Players, StringComparer.OrdinalIgnoreCase))
- {
- Logger.Debug("Query requires post-filtering due to ItemSortBy.Players");
- return true;
- }
- if (query.SortBy.Contains(ItemSortBy.VideoBitRate, StringComparer.OrdinalIgnoreCase))
- {
- Logger.Debug("Query requires post-filtering due to ItemSortBy.VideoBitRate");
- return true;
- }
- }
-
if (query.IsInBoxSet.HasValue)
{
Logger.Debug("Query requires post-filtering due to IsInBoxSet");
@@ -894,18 +883,6 @@ namespace MediaBrowser.Controller.Entities
return true;
}
- if (query.MinPlayers.HasValue)
- {
- Logger.Debug("Query requires post-filtering due to MinPlayers");
- return true;
- }
-
- if (query.MaxPlayers.HasValue)
- {
- Logger.Debug("Query requires post-filtering due to MaxPlayers");
- return true;
- }
-
if (UserViewBuilder.CollapseBoxSetItems(query, this, query.User, ConfigurationManager))
{
Logger.Debug("Query requires post-filtering due to CollapseBoxSetItems");
@@ -936,12 +913,6 @@ namespace MediaBrowser.Controller.Entities
return true;
}
- if (!string.IsNullOrWhiteSpace(query.AlbumArtistStartsWithOrGreater))
- {
- Logger.Debug("Query requires post-filtering due to AlbumArtistStartsWithOrGreater");
- return true;
- }
-
if (query.IsPlayed.HasValue)
{
if (query.IncludeItemTypes.Length == 1 && query.IncludeItemTypes.Contains(typeof(Series).Name))
@@ -954,7 +925,7 @@ namespace MediaBrowser.Controller.Entities
return false;
}
- public Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
+ public QueryResult<BaseItem> GetItems(InternalItemsQuery query)
{
if (query.ItemIds.Length > 0)
{
@@ -967,20 +938,20 @@ namespace MediaBrowser.Controller.Entities
// Try to preserve order
result.Items = result.Items.OrderBy(i => ids.IndexOf(i.Id.ToString("N"))).ToArray();
}
- return Task.FromResult(result);
+ return result;
}
return GetItemsInternal(query);
}
- protected virtual async Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query)
+ protected virtual QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query)
{
if (SourceType == SourceType.Channel)
{
try
{
// Don't blow up here because it could cause parent screens with other content to fail
- return await ChannelManager.GetChannelItemsInternal(new ChannelItemQuery
+ return ChannelManager.GetChannelItemsInternal(new ChannelItemQuery
{
ChannelId = ChannelId,
FolderId = Id.ToString("N"),
@@ -990,7 +961,7 @@ namespace MediaBrowser.Controller.Entities
SortBy = query.SortBy,
SortOrder = query.SortOrder
- }, new Progress<double>(), CancellationToken.None);
+ }, new Progress<double>(), CancellationToken.None).Result;
}
catch
{
@@ -1355,19 +1326,6 @@ namespace MediaBrowser.Controller.Entities
}
/// <summary>
- /// Folders need to validate and refresh
- /// </summary>
- /// <returns>Task.</returns>
- public override async Task ChangedExternally()
- {
- var progress = new Progress<double>();
-
- await ValidateChildren(progress, CancellationToken.None).ConfigureAwait(false);
-
- await base.ChangedExternally().ConfigureAwait(false);
- }
-
- /// <summary>
/// Marks the played.
/// </summary>
/// <param name="user">The user.</param>
@@ -1391,7 +1349,7 @@ namespace MediaBrowser.Controller.Entities
query.IsVirtualItem = false;
}
- var itemsResult = await GetItems(query).ConfigureAwait(false);
+ var itemsResult = GetItems(query);
// Sweep through recursively and update status
var tasks = itemsResult.Items.Select(c => c.MarkPlayed(user, datePlayed, resetPosition));
@@ -1406,14 +1364,14 @@ namespace MediaBrowser.Controller.Entities
/// <returns>Task.</returns>
public override async Task MarkUnplayed(User user)
{
- var itemsResult = await GetItems(new InternalItemsQuery
+ var itemsResult = GetItems(new InternalItemsQuery
{
User = user,
Recursive = true,
IsFolder = false,
EnableTotalRecordCount = false
- }).ConfigureAwait(false);
+ });
// Sweep through recursively and update status
var tasks = itemsResult.Items.Select(c => c.MarkUnplayed(user));
@@ -1430,7 +1388,7 @@ namespace MediaBrowser.Controller.Entities
IsVirtualItem = false,
EnableTotalRecordCount = false
- }).Result;
+ });
return itemsResult.Items
.All(i => i.IsPlayed(user));
@@ -1481,7 +1439,7 @@ namespace MediaBrowser.Controller.Entities
}
}
- public override async Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> itemFields)
+ public override void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields)
{
if (!SupportsUserDataFromChildren)
{
@@ -1490,7 +1448,7 @@ namespace MediaBrowser.Controller.Entities
if (itemDto != null)
{
- if (itemFields.Contains(ItemFields.RecursiveItemCount))
+ if (fields.Contains(ItemFields.RecursiveItemCount))
{
itemDto.RecursiveItemCount = GetRecursiveChildCount(user);
}
@@ -1498,16 +1456,20 @@ namespace MediaBrowser.Controller.Entities
if (SupportsPlayedStatus)
{
- var unplayedQueryResult = await GetItems(new InternalItemsQuery(user)
+ var unplayedQueryResult = GetItems(new InternalItemsQuery(user)
{
Recursive = true,
IsFolder = false,
IsVirtualItem = false,
EnableTotalRecordCount = true,
Limit = 0,
- IsPlayed = false
+ IsPlayed = false,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
- }).ConfigureAwait(false);
+ });
double unplayedCount = unplayedQueryResult.TotalRecordCount;
diff --git a/MediaBrowser.Controller/Entities/GameGenre.cs b/MediaBrowser.Controller/Entities/GameGenre.cs
index 093b191b6..836020d88 100644
--- a/MediaBrowser.Controller/Entities/GameGenre.cs
+++ b/MediaBrowser.Controller/Entities/GameGenre.cs
@@ -69,16 +69,6 @@ namespace MediaBrowser.Controller.Entities
return false;
}
- public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
- {
- return inputItems.Where(GetItemFilter());
- }
-
- public Func<BaseItem, bool> GetItemFilter()
- {
- return i => i is Game && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase);
- }
-
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{
query.GenreIds = new[] { Id.ToString("N") };
diff --git a/MediaBrowser.Controller/Entities/Genre.cs b/MediaBrowser.Controller/Entities/Genre.cs
index 6569a1e6c..4b70eae58 100644
--- a/MediaBrowser.Controller/Entities/Genre.cs
+++ b/MediaBrowser.Controller/Entities/Genre.cs
@@ -81,16 +81,6 @@ namespace MediaBrowser.Controller.Entities
}
}
- public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
- {
- return inputItems.Where(GetItemFilter());
- }
-
- public Func<BaseItem, bool> GetItemFilter()
- {
- return i => !(i is Game) && !(i is IHasMusicGenres) && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase);
- }
-
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{
query.GenreIds = new[] { Id.ToString("N") };
diff --git a/MediaBrowser.Controller/Entities/IHasImages.cs b/MediaBrowser.Controller/Entities/IHasImages.cs
index 2104bee09..e2b3c0777 100644
--- a/MediaBrowser.Controller/Entities/IHasImages.cs
+++ b/MediaBrowser.Controller/Entities/IHasImages.cs
@@ -3,7 +3,7 @@ using MediaBrowser.Model.Entities;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.IO;
diff --git a/MediaBrowser.Controller/Entities/IHasUserData.cs b/MediaBrowser.Controller/Entities/IHasUserData.cs
index 0b3b7dc8d..0029947ee 100644
--- a/MediaBrowser.Controller/Entities/IHasUserData.cs
+++ b/MediaBrowser.Controller/Entities/IHasUserData.cs
@@ -15,7 +15,7 @@ namespace MediaBrowser.Controller.Entities
/// <summary>
/// Fills the user data dto values.
/// </summary>
- Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields);
+ void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields);
bool EnableRememberingTrackSelections { get; }
diff --git a/MediaBrowser.Controller/Entities/IItemByName.cs b/MediaBrowser.Controller/Entities/IItemByName.cs
index b69c8bdfc..a02ca1c0c 100644
--- a/MediaBrowser.Controller/Entities/IItemByName.cs
+++ b/MediaBrowser.Controller/Entities/IItemByName.cs
@@ -7,13 +7,6 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public interface IItemByName : IHasMetadata
{
- /// <summary>
- /// Gets the tagged items.
- /// </summary>
- /// <param name="inputItems">The input items.</param>
- /// <returns>IEnumerable{BaseItem}.</returns>
- IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems);
-
IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query);
}
diff --git a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
index 3c948487d..743e7642e 100644
--- a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
+++ b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
@@ -126,9 +126,27 @@ namespace MediaBrowser.Controller.Entities
public bool? IsVirtualItem { get; set; }
public Guid? ParentId { get; set; }
+ public string ParentType { get; set; }
public string[] AncestorIds { get; set; }
public string[] TopParentIds { get; set; }
+ public BaseItem Parent
+ {
+ set
+ {
+ if (value == null)
+ {
+ ParentId = null;
+ ParentType = null;
+ }
+ else
+ {
+ ParentId = value.Id;
+ ParentType = value.GetType().Name;
+ }
+ }
+ }
+
public string[] PresetViews { get; set; }
public SourceType[] SourceTypes { get; set; }
public SourceType[] ExcludeSourceTypes { get; set; }
@@ -136,7 +154,6 @@ namespace MediaBrowser.Controller.Entities
public DayOfWeek[] AirDays { get; set; }
public SeriesStatus[] SeriesStatuses { get; set; }
- public string AlbumArtistStartsWithOrGreater { get; set; }
public string ExternalSeriesId { get; set; }
public string ExternalId { get; set; }
@@ -156,41 +173,11 @@ namespace MediaBrowser.Controller.Entities
public DateTime? MinDateCreated { get; set; }
public DateTime? MinDateLastSaved { get; set; }
+ public DateTime? MinDateLastSavedForUser { get; set; }
public DtoOptions DtoOptions { get; set; }
public int MinSimilarityScore { get; set; }
- public bool HasField(ItemFields name)
- {
- var fields = DtoOptions.Fields;
-
- switch (name)
- {
- case ItemFields.ThemeSongIds:
- case ItemFields.ThemeVideoIds:
- case ItemFields.ProductionLocations:
- case ItemFields.Keywords:
- case ItemFields.Taglines:
- case ItemFields.CustomRating:
- case ItemFields.DateCreated:
- case ItemFields.SortName:
- case ItemFields.Overview:
- case ItemFields.HomePageUrl:
- case ItemFields.VoteCount:
- case ItemFields.DisplayMediaType:
- //case ItemFields.ServiceName:
- case ItemFields.Genres:
- case ItemFields.Studios:
- case ItemFields.Settings:
- case ItemFields.OriginalTitle:
- case ItemFields.Tags:
- case ItemFields.DateLastMediaAdded:
- return fields.Count == 0 || fields.Contains(name);
- default:
- return true;
- }
- }
-
public InternalItemsQuery()
{
MinSimilarityScore = 20;
diff --git a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs
index 3f733ce03..efa85f3ae 100644
--- a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs
+++ b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs
@@ -152,7 +152,7 @@ namespace MediaBrowser.Controller.Entities.Movies
var currentOfficialRating = OfficialRating;
// Gather all possible ratings
- var ratings = GetRecursiveChildren(i => i is Movie || i is Series || i is MusicAlbum || i is Game)
+ var ratings = GetLinkedChildren()
.Select(i => i.OfficialRating)
.Where(i => !string.IsNullOrEmpty(i))
.Distinct(StringComparer.OrdinalIgnoreCase)
diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs
index c2a01f4ff..8a5b726e2 100644
--- a/MediaBrowser.Controller/Entities/Movies/Movie.cs
+++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs
@@ -6,7 +6,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Providers;
diff --git a/MediaBrowser.Controller/Entities/Person.cs b/MediaBrowser.Controller/Entities/Person.cs
index 005fb2014..20d9c7999 100644
--- a/MediaBrowser.Controller/Entities/Person.cs
+++ b/MediaBrowser.Controller/Entities/Person.cs
@@ -93,22 +93,6 @@ namespace MediaBrowser.Controller.Entities
}
}
- public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
- {
- var itemsWithPerson = LibraryManager.GetItemIds(new InternalItemsQuery
- {
- PersonIds = new[] { Id.ToString("N") }
- });
-
- return inputItems.Where(i => itemsWithPerson.Contains(i.Id));
- }
-
-
- public Func<BaseItem, bool> GetItemFilter()
- {
- return i => LibraryManager.GetPeople(i).Any(p => string.Equals(p.Name, Name, StringComparison.OrdinalIgnoreCase));
- }
-
[IgnoreDataMember]
public override bool SupportsPeople
{
diff --git a/MediaBrowser.Controller/Entities/Studio.cs b/MediaBrowser.Controller/Entities/Studio.cs
index 2e5e6ce43..8cb65c60a 100644
--- a/MediaBrowser.Controller/Entities/Studio.cs
+++ b/MediaBrowser.Controller/Entities/Studio.cs
@@ -88,16 +88,6 @@ namespace MediaBrowser.Controller.Entities
}
}
- public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
- {
- return inputItems.Where(GetItemFilter());
- }
-
- public Func<BaseItem, bool> GetItemFilter()
- {
- return i => i.Studios.Contains(Name, StringComparer.OrdinalIgnoreCase);
- }
-
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{
query.StudioIds = new[] { Id.ToString("N") };
diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs
index c2f7a6168..e963ab184 100644
--- a/MediaBrowser.Controller/Entities/TV/Episode.cs
+++ b/MediaBrowser.Controller/Entities/TV/Episode.cs
@@ -237,7 +237,7 @@ namespace MediaBrowser.Controller.Entities.TV
/// Creates the name of the sort.
/// </summary>
/// <returns>System.String.</returns>
- protected override string CreateSortName()
+ protected override string CreateSortNameInternal()
{
return (ParentIndexNumber != null ? ParentIndexNumber.Value.ToString("000 - ") : "")
+ (IndexNumber != null ? IndexNumber.Value.ToString("0000 - ") : "") + Name;
diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs
index ed04b5ddc..4ccf6d623 100644
--- a/MediaBrowser.Controller/Entities/TV/Season.cs
+++ b/MediaBrowser.Controller/Entities/TV/Season.cs
@@ -5,6 +5,7 @@ using MediaBrowser.Model.Users;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Serialization;
@@ -144,12 +145,12 @@ namespace MediaBrowser.Controller.Entities.TV
/// Creates the name of the sort.
/// </summary>
/// <returns>System.String.</returns>
- protected override string CreateSortName()
+ protected override string CreateSortNameInternal()
{
return IndexNumber != null ? IndexNumber.Value.ToString("0000") : Name;
}
- protected override Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query)
+ protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query)
{
if (query.User == null)
{
@@ -160,41 +161,39 @@ namespace MediaBrowser.Controller.Entities.TV
Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager);
- var items = GetEpisodes(user).Where(filter);
+ var items = GetEpisodes(user, query.DtoOptions).Where(filter);
var result = PostFilterAndSort(items, query, false, false);
- return Task.FromResult(result);
+ return result;
}
/// <summary>
/// Gets the episodes.
/// </summary>
- /// <param name="user">The user.</param>
- /// <returns>IEnumerable{Episode}.</returns>
- public IEnumerable<Episode> GetEpisodes(User user)
+ public IEnumerable<Episode> GetEpisodes(User user, DtoOptions options)
{
- return GetEpisodes(Series, user);
+ return GetEpisodes(Series, user, options);
}
- public IEnumerable<Episode> GetEpisodes(Series series, User user)
+ public IEnumerable<Episode> GetEpisodes(Series series, User user, DtoOptions options)
{
- return GetEpisodes(series, user, null);
+ return GetEpisodes(series, user, null, options);
}
- public IEnumerable<Episode> GetEpisodes(Series series, User user, IEnumerable<Episode> allSeriesEpisodes)
+ public IEnumerable<Episode> GetEpisodes(Series series, User user, IEnumerable<Episode> allSeriesEpisodes, DtoOptions options)
{
- return series.GetSeasonEpisodes(this, user, allSeriesEpisodes);
+ return series.GetSeasonEpisodes(this, user, allSeriesEpisodes, options);
}
public IEnumerable<Episode> GetEpisodes()
{
- return Series.GetSeasonEpisodes(this, null, null);
+ return Series.GetSeasonEpisodes(this, null, null, new DtoOptions(true));
}
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
{
- return GetEpisodes(user);
+ return GetEpisodes(user, new DtoOptions(true));
}
protected override bool GetBlockUnratedValue(UserPolicy config)
diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs
index 7641c9523..c54f93f11 100644
--- a/MediaBrowser.Controller/Entities/TV/Series.cs
+++ b/MediaBrowser.Controller/Entities/TV/Series.cs
@@ -8,6 +8,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
@@ -141,13 +142,12 @@ namespace MediaBrowser.Controller.Entities.TV
public override int GetChildCount(User user)
{
- var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
var seriesKey = GetUniqueSeriesKey(this);
var result = LibraryManager.GetCount(new InternalItemsQuery(user)
{
- AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
- SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
+ AncestorWithPresentationUniqueKey = null,
+ SeriesPresentationUniqueKey = seriesKey,
IncludeItemTypes = new[] { typeof(Season).Name },
IsVirtualItem = false,
Limit = 0,
@@ -166,13 +166,12 @@ namespace MediaBrowser.Controller.Entities.TV
public override int GetRecursiveChildCount(User user)
{
- var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
var seriesKey = GetUniqueSeriesKey(this);
var query = new InternalItemsQuery(user)
{
- AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
- SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
+ AncestorWithPresentationUniqueKey = null,
+ SeriesPresentationUniqueKey = seriesKey,
DtoOptions = new Dto.DtoOptions
{
Fields = new List<ItemFields>
@@ -250,12 +249,15 @@ namespace MediaBrowser.Controller.Entities.TV
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
{
- return GetSeasons(user);
+ return GetSeasons(user, new DtoOptions(true));
}
- public IEnumerable<Season> GetSeasons(User user)
+ public IEnumerable<Season> GetSeasons(User user, DtoOptions options)
{
- var query = new InternalItemsQuery(user);
+ var query = new InternalItemsQuery(user)
+ {
+ DtoOptions = options
+ };
SetSeasonQueryOptions(query, user);
@@ -266,11 +268,10 @@ namespace MediaBrowser.Controller.Entities.TV
{
var config = user.Configuration;
- var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
var seriesKey = GetUniqueSeriesKey(this);
- query.AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey;
- query.SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null;
+ query.AncestorWithPresentationUniqueKey = null;
+ query.SeriesPresentationUniqueKey = seriesKey;
query.IncludeItemTypes = new[] { typeof(Season).Name };
query.SortBy = new[] {ItemSortBy.SortName};
@@ -288,7 +289,7 @@ namespace MediaBrowser.Controller.Entities.TV
}
}
- protected override Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query)
+ protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query)
{
if (query.User == null)
{
@@ -299,11 +300,10 @@ namespace MediaBrowser.Controller.Entities.TV
if (query.Recursive)
{
- var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
var seriesKey = GetUniqueSeriesKey(this);
- query.AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey;
- query.SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null;
+ query.AncestorWithPresentationUniqueKey = null;
+ query.SeriesPresentationUniqueKey = seriesKey;
if (query.SortBy.Length == 0)
{
query.SortBy = new[] { ItemSortBy.SortName };
@@ -313,25 +313,25 @@ namespace MediaBrowser.Controller.Entities.TV
query.IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name };
}
query.IsVirtualItem = false;
- return Task.FromResult(LibraryManager.GetItemsResult(query));
+ return LibraryManager.GetItemsResult(query);
}
SetSeasonQueryOptions(query, user);
- return Task.FromResult(LibraryManager.GetItemsResult(query));
+ return LibraryManager.GetItemsResult(query);
}
- public IEnumerable<Episode> GetEpisodes(User user)
+ public IEnumerable<Episode> GetEpisodes(User user, DtoOptions options)
{
- var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
var seriesKey = GetUniqueSeriesKey(this);
var query = new InternalItemsQuery(user)
{
- AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
- SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
+ AncestorWithPresentationUniqueKey = null,
+ SeriesPresentationUniqueKey = seriesKey,
IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name },
- SortBy = new[] { ItemSortBy.SortName }
+ SortBy = new[] { ItemSortBy.SortName },
+ DtoOptions = options
};
var config = user.Configuration;
if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes)
@@ -352,7 +352,7 @@ namespace MediaBrowser.Controller.Entities.TV
var allSeriesEpisodes = allItems.OfType<Episode>().ToList();
var allEpisodes = allItems.OfType<Season>()
- .SelectMany(i => i.GetEpisodes(this, user, allSeriesEpisodes))
+ .SelectMany(i => i.GetEpisodes(this, user, allSeriesEpisodes, options))
.Reverse()
.ToList();
@@ -429,10 +429,8 @@ namespace MediaBrowser.Controller.Entities.TV
progress.Report(100);
}
- public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user)
+ public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user, DtoOptions options)
{
- var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
-
var queryFromSeries = ConfigurationManager.Configuration.DisplaySpecialsWithinSeasons;
// add optimization when this setting is not enabled
@@ -442,10 +440,11 @@ namespace MediaBrowser.Controller.Entities.TV
var query = new InternalItemsQuery(user)
{
- AncestorWithPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? null : seriesKey,
- SeriesPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? seriesKey : null,
+ AncestorWithPresentationUniqueKey = queryFromSeries ? null : seriesKey,
+ SeriesPresentationUniqueKey = queryFromSeries ? seriesKey : null,
IncludeItemTypes = new[] { typeof(Episode).Name },
- SortBy = new[] { ItemSortBy.SortName }
+ SortBy = new[] { ItemSortBy.SortName },
+ DtoOptions = options
};
if (user != null)
{
@@ -466,14 +465,14 @@ namespace MediaBrowser.Controller.Entities.TV
var allItems = LibraryManager.GetItemList(query).OfType<Episode>();
- return GetSeasonEpisodes(parentSeason, user, allItems);
+ return GetSeasonEpisodes(parentSeason, user, allItems, options);
}
- public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user, IEnumerable<Episode> allSeriesEpisodes)
+ public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user, IEnumerable<Episode> allSeriesEpisodes, DtoOptions options)
{
if (allSeriesEpisodes == null)
{
- return GetSeasonEpisodes(parentSeason, user);
+ return GetSeasonEpisodes(parentSeason, user, options);
}
var episodes = FilterEpisodesBySeason(allSeriesEpisodes, parentSeason, ConfigurationManager.Configuration.DisplaySpecialsWithinSeasons);
diff --git a/MediaBrowser.Controller/Entities/UserRootFolder.cs b/MediaBrowser.Controller/Entities/UserRootFolder.cs
index b602990ac..c93c81401 100644
--- a/MediaBrowser.Controller/Entities/UserRootFolder.cs
+++ b/MediaBrowser.Controller/Entities/UserRootFolder.cs
@@ -50,23 +50,23 @@ namespace MediaBrowser.Controller.Entities
}
}
- protected override async Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query)
+ protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query)
{
if (query.Recursive)
{
return QueryRecursive(query);
}
- var result = await UserViewManager.GetUserViews(new UserViewQuery
+ var result = UserViewManager.GetUserViews(new UserViewQuery
{
UserId = query.User.Id.ToString("N"),
PresetViews = query.PresetViews
- }, CancellationToken.None).ConfigureAwait(false);
+ }, CancellationToken.None).Result;
var user = query.User;
Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager);
-
+
return PostFilterAndSort(result.Where(filter), query, true, true);
}
diff --git a/MediaBrowser.Controller/Entities/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs
index 99601b290..27be696eb 100644
--- a/MediaBrowser.Controller/Entities/UserView.cs
+++ b/MediaBrowser.Controller/Entities/UserView.cs
@@ -7,6 +7,7 @@ using System.Collections.Generic;
using MediaBrowser.Model.Serialization;
using System.Threading.Tasks;
using System.Linq;
+using MediaBrowser.Controller.Dto;
namespace MediaBrowser.Controller.Entities
{
@@ -53,7 +54,7 @@ namespace MediaBrowser.Controller.Entities
return GetChildren(user, true).Count();
}
- protected override Task<QueryResult<BaseItem>> GetItemsInternal(InternalItemsQuery query)
+ protected override QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query)
{
var parent = this as Folder;
@@ -67,7 +68,7 @@ namespace MediaBrowser.Controller.Entities
}
return new UserViewBuilder(UserViewManager, LiveTvManager, ChannelManager, LibraryManager, Logger, UserDataManager, TVSeriesManager, ConfigurationManager, PlaylistManager)
- .GetUserItems(parent, this, ViewType, query);
+ .GetUserItems(parent, this, ViewType, query).Result;
}
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
@@ -75,9 +76,10 @@ namespace MediaBrowser.Controller.Entities
var result = GetItems(new InternalItemsQuery
{
User = user,
- EnableTotalRecordCount = false
+ EnableTotalRecordCount = false,
+ DtoOptions = new DtoOptions(true)
- }).Result;
+ });
return result.Items;
}
@@ -100,9 +102,11 @@ namespace MediaBrowser.Controller.Entities
Recursive = true,
EnableTotalRecordCount = false,
- ForceDirect = true
+ ForceDirect = true,
+
+ DtoOptions = query.DtoOptions
- }).Result;
+ });
return result.Items.Where(i => UserViewBuilder.FilterItem(i, query));
}
diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs
index 8da069f62..91e24caeb 100644
--- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs
+++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs
@@ -17,6 +17,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Extensions;
namespace MediaBrowser.Controller.Entities
@@ -83,7 +84,7 @@ namespace MediaBrowser.Controller.Entities
Limit = query.Limit,
StartIndex = query.StartIndex
- }, CancellationToken.None).ConfigureAwait(false);
+ }, new DtoOptions(), CancellationToken.None).ConfigureAwait(false);
return GetResult(result);
}
@@ -110,7 +111,7 @@ namespace MediaBrowser.Controller.Entities
Limit = query.Limit,
StartIndex = query.StartIndex
- }, CancellationToken.None).ConfigureAwait(false);
+ }, new DtoOptions(), CancellationToken.None).ConfigureAwait(false);
return GetResult(result);
}
@@ -129,7 +130,7 @@ namespace MediaBrowser.Controller.Entities
if (query.Recursive)
{
query.Recursive = true;
- query.ParentId = queryParent.Id;
+ query.Parent = queryParent;
query.SetUser(user);
return _libraryManager.GetItemsResult(query);
@@ -141,7 +142,7 @@ namespace MediaBrowser.Controller.Entities
return GetResult(user.RootFolder.GetChildren(user, true), queryParent, query);
case CollectionType.Playlists:
- return await GetPlaylistsView(queryParent, user, query).ConfigureAwait(false);
+ return GetPlaylistsView(queryParent, user, query);
case CollectionType.BoxSets:
return GetBoxsetView(queryParent, user, query);
@@ -180,7 +181,7 @@ namespace MediaBrowser.Controller.Entities
return await GetMovieGenres(queryParent, user, query).ConfigureAwait(false);
case SpecialFolder.MovieGenre:
- return await GetMovieGenreItems(queryParent, displayParent, user, query).ConfigureAwait(false);
+ return GetMovieGenreItems(queryParent, displayParent, user, query);
case SpecialFolder.MovieResume:
return GetMovieResume(queryParent, user, query);
@@ -354,7 +355,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetMusicPlaylists(Folder parent, User user, InternalItemsQuery query)
{
- query.ParentId = null;
+ query.Parent = null;
query.IncludeItemTypes = new[] { typeof(Playlist).Name };
query.SetUser(user);
query.Recursive = true;
@@ -365,7 +366,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetMusicAlbums(Folder parent, User user, InternalItemsQuery query)
{
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.IncludeItemTypes = new[] { typeof(MusicAlbum).Name };
@@ -376,7 +377,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetMusicSongs(Folder parent, User user, InternalItemsQuery query)
{
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.IncludeItemTypes = new[] { typeof(Audio.Audio).Name };
@@ -394,7 +395,7 @@ namespace MediaBrowser.Controller.Entities
ParentId = parent == null ? null : parent.Id.ToString("N"),
GroupItems = true
- }).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i != null);
+ }, query.DtoOptions).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i != null);
query.SortBy = new string[] { };
@@ -404,7 +405,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetFavoriteSongs(Folder parent, User user, InternalItemsQuery query)
{
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.IsFavorite = true;
query.IncludeItemTypes = new[] { typeof(Audio.Audio).Name };
@@ -415,7 +416,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetFavoriteAlbums(Folder parent, User user, InternalItemsQuery query)
{
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.IsFavorite = true;
query.IncludeItemTypes = new[] { typeof(MusicAlbum).Name };
@@ -423,13 +424,6 @@ namespace MediaBrowser.Controller.Entities
return _libraryManager.GetItemsResult(query);
}
- private async Task<QueryResult<BaseItem>> FindPlaylists(Folder parent, User user, InternalItemsQuery query)
- {
- var list = _playlistManager.GetPlaylists(user.Id.ToString("N"));
-
- return GetResult(list, parent, query);
- }
-
private int GetSpecialItemsLimit()
{
return 50;
@@ -465,7 +459,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetFavoriteMovies(Folder parent, User user, InternalItemsQuery query)
{
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.IsFavorite = true;
query.IncludeItemTypes = new[] { typeof(Movie).Name };
@@ -476,7 +470,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetFavoriteSeries(Folder parent, User user, InternalItemsQuery query)
{
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.IsFavorite = true;
query.IncludeItemTypes = new[] { typeof(Series).Name };
@@ -487,7 +481,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetFavoriteEpisodes(Folder parent, User user, InternalItemsQuery query)
{
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.IsFavorite = true;
query.IncludeItemTypes = new[] { typeof(Episode).Name };
@@ -498,7 +492,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetMovieMovies(Folder parent, User user, InternalItemsQuery query)
{
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.IncludeItemTypes = new[] { typeof(Movie).Name };
@@ -517,7 +511,7 @@ namespace MediaBrowser.Controller.Entities
query.SortOrder = SortOrder.Descending;
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.Limit = GetSpecialItemsLimit();
query.IncludeItemTypes = new[] { typeof(Movie).Name };
@@ -531,7 +525,7 @@ namespace MediaBrowser.Controller.Entities
query.SortOrder = SortOrder.Descending;
query.IsResumable = true;
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.Limit = GetSpecialItemsLimit();
query.IncludeItemTypes = new[] { typeof(Movie).Name };
@@ -582,10 +576,10 @@ namespace MediaBrowser.Controller.Entities
return GetResult(genres, parent, query);
}
- private async Task<QueryResult<BaseItem>> GetMovieGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query)
+ private QueryResult<BaseItem> GetMovieGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query)
{
query.Recursive = true;
- query.ParentId = queryParent.Id;
+ query.Parent = queryParent;
query.GenreIds = new[] { displayParent.Id.ToString("N") };
query.SetUser(user);
@@ -594,14 +588,14 @@ namespace MediaBrowser.Controller.Entities
return _libraryManager.GetItemsResult(query);
}
- private async Task<QueryResult<BaseItem>> GetPlaylistsView(Folder parent, User user, InternalItemsQuery query)
+ private QueryResult<BaseItem> GetPlaylistsView(Folder parent, User user, InternalItemsQuery query)
{
return GetResult(_playlistManager.GetPlaylists(user.Id.ToString("N")), parent, query);
}
private QueryResult<BaseItem> GetBoxsetView(Folder parent, User user, InternalItemsQuery query)
{
- query.ParentId = null;
+ query.Parent = null;
query.IncludeItemTypes = new[] { typeof(BoxSet).Name };
query.SetUser(user);
query.Recursive = true;
@@ -643,7 +637,7 @@ namespace MediaBrowser.Controller.Entities
query.SortOrder = SortOrder.Descending;
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.Limit = GetSpecialItemsLimit();
query.IncludeItemTypes = new[] { typeof(Episode).Name };
@@ -662,7 +656,7 @@ namespace MediaBrowser.Controller.Entities
StartIndex = query.StartIndex,
UserId = query.User.Id.ToString("N")
- }, parentFolders);
+ }, parentFolders, query.DtoOptions);
return result;
}
@@ -673,7 +667,7 @@ namespace MediaBrowser.Controller.Entities
query.SortOrder = SortOrder.Descending;
query.IsResumable = true;
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.Limit = GetSpecialItemsLimit();
query.IncludeItemTypes = new[] { typeof(Episode).Name };
@@ -684,7 +678,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetTvSeries(Folder parent, User user, InternalItemsQuery query)
{
query.Recursive = true;
- query.ParentId = parent.Id;
+ query.Parent = parent;
query.SetUser(user);
query.IncludeItemTypes = new[] { typeof(Series).Name };
@@ -728,7 +722,7 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetTvGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query)
{
query.Recursive = true;
- query.ParentId = queryParent.Id;
+ query.Parent = queryParent;
query.GenreIds = new[] { displayParent.Id.ToString("N") };
query.SetUser(user);
@@ -1713,17 +1707,6 @@ namespace MediaBrowser.Controller.Entities
}
}
- if (!string.IsNullOrEmpty(query.AlbumArtistStartsWithOrGreater))
- {
- var ok = new[] { item }.OfType<IHasAlbumArtist>()
- .Any(p => string.Compare(query.AlbumArtistStartsWithOrGreater, p.AlbumArtists.FirstOrDefault(), StringComparison.CurrentCultureIgnoreCase) < 1);
-
- if (!ok)
- {
- return false;
- }
- }
-
return true;
}
@@ -1783,7 +1766,7 @@ namespace MediaBrowser.Controller.Entities
Status = RecordingStatus.Completed,
UserId = user.Id.ToString("N")
- }, CancellationToken.None).ConfigureAwait(false);
+ }, new DtoOptions(), CancellationToken.None).ConfigureAwait(false);
}
var list = new List<BaseItem>();
diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs
index 90aa3690a..fb31d9a47 100644
--- a/MediaBrowser.Controller/Entities/Video.cs
+++ b/MediaBrowser.Controller/Entities/Video.cs
@@ -11,7 +11,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
@@ -282,12 +282,10 @@ namespace MediaBrowser.Controller.Entities
public IEnumerable<Video> GetLinkedAlternateVersions()
{
- var linkedVersions = LinkedAlternateVersions
+ return LinkedAlternateVersions
.Select(GetLinkedChild)
.Where(i => i != null)
- .OfType<Video>();
-
- return linkedVersions
+ .OfType<Video>()
.OrderBy(i => i.SortName);
}
@@ -554,7 +552,7 @@ namespace MediaBrowser.Controller.Entities
if (SourceType == SourceType.Channel)
{
var sources = ChannelManager.GetStaticMediaSources(this, CancellationToken.None)
- .Result.ToList();
+ .ToList();
if (sources.Count > 0)
{
@@ -630,21 +628,24 @@ namespace MediaBrowser.Controller.Entities
{
info.Path = media.ShortcutPath;
- if (info.Path.StartsWith("Http", StringComparison.OrdinalIgnoreCase))
- {
- info.Protocol = MediaProtocol.Http;
- }
- else if (info.Path.StartsWith("Rtmp", StringComparison.OrdinalIgnoreCase))
- {
- info.Protocol = MediaProtocol.Rtmp;
- }
- else if (info.Path.StartsWith("Rtsp", StringComparison.OrdinalIgnoreCase))
- {
- info.Protocol = MediaProtocol.Rtsp;
- }
- else
+ if (!string.IsNullOrWhiteSpace(info.Path))
{
- info.Protocol = MediaProtocol.File;
+ if (info.Path.StartsWith("Http", StringComparison.OrdinalIgnoreCase))
+ {
+ info.Protocol = MediaProtocol.Http;
+ }
+ else if (info.Path.StartsWith("Rtmp", StringComparison.OrdinalIgnoreCase))
+ {
+ info.Protocol = MediaProtocol.Rtmp;
+ }
+ else if (info.Path.StartsWith("Rtsp", StringComparison.OrdinalIgnoreCase))
+ {
+ info.Protocol = MediaProtocol.Rtsp;
+ }
+ else
+ {
+ info.Protocol = MediaProtocol.File;
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/Year.cs b/MediaBrowser.Controller/Entities/Year.cs
index b352950a0..61b1a3b1a 100644
--- a/MediaBrowser.Controller/Entities/Year.cs
+++ b/MediaBrowser.Controller/Entities/Year.cs
@@ -65,20 +65,6 @@ namespace MediaBrowser.Controller.Entities
return true;
}
- public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
- {
- int year;
-
- var usCulture = new CultureInfo("en-US");
-
- if (!int.TryParse(Name, NumberStyles.Integer, usCulture, out year))
- {
- return inputItems;
- }
-
- return inputItems.Where(i => i.ProductionYear.HasValue && i.ProductionYear.Value == year);
- }
-
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{
int year;
@@ -107,12 +93,6 @@ namespace MediaBrowser.Controller.Entities
return null;
}
- public Func<BaseItem, bool> GetItemFilter()
- {
- var val = GetYearValue();
- return i => i.ProductionYear.HasValue && val.HasValue && i.ProductionYear.Value == val.Value;
- }
-
[IgnoreDataMember]
public override bool SupportsPeople
{
diff --git a/MediaBrowser.Controller/IO/FileData.cs b/MediaBrowser.Controller/IO/FileData.cs
index d40829d44..97b778d0c 100644
--- a/MediaBrowser.Controller/IO/FileData.cs
+++ b/MediaBrowser.Controller/IO/FileData.cs
@@ -3,7 +3,7 @@ using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Model.IO;
namespace MediaBrowser.Controller.IO
diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs
index dd2379940..3f6b5a806 100644
--- a/MediaBrowser.Controller/Library/ILibraryManager.cs
+++ b/MediaBrowser.Controller/Library/ILibraryManager.cs
@@ -10,8 +10,9 @@ using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Dto;
@@ -68,18 +69,7 @@ namespace MediaBrowser.Controller.Library
/// <param name="name">The name.</param>
/// <returns>Task{Artist}.</returns>
MusicArtist GetArtist(string name);
- /// <summary>
- /// Gets the album artists.
- /// </summary>
- /// <param name="items">The items.</param>
- /// <returns>IEnumerable&lt;MusicArtist&gt;.</returns>
- IEnumerable<MusicArtist> GetAlbumArtists(IEnumerable<IHasAlbumArtist> items);
- /// <summary>
- /// Gets the artists.
- /// </summary>
- /// <param name="items">The items.</param>
- /// <returns>IEnumerable&lt;MusicArtist&gt;.</returns>
- IEnumerable<MusicArtist> GetArtists(IEnumerable<IHasArtist> items);
+ MusicArtist GetArtist(string name, DtoOptions options);
/// <summary>
/// Gets a Studio
/// </summary>
@@ -557,6 +547,14 @@ namespace MediaBrowser.Controller.Library
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
bool IgnoreFile(FileSystemMetadata file, BaseItem parent);
+ Guid GetStudioId(string name);
+
+ Guid GetGenreId(string name);
+
+ Guid GetMusicGenreId(string name);
+
+ Guid GetGameGenreId(string name);
+
void AddVirtualFolder(string name, string collectionType, LibraryOptions options, bool refreshLibrary);
void RemoveVirtualFolder(string name, bool refreshLibrary);
void AddMediaPath(string virtualFolderName, MediaPathInfo path);
diff --git a/MediaBrowser.Controller/Library/IMusicManager.cs b/MediaBrowser.Controller/Library/IMusicManager.cs
index 9baf8b6f1..95ba671b4 100644
--- a/MediaBrowser.Controller/Library/IMusicManager.cs
+++ b/MediaBrowser.Controller/Library/IMusicManager.cs
@@ -1,6 +1,7 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using System.Collections.Generic;
+using MediaBrowser.Controller.Dto;
namespace MediaBrowser.Controller.Library
{
@@ -9,23 +10,16 @@ namespace MediaBrowser.Controller.Library
/// <summary>
/// Gets the instant mix from song.
/// </summary>
- /// <param name="item">The item.</param>
- /// <param name="user">The user.</param>
- /// <returns>IEnumerable{Audio}.</returns>
- IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user);
+ IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user, DtoOptions dtoOptions);
+
/// <summary>
/// Gets the instant mix from artist.
/// </summary>
- /// <param name="artist">The artist.</param>
- /// <param name="user">The user.</param>
- /// <returns>IEnumerable{Audio}.</returns>
- IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist artist, User user);
+ IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist artist, User user, DtoOptions dtoOptions);
+
/// <summary>
/// Gets the instant mix from genre.
/// </summary>
- /// <param name="genres">The genres.</param>
- /// <param name="user">The user.</param>
- /// <returns>IEnumerable{Audio}.</returns>
- IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user);
+ IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user, DtoOptions dtoOptions);
}
}
diff --git a/MediaBrowser.Controller/Library/IUserDataManager.cs b/MediaBrowser.Controller/Library/IUserDataManager.cs
index 5940c7e29..e9954545e 100644
--- a/MediaBrowser.Controller/Library/IUserDataManager.cs
+++ b/MediaBrowser.Controller/Library/IUserDataManager.cs
@@ -38,9 +38,9 @@ namespace MediaBrowser.Controller.Library
/// <summary>
/// Gets the user data dto.
/// </summary>
- Task<UserItemDataDto> GetUserDataDto(IHasUserData item, User user);
+ UserItemDataDto GetUserDataDto(IHasUserData item, User user);
- Task<UserItemDataDto> GetUserDataDto(IHasUserData item, BaseItemDto itemDto, User user, List<ItemFields> fields);
+ UserItemDataDto GetUserDataDto(IHasUserData item, BaseItemDto itemDto, User user, List<ItemFields> fields);
/// <summary>
/// Get all user data for the given user
diff --git a/MediaBrowser.Controller/Library/IUserViewManager.cs b/MediaBrowser.Controller/Library/IUserViewManager.cs
index 5391d113e..b46ece49d 100644
--- a/MediaBrowser.Controller/Library/IUserViewManager.cs
+++ b/MediaBrowser.Controller/Library/IUserViewManager.cs
@@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Controller.Dto;
namespace MediaBrowser.Controller.Library
{
@@ -16,6 +17,6 @@ namespace MediaBrowser.Controller.Library
Task<UserView> GetUserSubView(string category, string type, string sortName, CancellationToken cancellationToken);
- List<Tuple<BaseItem, List<BaseItem>>> GetLatestItems(LatestItemsQuery request);
+ List<Tuple<BaseItem, List<BaseItem>>> GetLatestItems(LatestItemsQuery request, DtoOptions options);
}
}
diff --git a/MediaBrowser.Controller/Library/ItemResolveArgs.cs b/MediaBrowser.Controller/Library/ItemResolveArgs.cs
index 3aa4d4ee2..3ddda81cd 100644
--- a/MediaBrowser.Controller/Library/ItemResolveArgs.cs
+++ b/MediaBrowser.Controller/Library/ItemResolveArgs.cs
@@ -4,7 +4,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Configuration;
diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
index 7e1dab462..288b30278 100644
--- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
+++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
@@ -284,19 +284,12 @@ namespace MediaBrowser.Controller.LiveTv
/// <summary>
/// Gets the internal channels.
/// </summary>
- /// <param name="query">The query.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task&lt;QueryResult&lt;LiveTvChannel&gt;&gt;.</returns>
- Task<QueryResult<LiveTvChannel>> GetInternalChannels(LiveTvChannelQuery query,
- CancellationToken cancellationToken);
+ Task<QueryResult<LiveTvChannel>> GetInternalChannels(LiveTvChannelQuery query, DtoOptions dtoOptions, CancellationToken cancellationToken);
/// <summary>
/// Gets the internal recordings.
/// </summary>
- /// <param name="query">The query.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task&lt;QueryResult&lt;BaseItem&gt;&gt;.</returns>
- Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, CancellationToken cancellationToken);
+ Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, DtoOptions options, CancellationToken cancellationToken);
/// <summary>
/// Gets the recording media sources.
diff --git a/MediaBrowser.Controller/LiveTv/LiveStream.cs b/MediaBrowser.Controller/LiveTv/LiveStream.cs
index 0908c3ecc..912fed23c 100644
--- a/MediaBrowser.Controller/LiveTv/LiveStream.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveStream.cs
@@ -1,8 +1,11 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.System;
namespace MediaBrowser.Controller.LiveTv
{
@@ -10,7 +13,8 @@ namespace MediaBrowser.Controller.LiveTv
{
public MediaSourceInfo OriginalMediaSource { get; set; }
public MediaSourceInfo OpenedMediaSource { get; set; }
- public int ConsumerCount {
+ public int ConsumerCount
+ {
get { return SharedStreamIds.Count; }
}
public ITunerHost TunerHost { get; set; }
@@ -18,11 +22,16 @@ namespace MediaBrowser.Controller.LiveTv
public bool EnableStreamSharing { get; set; }
public string UniqueId = Guid.NewGuid().ToString("N");
- public List<string> SharedStreamIds = new List<string>();
+ public List<string> SharedStreamIds = new List<string>();
+ protected readonly IEnvironmentInfo Environment;
+ protected readonly IFileSystem FileSystem;
+ const int StreamCopyToBufferSize = 81920;
- public LiveStream(MediaSourceInfo mediaSource)
+ public LiveStream(MediaSourceInfo mediaSource, IEnvironmentInfo environment, IFileSystem fileSystem)
{
OriginalMediaSource = mediaSource;
+ Environment = environment;
+ FileSystem = fileSystem;
OpenedMediaSource = mediaSource;
EnableStreamSharing = true;
}
@@ -41,5 +50,40 @@ namespace MediaBrowser.Controller.LiveTv
{
return Task.FromResult(true);
}
+
+ protected Stream GetInputStream(string path, long startPosition, bool allowAsyncFileRead)
+ {
+ var fileOpenOptions = startPosition > 0
+ ? FileOpenOptions.RandomAccess
+ : FileOpenOptions.SequentialScan;
+
+ if (allowAsyncFileRead)
+ {
+ fileOpenOptions |= FileOpenOptions.Asynchronous;
+ }
+
+ return FileSystem.GetFileStream(path, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.ReadWrite, fileOpenOptions);
+ }
+
+ protected async Task DeleteTempFile(string path, int retryCount = 0)
+ {
+ try
+ {
+ FileSystem.DeleteFile(path);
+ return;
+ }
+ catch
+ {
+
+ }
+
+ if (retryCount > 20)
+ {
+ return;
+ }
+
+ await Task.Delay(500).ConfigureAwait(false);
+ await DeleteTempFile(path, retryCount + 1).ConfigureAwait(false);
+ }
}
}
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs b/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
index 6e2fe2495..34a9103f8 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
@@ -89,7 +89,7 @@ namespace MediaBrowser.Controller.LiveTv
}
}
- protected override string CreateSortName()
+ protected override string CreateSortNameInternal()
{
if (!string.IsNullOrEmpty(Number))
{
@@ -101,7 +101,7 @@ namespace MediaBrowser.Controller.LiveTv
}
}
- return Number + "-" + (Name ?? string.Empty);
+ return (Number ?? string.Empty) + "-" + (Name ?? string.Empty);
}
[IgnoreDataMember]
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index b3a29bafa..d8b81027c 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -36,14 +36,6 @@
<PropertyGroup>
<RunPostBuildEvent>Always</RunPostBuildEvent>
</PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release Mono|AnyCPU' ">
- <DebugType>none</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release Mono\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
<ItemGroup>
<None Include="project.json" />
<!-- A reference to the entire .NET Framework is automatically included -->
diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
index 29d37f99b..54a361ff7 100644
--- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
+++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
@@ -968,7 +968,7 @@ namespace MediaBrowser.Controller.MediaEncoding
{
if (bitrate.HasValue && videoStream.BitRate.HasValue)
{
- bitrate = Math.Min(bitrate.Value, videoStream.BitRate.Value);
+ bitrate = GetMinBitrate(bitrate.Value, videoStream.BitRate.Value);
}
}
}
@@ -981,13 +981,29 @@ namespace MediaBrowser.Controller.MediaEncoding
// If a max bitrate was requested, don't let the scaled bitrate exceed it
if (request.VideoBitRate.HasValue)
{
- bitrate = Math.Min(bitrate.Value, request.VideoBitRate.Value);
+ bitrate = GetMinBitrate(bitrate.Value, request.VideoBitRate.Value);
}
}
return bitrate;
}
+ private int GetMinBitrate(int sourceBitrate, int requestedBitrate)
+ {
+ if (sourceBitrate <= 2000000)
+ {
+ sourceBitrate *= 2;
+ }
+ else if (sourceBitrate <= 3000000)
+ {
+ sourceBitrate = Convert.ToInt32(sourceBitrate * 1.5);
+ }
+
+ var bitrate = Math.Min(sourceBitrate, requestedBitrate);
+
+ return bitrate;
+ }
+
public int? GetAudioBitrateParam(BaseEncodingJobOptions request, MediaStream audioStream)
{
if (request.AudioBitRate.HasValue)
diff --git a/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs b/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs
index bac9807a9..10d7b9a7e 100644
--- a/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs
+++ b/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs
@@ -124,7 +124,7 @@ namespace MediaBrowser.Controller.MediaEncoding
Task Init();
- Task UpdateEncoderPath(string path, string pathType);
+ void UpdateEncoderPath(string path, string pathType);
bool SupportsEncoder(string encoder);
void SetLogFilename(string name);
diff --git a/MediaBrowser.Controller/MediaEncoding/MediaEncoderHelpers.cs b/MediaBrowser.Controller/MediaEncoding/MediaEncoderHelpers.cs
index 0b1ca08e5..d5c85197f 100644
--- a/MediaBrowser.Controller/MediaEncoding/MediaEncoderHelpers.cs
+++ b/MediaBrowser.Controller/MediaEncoding/MediaEncoderHelpers.cs
@@ -4,7 +4,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.IO;
namespace MediaBrowser.Controller.MediaEncoding
diff --git a/MediaBrowser.Controller/Net/IHttpResultFactory.cs b/MediaBrowser.Controller/Net/IHttpResultFactory.cs
index 9f295c71d..b88524691 100644
--- a/MediaBrowser.Controller/Net/IHttpResultFactory.cs
+++ b/MediaBrowser.Controller/Net/IHttpResultFactory.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Services;
@@ -22,6 +22,8 @@ namespace MediaBrowser.Controller.Net
/// <returns>System.Object.</returns>
object GetResult(object content, string contentType, IDictionary<string,string> responseHeaders = null);
+ object GetRedirectResult(string url);
+
/// <summary>
/// Gets the optimized result.
/// </summary>
diff --git a/MediaBrowser.Controller/Net/StaticResultOptions.cs b/MediaBrowser.Controller/Net/StaticResultOptions.cs
index 62c13fbb5..3064cbf10 100644
--- a/MediaBrowser.Controller/Net/StaticResultOptions.cs
+++ b/MediaBrowser.Controller/Net/StaticResultOptions.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Model.IO;
namespace MediaBrowser.Controller.Net
diff --git a/MediaBrowser.Controller/Playlists/Playlist.cs b/MediaBrowser.Controller/Playlists/Playlist.cs
index fb1410f4a..790e8e824 100644
--- a/MediaBrowser.Controller/Playlists/Playlist.cs
+++ b/MediaBrowser.Controller/Playlists/Playlist.cs
@@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.Linq;
using MediaBrowser.Model.Serialization;
using System.Threading.Tasks;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Providers;
namespace MediaBrowser.Controller.Playlists
@@ -81,7 +82,7 @@ namespace MediaBrowser.Controller.Playlists
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
{
- return GetPlayableItems(user).Result;
+ return GetPlayableItems(user, new DtoOptions(true));
}
protected override IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService)
@@ -91,7 +92,7 @@ namespace MediaBrowser.Controller.Playlists
public override IEnumerable<BaseItem> GetRecursiveChildren(User user, InternalItemsQuery query)
{
- var items = GetPlayableItems(user).Result;
+ var items = GetPlayableItems(user, query.DtoOptions);
if (query != null)
{
@@ -106,12 +107,12 @@ namespace MediaBrowser.Controller.Playlists
return GetLinkedChildrenInfos();
}
- private Task<IEnumerable<BaseItem>> GetPlayableItems(User user)
+ private IEnumerable<BaseItem> GetPlayableItems(User user, DtoOptions options)
{
- return GetPlaylistItems(MediaType, base.GetChildren(user, true), user);
+ return GetPlaylistItems(MediaType, base.GetChildren(user, true), user, options);
}
- public static async Task<IEnumerable<BaseItem>> GetPlaylistItems(string playlistMediaType, IEnumerable<BaseItem> inputItems, User user)
+ public static IEnumerable<BaseItem> GetPlaylistItems(string playlistMediaType, IEnumerable<BaseItem> inputItems, User user, DtoOptions options)
{
if (user != null)
{
@@ -122,14 +123,14 @@ namespace MediaBrowser.Controller.Playlists
foreach (var item in inputItems)
{
- var playlistItems = await GetPlaylistItems(item, user, playlistMediaType).ConfigureAwait(false);
+ var playlistItems = GetPlaylistItems(item, user, playlistMediaType, options);
list.AddRange(playlistItems);
}
return list;
}
- private static async Task<IEnumerable<BaseItem>> GetPlaylistItems(BaseItem item, User user, string mediaType)
+ private static IEnumerable<BaseItem> GetPlaylistItems(BaseItem item, User user, string mediaType, DtoOptions options)
{
var musicGenre = item as MusicGenre;
if (musicGenre != null)
@@ -140,7 +141,8 @@ namespace MediaBrowser.Controller.Playlists
IncludeItemTypes = new[] { typeof(Audio).Name },
GenreIds = new[] { musicGenre.Id.ToString("N") },
SortBy = new[] { ItemSortBy.AlbumArtist, ItemSortBy.Album, ItemSortBy.SortName },
- SortOrder = SortOrder.Ascending
+ SortOrder = SortOrder.Ascending,
+ DtoOptions = options
});
}
@@ -153,7 +155,8 @@ namespace MediaBrowser.Controller.Playlists
IncludeItemTypes = new[] { typeof(Audio).Name },
ArtistIds = new[] { musicArtist.Id.ToString("N") },
SortBy = new[] { ItemSortBy.AlbumArtist, ItemSortBy.Album, ItemSortBy.SortName },
- SortOrder = SortOrder.Ascending
+ SortOrder = SortOrder.Ascending,
+ DtoOptions = options
});
}
@@ -166,10 +169,11 @@ namespace MediaBrowser.Controller.Playlists
IsFolder = false,
SortBy = new[] { ItemSortBy.SortName },
MediaTypes = new[] { mediaType },
- EnableTotalRecordCount = false
+ EnableTotalRecordCount = false,
+ DtoOptions = options
};
- var itemsResult = await folder.GetItems(query).ConfigureAwait(false);
+ var itemsResult = folder.GetItems(query);
var items = itemsResult.Items;
return items;
diff --git a/MediaBrowser.Controller/Providers/DirectoryService.cs b/MediaBrowser.Controller/Providers/DirectoryService.cs
index 62db007b9..3d1af2afa 100644
--- a/MediaBrowser.Controller/Providers/DirectoryService.cs
+++ b/MediaBrowser.Controller/Providers/DirectoryService.cs
@@ -4,7 +4,7 @@ using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
diff --git a/MediaBrowser.Controller/Providers/IDirectoryService.cs b/MediaBrowser.Controller/Providers/IDirectoryService.cs
index f78d9cd6a..1b203f32c 100644
--- a/MediaBrowser.Controller/Providers/IDirectoryService.cs
+++ b/MediaBrowser.Controller/Providers/IDirectoryService.cs
@@ -1,5 +1,5 @@
using System.Collections.Generic;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
diff --git a/MediaBrowser.Controller/Providers/LocalImageInfo.cs b/MediaBrowser.Controller/Providers/LocalImageInfo.cs
index 63651fce8..5e6efe9f6 100644
--- a/MediaBrowser.Controller/Providers/LocalImageInfo.cs
+++ b/MediaBrowser.Controller/Providers/LocalImageInfo.cs
@@ -1,4 +1,4 @@
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.IO;
diff --git a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs
index 7d9dab92b..86cef628e 100644
--- a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs
+++ b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs
@@ -1,5 +1,5 @@
using System.Linq;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
@@ -15,6 +15,7 @@ namespace MediaBrowser.Controller.Providers
public bool ReplaceAllMetadata { get; set; }
public bool IsPostRecursiveRefresh { get; set; }
+ public bool ValidateChildren { get; set; }
public MetadataRefreshMode MetadataRefreshMode { get; set; }
public RemoteSearchResult SearchResult { get; set; }
diff --git a/MediaBrowser.Controller/Resolvers/IItemResolver.cs b/MediaBrowser.Controller/Resolvers/IItemResolver.cs
index fcb162b9e..3af5d5f7f 100644
--- a/MediaBrowser.Controller/Resolvers/IItemResolver.cs
+++ b/MediaBrowser.Controller/Resolvers/IItemResolver.cs
@@ -2,7 +2,7 @@
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using System.Collections.Generic;
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
diff --git a/MediaBrowser.Controller/Resolvers/IResolverIgnoreRule.cs b/MediaBrowser.Controller/Resolvers/IResolverIgnoreRule.cs
index 06372395e..25537193a 100644
--- a/MediaBrowser.Controller/Resolvers/IResolverIgnoreRule.cs
+++ b/MediaBrowser.Controller/Resolvers/IResolverIgnoreRule.cs
@@ -1,4 +1,4 @@
-using MediaBrowser.Common.IO;
+
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
diff --git a/MediaBrowser.Controller/TV/ITVSeriesManager.cs b/MediaBrowser.Controller/TV/ITVSeriesManager.cs
index 771fa602a..0bcb9ae5b 100644
--- a/MediaBrowser.Controller/TV/ITVSeriesManager.cs
+++ b/MediaBrowser.Controller/TV/ITVSeriesManager.cs
@@ -1,6 +1,7 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Querying;
using System.Collections.Generic;
+using MediaBrowser.Controller.Dto;
namespace MediaBrowser.Controller.TV
{
@@ -9,16 +10,11 @@ namespace MediaBrowser.Controller.TV
/// <summary>
/// Gets the next up.
/// </summary>
- /// <param name="query">The query.</param>
- /// <returns>QueryResult&lt;BaseItem&gt;.</returns>
- QueryResult<BaseItem> GetNextUp(NextUpQuery query);
+ QueryResult<BaseItem> GetNextUp(NextUpQuery query, DtoOptions options);
/// <summary>
/// Gets the next up.
/// </summary>
- /// <param name="request">The request.</param>
- /// <param name="parentsFolders">The parents folders.</param>
- /// <returns>QueryResult&lt;BaseItem&gt;.</returns>
- QueryResult<BaseItem> GetNextUp(NextUpQuery request, List<Folder> parentsFolders);
+ QueryResult<BaseItem> GetNextUp(NextUpQuery request, List<Folder> parentsFolders, DtoOptions options);
}
}