aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Emby.Dlna/ContentDirectory/ControlHandler.cs22
-rw-r--r--Emby.Drawing/ImageProcessor.cs21
-rw-r--r--Emby.Server.Implementations/Channels/ChannelManager.cs4
-rw-r--r--Emby.Server.Implementations/Data/SqliteItemRepository.cs73
-rw-r--r--Emby.Server.Implementations/Dto/DtoService.cs28
-rw-r--r--Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs7
-rw-r--r--Emby.Server.Implementations/Library/LibraryManager.cs12
-rw-r--r--Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs7
-rw-r--r--Emby.Server.Implementations/Library/MusicManager.cs48
-rw-r--r--Emby.Server.Implementations/Library/SearchEngine.cs13
-rw-r--r--Emby.Server.Implementations/Library/UserViewManager.cs10
-rw-r--r--Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs18
-rw-r--r--Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs17
-rw-r--r--Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs30
-rw-r--r--Emby.Server.Implementations/LiveTv/LiveTvManager.cs61
-rw-r--r--Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs7
-rw-r--r--Emby.Server.Implementations/Playlists/PlaylistManager.cs19
-rw-r--r--Emby.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs5
-rw-r--r--Emby.Server.Implementations/Session/SessionManager.cs19
-rw-r--r--Emby.Server.Implementations/TV/SeriesPostScanTask.cs7
-rw-r--r--Emby.Server.Implementations/TV/TVSeriesManager.cs18
-rw-r--r--Emby.Server.Implementations/UserViews/CollectionFolderImageProvider.cs7
-rw-r--r--Emby.Server.Implementations/UserViews/DynamicImageProvider.cs9
-rw-r--r--MediaBrowser.Api/BaseApiService.cs10
-rw-r--r--MediaBrowser.Api/GamesService.cs18
-rw-r--r--MediaBrowser.Api/Images/ImageService.cs2
-rw-r--r--MediaBrowser.Api/Library/LibraryService.cs24
-rw-r--r--MediaBrowser.Api/LiveTv/LiveTvService.cs5
-rw-r--r--MediaBrowser.Api/Movies/MoviesService.cs18
-rw-r--r--MediaBrowser.Api/Music/InstantMixService.cs52
-rw-r--r--MediaBrowser.Api/TvShowsService.cs18
-rw-r--r--MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs3
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs8
-rw-r--r--MediaBrowser.Api/UserLibrary/UserLibraryService.cs10
-rw-r--r--MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs2
-rw-r--r--MediaBrowser.Controller/Dto/DtoOptions.cs21
-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.cs79
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs26
-rw-r--r--MediaBrowser.Controller/Entities/GameGenre.cs10
-rw-r--r--MediaBrowser.Controller/Entities/Genre.cs10
-rw-r--r--MediaBrowser.Controller/Entities/IItemByName.cs7
-rw-r--r--MediaBrowser.Controller/Entities/InternalItemsQuery.cs33
-rw-r--r--MediaBrowser.Controller/Entities/Person.cs16
-rw-r--r--MediaBrowser.Controller/Entities/Studio.cs10
-rw-r--r--MediaBrowser.Controller/Entities/TV/Season.cs19
-rw-r--r--MediaBrowser.Controller/Entities/TV/Series.cs28
-rw-r--r--MediaBrowser.Controller/Entities/UserView.cs8
-rw-r--r--MediaBrowser.Controller/Entities/UserViewBuilder.cs11
-rw-r--r--MediaBrowser.Controller/Entities/Year.cs20
-rw-r--r--MediaBrowser.Controller/Library/IMusicManager.cs18
-rw-r--r--MediaBrowser.Controller/Library/IUserViewManager.cs3
-rw-r--r--MediaBrowser.Controller/LiveTv/ILiveTvManager.cs11
-rw-r--r--MediaBrowser.Controller/Playlists/Playlist.cs24
-rw-r--r--MediaBrowser.Controller/TV/ITVSeriesManager.cs10
-rw-r--r--MediaBrowser.Model/Querying/ItemFields.cs11
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs7
-rw-r--r--MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs4
-rw-r--r--MediaBrowser.Providers/People/TvdbPersonImageProvider.cs7
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs13
-rw-r--r--MediaBrowser.XbmcMetadata/EntryPoint.cs4
62 files changed, 620 insertions, 446 deletions
diff --git a/Emby.Dlna/ContentDirectory/ControlHandler.cs b/Emby.Dlna/ContentDirectory/ControlHandler.cs
index 2251a8f58..a5229c4fa 100644
--- a/Emby.Dlna/ContentDirectory/ControlHandler.cs
+++ b/Emby.Dlna/ContentDirectory/ControlHandler.cs
@@ -23,6 +23,7 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Model.Globalization;
@@ -459,10 +460,16 @@ namespace Emby.Dlna.ContentDirectory
IsMissing = false,
ExcludeItemTypes = new[] { typeof(Game).Name, typeof(Book).Name },
IsFolder = isFolder,
- MediaTypes = mediaTypes.ToArray()
+ MediaTypes = mediaTypes.ToArray(),
+ DtoOptions = GetDtoOptions()
});
}
+ private DtoOptions GetDtoOptions()
+ {
+ return new DtoOptions(true);
+ }
+
private async Task<QueryResult<ServerItem>> GetUserItems(BaseItem item, StubType? stubType, User user, SortCriteria sort, int? startIndex, int? limit)
{
if (item is MusicGenre)
@@ -513,7 +520,8 @@ namespace Emby.Dlna.ContentDirectory
IsMissing = false,
PresetViews = new[] {CollectionType.Movies, CollectionType.TvShows, CollectionType.Music},
ExcludeItemTypes = new[] {typeof (Game).Name, typeof (Book).Name},
- IsPlaceHolder = false
+ IsPlaceHolder = false,
+ DtoOptions = GetDtoOptions()
};
SetSorting(query, sort, folder.IsPreSorted);
@@ -532,7 +540,8 @@ namespace Emby.Dlna.ContentDirectory
ArtistIds = new[] { item.Id.ToString("N") },
IncludeItemTypes = new[] { typeof(MusicAlbum).Name },
Limit = limit,
- StartIndex = startIndex
+ StartIndex = startIndex,
+ DtoOptions = GetDtoOptions()
};
SetSorting(query, sort, false);
@@ -551,7 +560,8 @@ namespace Emby.Dlna.ContentDirectory
GenreIds = new[] {item.Id.ToString("N")},
IncludeItemTypes = new[] {typeof (MusicAlbum).Name},
Limit = limit,
- StartIndex = startIndex
+ StartIndex = startIndex,
+ DtoOptions = GetDtoOptions()
};
SetSorting(query, sort, false);
@@ -595,8 +605,8 @@ namespace Emby.Dlna.ContentDirectory
IncludeItemTypes = new[] { typeof(Movie).Name, typeof(Series).Name, typeof(Trailer).Name },
SortBy = new[] { ItemSortBy.SortName },
Limit = limit,
- StartIndex = startIndex
-
+ StartIndex = startIndex,
+ DtoOptions = GetDtoOptions()
});
var serverItems = itemsResult.Items.Select(i => new ServerItem(i))
diff --git a/Emby.Drawing/ImageProcessor.cs b/Emby.Drawing/ImageProcessor.cs
index 92382aa47..d5a3b73c2 100644
--- a/Emby.Drawing/ImageProcessor.cs
+++ b/Emby.Drawing/ImageProcessor.cs
@@ -179,10 +179,15 @@ namespace Emby.Drawing
}
var originalImage = options.Image;
+ IHasImages item = options.Item;
if (!originalImage.IsLocalFile)
{
- originalImage = await _libraryManager().ConvertImageToLocal(options.Item, originalImage, options.ImageIndex).ConfigureAwait(false);
+ if (item == null)
+ {
+ item = _libraryManager().GetItemById(options.ItemId);
+ }
+ originalImage = await _libraryManager().ConvertImageToLocal(item, originalImage, options.ImageIndex).ConfigureAwait(false);
}
var originalImagePath = originalImage.Path;
@@ -195,13 +200,18 @@ namespace Emby.Drawing
if (options.Enhancers.Count > 0)
{
+ if (item == null)
+ {
+ item = _libraryManager().GetItemById(options.ItemId);
+ }
+
var tuple = await GetEnhancedImage(new ItemImageInfo
{
DateModified = dateModified,
Type = originalImage.Type,
Path = originalImagePath
- }, options.Item, options.ImageIndex, options.Enhancers).ConfigureAwait(false);
+ }, item, options.ImageIndex, options.Enhancers).ConfigureAwait(false);
originalImagePath = tuple.Item1;
dateModified = tuple.Item2;
@@ -237,7 +247,12 @@ namespace Emby.Drawing
var tmpPath = Path.ChangeExtension(Path.Combine(_appPaths.TempDirectory, Guid.NewGuid().ToString("N")), Path.GetExtension(cacheFilePath));
_fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(tmpPath));
- var resultPath =_imageEncoder.EncodeImage(originalImagePath, dateModified, tmpPath, AutoOrient(options.Item), quality, options, outputFormat);
+ if (item == null && string.Equals(options.ItemType, typeof(Photo).Name, StringComparison.OrdinalIgnoreCase))
+ {
+ item = _libraryManager().GetItemById(options.ItemId);
+ }
+
+ var resultPath =_imageEncoder.EncodeImage(originalImagePath, dateModified, tmpPath, AutoOrient(item), quality, options, outputFormat);
if (string.Equals(resultPath, originalImagePath, StringComparison.OrdinalIgnoreCase))
{
diff --git a/Emby.Server.Implementations/Channels/ChannelManager.cs b/Emby.Server.Implementations/Channels/ChannelManager.cs
index 0cdd934b7..067260dfd 100644
--- a/Emby.Server.Implementations/Channels/ChannelManager.cs
+++ b/Emby.Server.Implementations/Channels/ChannelManager.cs
@@ -460,12 +460,12 @@ namespace Emby.Server.Implementations.Channels
public IEnumerable<ChannelFeatures> GetAllChannelFeatures()
{
- return _libraryManager.GetItemList(new InternalItemsQuery
+ return _libraryManager.GetItemIds(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(Channel).Name },
SortBy = new[] { ItemSortBy.SortName }
- }).Select(i => GetChannelFeatures(i.Id.ToString("N")));
+ }).Select(i => GetChannelFeatures(i.ToString("N")));
}
public ChannelFeatures GetChannelFeatures(string id)
diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
index 51aee444e..49bf9e39c 100644
--- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
@@ -207,8 +207,6 @@ namespace Emby.Server.Implementations.Data
AddColumn(db, "TypedBaseItems", "DateCreated", "DATETIME", existingColumnNames);
AddColumn(db, "TypedBaseItems", "DateModified", "DATETIME", existingColumnNames);
- AddColumn(db, "TypedBaseItems", "ForcedSortName", "Text", existingColumnNames);
-
AddColumn(db, "TypedBaseItems", "IsSeries", "BIT", existingColumnNames);
AddColumn(db, "TypedBaseItems", "IsLive", "BIT", existingColumnNames);
AddColumn(db, "TypedBaseItems", "IsNews", "BIT", existingColumnNames);
@@ -426,7 +424,7 @@ namespace Emby.Server.Implementations.Data
"OfficialRating",
"HomePageUrl",
"DisplayMediaType",
- "ForcedSortName",
+ "SortName",
"RunTimeTicks",
"VoteCount",
"DateCreated",
@@ -549,7 +547,6 @@ namespace Emby.Server.Implementations.Data
"DisplayMediaType",
"DateCreated",
"DateModified",
- "ForcedSortName",
"PreferredMetadataLanguage",
"PreferredMetadataCountryCode",
"IsHD",
@@ -826,8 +823,6 @@ namespace Emby.Server.Implementations.Data
saveItemStatement.TryBind("@DateCreated", item.DateCreated);
saveItemStatement.TryBind("@DateModified", item.DateModified);
- saveItemStatement.TryBind("@ForcedSortName", item.ForcedSortName);
-
saveItemStatement.TryBind("@PreferredMetadataLanguage", item.PreferredMetadataLanguage);
saveItemStatement.TryBind("@PreferredMetadataCountryCode", item.PreferredMetadataCountryCode);
saveItemStatement.TryBind("@IsHD", item.IsHD);
@@ -1237,7 +1232,7 @@ namespace Emby.Server.Implementations.Data
foreach (var row in statement.ExecuteQuery())
{
- return GetItem(row);
+ return GetItem(row, new InternalItemsQuery());
}
}
@@ -1246,11 +1241,6 @@ namespace Emby.Server.Implementations.Data
}
}
- private BaseItem GetItem(IReadOnlyList<IResultSetValue> reader)
- {
- return GetItem(reader, new InternalItemsQuery());
- }
-
private bool TypeRequiresDeserialization(Type type)
{
if (_config.Configuration.SkipDeserializationForBasicTypes)
@@ -1535,11 +1525,14 @@ namespace Emby.Server.Implementations.Data
}
index++;
- if (!reader.IsDBNull(index))
+ if (query.HasField(ItemFields.ExternalEtag))
{
- item.ExternalEtag = reader.GetString(index);
+ if (!reader.IsDBNull(index))
+ {
+ item.ExternalEtag = reader.GetString(index);
+ }
+ index++;
}
- index++;
if (!reader.IsDBNull(index))
{
@@ -1614,7 +1607,7 @@ namespace Emby.Server.Implementations.Data
{
if (!reader.IsDBNull(index))
{
- item.ForcedSortName = reader.GetString(index);
+ item.SortName = reader.GetString(index);
}
index++;
}
@@ -1821,29 +1814,41 @@ namespace Emby.Server.Implementations.Data
}
index++;
- if (!reader.IsDBNull(index))
+ if (query.HasField(ItemFields.PresentationUniqueKey))
{
- item.PresentationUniqueKey = reader.GetString(index);
+ if (!reader.IsDBNull(index))
+ {
+ item.PresentationUniqueKey = reader.GetString(index);
+ }
+ index++;
}
- index++;
- if (!reader.IsDBNull(index))
+ if (query.HasField(ItemFields.InheritedParentalRatingValue))
{
- item.InheritedParentalRatingValue = reader.GetInt32(index);
+ if (!reader.IsDBNull(index))
+ {
+ item.InheritedParentalRatingValue = reader.GetInt32(index);
+ }
+ index++;
}
- index++;
- if (!reader.IsDBNull(index))
+ if (query.HasField(ItemFields.Tags))
{
- item.InheritedTags = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+ if (!reader.IsDBNull(index))
+ {
+ item.InheritedTags = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+ }
+ index++;
}
- index++;
- if (!reader.IsDBNull(index))
+ if (query.HasField(ItemFields.ExternalSeriesId))
{
- item.ExternalSeriesId = reader.GetString(index);
+ if (!reader.IsDBNull(index))
+ {
+ item.ExternalSeriesId = reader.GetString(index);
+ }
+ index++;
}
- index++;
if (query.HasField(ItemFields.Taglines))
{
@@ -2240,12 +2245,16 @@ namespace Emby.Server.Implementations.Data
}
if (field == ItemFields.SortName)
{
- return new[] { "ForcedSortName" };
+ return new[] { "SortName" };
}
if (field == ItemFields.Taglines)
{
return new[] { "Tagline" };
}
+ if (field == ItemFields.Tags)
+ {
+ return new[] { "Tags", "InheritedTags" };
+ }
return new[] { field.ToString() };
}
@@ -4916,7 +4925,9 @@ namespace Emby.Server.Implementations.Data
var columns = _retriveItemColumns.ToList();
columns.AddRange(itemCountColumns.Select(i => i.Item2).ToArray());
- var commandText = "select " + string.Join(",", GetFinalColumnsToSelect(query, columns.ToArray())) + GetFromText();
+ columns = GetFinalColumnsToSelect(query, columns.ToArray()).ToList();
+
+ var commandText = "select " + string.Join(",", columns.ToArray()) + GetFromText();
commandText += GetJoinUserDataText(query);
var innerQuery = new InternalItemsQuery(query.User)
@@ -5042,7 +5053,7 @@ namespace Emby.Server.Implementations.Data
foreach (var row in statement.ExecuteQuery())
{
- var item = GetItem(row);
+ var item = GetItem(row, query);
if (item != null)
{
var countStartColumn = columns.Count - 1;
diff --git a/Emby.Server.Implementations/Dto/DtoService.cs b/Emby.Server.Implementations/Dto/DtoService.cs
index ec4f552a6..bb46e6006 100644
--- a/Emby.Server.Implementations/Dto/DtoService.cs
+++ b/Emby.Server.Implementations/Dto/DtoService.cs
@@ -127,7 +127,11 @@ namespace Emby.Server.Implementations.Dto
{
var libraryItems = byName.GetTaggedItems(new InternalItemsQuery(user)
{
- Recursive = true
+ Recursive = true,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
});
SetItemByNameInfo(item, dto, libraryItems.ToList(), user);
@@ -177,7 +181,11 @@ namespace Emby.Server.Implementations.Dto
{
if (options.Fields.Contains(ItemFields.ItemCounts))
{
- SetItemByNameInfo(item, dto, GetTaggedItems(byName, user), user);
+ SetItemByNameInfo(item, dto, GetTaggedItems(byName, user, new DtoOptions(false)
+ {
+ EnableImages = false
+
+ }), user);
}
FillSyncInfo(dto, item, options, user, syncDictionary);
@@ -189,11 +197,12 @@ namespace Emby.Server.Implementations.Dto
return dto;
}
- private List<BaseItem> GetTaggedItems(IItemByName byName, User user)
+ private List<BaseItem> GetTaggedItems(IItemByName byName, User user, DtoOptions options)
{
var items = byName.GetTaggedItems(new InternalItemsQuery(user)
{
- Recursive = true
+ Recursive = true,
+ DtoOptions = options
}).ToList();
@@ -595,16 +604,17 @@ namespace Emby.Server.Implementations.Dto
{
if (!string.IsNullOrEmpty(item.Album))
{
- var parentAlbum = _libraryManager.GetItemList(new InternalItemsQuery
+ var parentAlbumIds = _libraryManager.GetItemIds(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(MusicAlbum).Name },
- Name = item.Album
+ Name = item.Album,
+ Limit = 1
- }).FirstOrDefault();
+ });
- if (parentAlbum != null)
+ if (parentAlbumIds.Count > 0)
{
- dto.AlbumId = GetDtoId(parentAlbum);
+ dto.AlbumId = parentAlbumIds[0].ToString("N");
}
}
diff --git a/Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs b/Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
index 86c8c5f68..7371b4fdb 100644
--- a/Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
+++ b/Emby.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
@@ -16,6 +16,7 @@ using System.Threading;
using System.Threading.Tasks;
using Emby.Server.Implementations.Library;
using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
@@ -588,7 +589,8 @@ namespace Emby.Server.Implementations.FileOrganization
var series = _libraryManager.GetItemList(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(Series).Name },
- Recursive = true
+ Recursive = true,
+ DtoOptions = new DtoOptions(true)
})
.Cast<Series>()
.Select(i => NameUtils.GetMatchScore(nameWithoutYear, yearInName, i))
@@ -607,7 +609,8 @@ namespace Emby.Server.Implementations.FileOrganization
{
IncludeItemTypes = new[] { typeof(Series).Name },
Recursive = true,
- Name = info.ItemName
+ Name = info.ItemName,
+ DtoOptions = new DtoOptions(true)
}).Cast<Series>().FirstOrDefault();
}
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs
index c8151ec86..a423db9d6 100644
--- a/Emby.Server.Implementations/Library/LibraryManager.cs
+++ b/Emby.Server.Implementations/Library/LibraryManager.cs
@@ -41,6 +41,7 @@ using SortOrder = MediaBrowser.Model.Entities.SortOrder;
using VideoResolver = MediaBrowser.Naming.Video.VideoResolver;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.Tasks;
@@ -313,7 +314,8 @@ namespace Emby.Server.Implementations.Library
{
IncludeItemTypes = new[] { typeof(Season).Name },
Recursive = true,
- IndexNumber = 0
+ IndexNumber = 0,
+ DtoOptions = new DtoOptions(true)
}).Cast<Season>()
.Where(i => !string.Equals(i.Name, newName, StringComparison.Ordinal))
@@ -342,7 +344,7 @@ namespace Emby.Server.Implementations.Library
}
if (item is IItemByName)
{
- if (!(item is MusicArtist) && !(item is Studio))
+ if (!(item is MusicArtist))
{
return;
}
@@ -868,7 +870,8 @@ namespace Emby.Server.Implementations.Library
IsFolder = isFolder,
SortBy = new[] { ItemSortBy.DateCreated },
SortOrder = SortOrder.Descending,
- Limit = 1
+ Limit = 1,
+ DtoOptions = new DtoOptions(true)
};
return GetItemList(query)
@@ -981,7 +984,8 @@ namespace Emby.Server.Implementations.Library
var existing = GetItemList(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(T).Name },
- Name = name
+ Name = name,
+ DtoOptions = new DtoOptions(true)
}).Cast<MusicArtist>()
.OrderBy(i => i.IsAccessedByName ? 1 : 0)
diff --git a/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs b/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs
index 7424ed5e5..e64980dff 100644
--- a/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs
+++ b/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs
@@ -6,6 +6,7 @@ using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
@@ -27,7 +28,8 @@ namespace Emby.Server.Implementations.Library
var items = _libraryManager.GetItemList(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(BoxSet).Name, typeof(Game).Name, typeof(Movie).Name, typeof(Series).Name },
- Recursive = true
+ Recursive = true,
+ DtoOptions = new DtoOptions(true)
}).OfType<IHasTrailers>().ToList();
@@ -40,7 +42,8 @@ namespace Emby.Server.Implementations.Library
{
IncludeItemTypes = new[] { typeof(Trailer).Name },
TrailerTypes = trailerTypes,
- Recursive = true
+ Recursive = true,
+ DtoOptions = new DtoOptions(false)
}).ToArray();
diff --git a/Emby.Server.Implementations/Library/MusicManager.cs b/Emby.Server.Implementations/Library/MusicManager.cs
index b15c01125..f0d07cc3c 100644
--- a/Emby.Server.Implementations/Library/MusicManager.cs
+++ b/Emby.Server.Implementations/Library/MusicManager.cs
@@ -5,6 +5,7 @@ using MediaBrowser.Controller.Playlists;
using System;
using System.Collections.Generic;
using System.Linq;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Querying;
namespace Emby.Server.Implementations.Library
@@ -18,47 +19,48 @@ namespace Emby.Server.Implementations.Library
_libraryManager = libraryManager;
}
- public IEnumerable<Audio> GetInstantMixFromSong(Audio item, User user)
+ public IEnumerable<Audio> GetInstantMixFromSong(Audio item, User user, DtoOptions dtoOptions)
{
var list = new List<Audio>
{
item
};
- return list.Concat(GetInstantMixFromGenres(item.Genres, user));
+ return list.Concat(GetInstantMixFromGenres(item.Genres, user, dtoOptions));
}
- public IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist item, User user)
+ public IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist item, User user, DtoOptions dtoOptions)
{
- return GetInstantMixFromGenres(item.Genres, user);
+ return GetInstantMixFromGenres(item.Genres, user, dtoOptions);
}
- public IEnumerable<Audio> GetInstantMixFromAlbum(MusicAlbum item, User user)
+ public IEnumerable<Audio> GetInstantMixFromAlbum(MusicAlbum item, User user, DtoOptions dtoOptions)
{
- return GetInstantMixFromGenres(item.Genres, user);
+ return GetInstantMixFromGenres(item.Genres, user, dtoOptions);
}
- public IEnumerable<Audio> GetInstantMixFromFolder(Folder item, User user)
+ public IEnumerable<Audio> GetInstantMixFromFolder(Folder item, User user, DtoOptions dtoOptions)
{
var genres = item
.GetRecursiveChildren(user, new InternalItemsQuery(user)
{
- IncludeItemTypes = new[] { typeof(Audio).Name }
+ IncludeItemTypes = new[] { typeof(Audio).Name },
+ DtoOptions = dtoOptions
})
.Cast<Audio>()
.SelectMany(i => i.Genres)
.Concat(item.Genres)
.DistinctNames();
- return GetInstantMixFromGenres(genres, user);
+ return GetInstantMixFromGenres(genres, user, dtoOptions);
}
- public IEnumerable<Audio> GetInstantMixFromPlaylist(Playlist item, User user)
+ public IEnumerable<Audio> GetInstantMixFromPlaylist(Playlist item, User user, DtoOptions dtoOptions)
{
- return GetInstantMixFromGenres(item.Genres, user);
+ return GetInstantMixFromGenres(item.Genres, user, dtoOptions);
}
- public IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user)
+ public IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user, DtoOptions dtoOptions)
{
var genreIds = genres.DistinctNames().Select(i =>
{
@@ -73,10 +75,10 @@ namespace Emby.Server.Implementations.Library
}).Where(i => i != null);
- return GetInstantMixFromGenreIds(genreIds, user);
+ return GetInstantMixFromGenreIds(genreIds, user, dtoOptions);
}
- public IEnumerable<Audio> GetInstantMixFromGenreIds(IEnumerable<string> genreIds, User user)
+ public IEnumerable<Audio> GetInstantMixFromGenreIds(IEnumerable<string> genreIds, User user, DtoOptions dtoOptions)
{
return _libraryManager.GetItemList(new InternalItemsQuery(user)
{
@@ -86,47 +88,49 @@ namespace Emby.Server.Implementations.Library
Limit = 200,
- SortBy = new[] { ItemSortBy.Random }
+ SortBy = new[] { ItemSortBy.Random },
+
+ DtoOptions = dtoOptions
}).Cast<Audio>();
}
- public IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user)
+ public IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user, DtoOptions dtoOptions)
{
var genre = item as MusicGenre;
if (genre != null)
{
- return GetInstantMixFromGenreIds(new[] { item.Id.ToString("N") }, user);
+ return GetInstantMixFromGenreIds(new[] { item.Id.ToString("N") }, user, dtoOptions);
}
var playlist = item as Playlist;
if (playlist != null)
{
- return GetInstantMixFromPlaylist(playlist, user);
+ return GetInstantMixFromPlaylist(playlist, user, dtoOptions);
}
var album = item as MusicAlbum;
if (album != null)
{
- return GetInstantMixFromAlbum(album, user);
+ return GetInstantMixFromAlbum(album, user, dtoOptions);
}
var artist = item as MusicArtist;
if (artist != null)
{
- return GetInstantMixFromArtist(artist, user);
+ return GetInstantMixFromArtist(artist, user, dtoOptions);
}
var song = item as Audio;
if (song != null)
{
- return GetInstantMixFromSong(song, user);
+ return GetInstantMixFromSong(song, user, dtoOptions);
}
var folder = item as Folder;
if (folder != null)
{
- return GetInstantMixFromFolder(folder, user);
+ return GetInstantMixFromFolder(folder, user, dtoOptions);
}
return new Audio[] { };
diff --git a/Emby.Server.Implementations/Library/SearchEngine.cs b/Emby.Server.Implementations/Library/SearchEngine.cs
index 5f88a6c66..6f63322c8 100644
--- a/Emby.Server.Implementations/Library/SearchEngine.cs
+++ b/Emby.Server.Implementations/Library/SearchEngine.cs
@@ -8,6 +8,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Extensions;
namespace Emby.Server.Implementations.Library
@@ -175,7 +176,17 @@ namespace Emby.Server.Implementations.Library
IsNews = query.IsNews,
IsSeries = query.IsSeries,
IsSports = query.IsSports,
- MediaTypes = query.MediaTypes
+ MediaTypes = query.MediaTypes,
+
+ DtoOptions = new DtoOptions
+ {
+ Fields = new List<ItemFields>
+ {
+ ItemFields.AirTime,
+ ItemFields.DateCreated,
+ ItemFields.ChannelInfo
+ }
+ }
});
// Add search hints based on item name
diff --git a/Emby.Server.Implementations/Library/UserViewManager.cs b/Emby.Server.Implementations/Library/UserViewManager.cs
index 9e1291847..f403ca266 100644
--- a/Emby.Server.Implementations/Library/UserViewManager.cs
+++ b/Emby.Server.Implementations/Library/UserViewManager.cs
@@ -12,6 +12,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Model.Globalization;
@@ -190,11 +191,11 @@ namespace Emby.Server.Implementations.Library
return _libraryManager.GetShadowView(parent, viewType, sortName, cancellationToken);
}
- public List<Tuple<BaseItem, List<BaseItem>>> GetLatestItems(LatestItemsQuery request)
+ public List<Tuple<BaseItem, List<BaseItem>>> GetLatestItems(LatestItemsQuery request, DtoOptions options)
{
var user = _userManager.GetUserById(request.UserId);
- var libraryItems = GetItemsForLatestItems(user, request);
+ var libraryItems = GetItemsForLatestItems(user, request, options);
var list = new List<Tuple<BaseItem, List<BaseItem>>>();
@@ -230,7 +231,7 @@ namespace Emby.Server.Implementations.Library
return list;
}
- private IEnumerable<BaseItem> GetItemsForLatestItems(User user, LatestItemsQuery request)
+ private IEnumerable<BaseItem> GetItemsForLatestItems(User user, LatestItemsQuery request, DtoOptions options)
{
var parentId = request.ParentId;
@@ -289,7 +290,8 @@ namespace Emby.Server.Implementations.Library
IsVirtualItem = false,
Limit = limit * 5,
SourceTypes = parents.Count == 0 ? new[] { SourceType.Library } : new SourceType[] { },
- IsPlayed = isPlayed
+ IsPlayed = isPlayed,
+ DtoOptions = options
}, parents);
}
diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
index 7f1a9ba6d..89b772731 100644
--- a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
+++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
@@ -30,6 +30,7 @@ using MediaBrowser.Common.Events;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO;
using MediaBrowser.Controller;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.IO;
@@ -1232,7 +1233,9 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
RequiresClosing = false,
Protocol = MediaBrowser.Model.MediaInfo.MediaProtocol.Http,
BufferMs = 0,
- IgnoreDts = true
+ IgnoreDts = true,
+ IgnoreIndex = true,
+ GenPtsInput = true
};
var isAudio = false;
@@ -1640,7 +1643,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
SortOrder = SortOrder.Descending,
IsVirtualItem = false,
IsFolder = false,
- Recursive = true
+ Recursive = true,
+ DtoOptions = new DtoOptions(true)
}).ConfigureAwait(false))
.Items
@@ -1977,7 +1981,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
{
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
Limit = 1,
- ExternalId = timer.ProgramId
+ ExternalId = timer.ProgramId,
+ DtoOptions = new DtoOptions(true)
}).FirstOrDefault() as LiveTvProgram;
@@ -2511,16 +2516,17 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
if (program.EpisodeNumber.HasValue && program.SeasonNumber.HasValue)
{
- var result = _libraryManager.GetItemsResult(new InternalItemsQuery
+ var result = _libraryManager.GetItemIds(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(Episode).Name },
ParentIndexNumber = program.SeasonNumber.Value,
IndexNumber = program.EpisodeNumber.Value,
AncestorIds = seriesIds,
- IsVirtualItem = false
+ IsVirtualItem = false,
+ Limit = 1
});
- if (result.TotalRecordCount > 0)
+ if (result.Count > 0)
{
return true;
}
diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
index 2f449bee2..cec158633 100644
--- a/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
+++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
@@ -200,27 +200,32 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
flags.Add("+genpts");
}
- var inputModifiers = "-async 1 -vsync -1";
+ var inputModifier = "-async 1 -vsync -1";
if (flags.Count > 0)
{
- inputModifiers += " -fflags " + string.Join("", flags.ToArray());
+ inputModifier += " -fflags " + string.Join("", flags.ToArray());
}
if (!string.IsNullOrWhiteSpace(GetEncodingOptions().HardwareAccelerationType))
{
- inputModifiers += " -hwaccel auto";
+ inputModifier += " -hwaccel auto";
}
if (mediaSource.ReadAtNativeFramerate)
{
- inputModifiers += " -re";
+ inputModifier += " -re";
+ }
+
+ if (mediaSource.RequiresLooping)
+ {
+ inputModifier += " -stream_loop -1";
}
var analyzeDurationSeconds = 5;
var analyzeDuration = " -analyzeduration " +
(analyzeDurationSeconds * 1000000).ToString(CultureInfo.InvariantCulture);
- inputModifiers += analyzeDuration;
+ inputModifier += analyzeDuration;
var subtitleArgs = CopySubtitles ? " -codec:s copy" : " -sn";
@@ -239,7 +244,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
durationParam,
outputParam);
- return inputModifiers + " " + commandLineArgs;
+ return inputModifier + " " + commandLineArgs;
}
private string GetAudioArgs(MediaSourceInfo mediaSource)
diff --git a/Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs b/Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs
index 43b055098..5c5072192 100644
--- a/Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs
+++ b/Emby.Server.Implementations/LiveTv/LiveTvDtoService.cs
@@ -149,7 +149,11 @@ namespace Emby.Server.Implementations.LiveTv
IncludeItemTypes = new string[] { typeof(Series).Name },
Name = seriesName,
Limit = 1,
- ImageTypes = new ImageType[] { ImageType.Thumb }
+ ImageTypes = new ImageType[] { ImageType.Thumb },
+ DtoOptions = new DtoOptions
+ {
+ Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
+ }
}).FirstOrDefault();
@@ -191,7 +195,11 @@ namespace Emby.Server.Implementations.LiveTv
IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name },
ExternalSeriesId = programSeriesId,
Limit = 1,
- ImageTypes = new ImageType[] { ImageType.Primary }
+ ImageTypes = new ImageType[] { ImageType.Primary },
+ DtoOptions = new DtoOptions
+ {
+ Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
+ }
}).FirstOrDefault();
@@ -239,7 +247,11 @@ namespace Emby.Server.Implementations.LiveTv
IncludeItemTypes = new string[] { typeof(Series).Name },
Name = seriesName,
Limit = 1,
- ImageTypes = new ImageType[] { ImageType.Thumb }
+ ImageTypes = new ImageType[] { ImageType.Thumb },
+ DtoOptions = new DtoOptions
+ {
+ Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
+ }
}).FirstOrDefault();
@@ -281,14 +293,22 @@ namespace Emby.Server.Implementations.LiveTv
IncludeItemTypes = new string[] { typeof(Series).Name },
Name = seriesName,
Limit = 1,
- ImageTypes = new ImageType[] { ImageType.Primary }
+ ImageTypes = new ImageType[] { ImageType.Primary },
+ DtoOptions = new DtoOptions
+ {
+ Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
+ }
}).FirstOrDefault() ?? _libraryManager.GetItemList(new InternalItemsQuery
{
IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name },
ExternalSeriesId = programSeriesId,
Limit = 1,
- ImageTypes = new ImageType[] { ImageType.Primary }
+ ImageTypes = new ImageType[] { ImageType.Primary },
+ DtoOptions = new DtoOptions
+ {
+ Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
+ }
}).FirstOrDefault();
diff --git a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
index 5ba96283b..fa505d3fb 100644
--- a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -173,7 +173,7 @@ namespace Emby.Server.Implementations.LiveTv
}
}
- public async Task<QueryResult<LiveTvChannel>> GetInternalChannels(LiveTvChannelQuery query, CancellationToken cancellationToken)
+ public async Task<QueryResult<LiveTvChannel>> GetInternalChannels(LiveTvChannelQuery query, DtoOptions dtoOptions, CancellationToken cancellationToken)
{
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
@@ -192,7 +192,8 @@ namespace Emby.Server.Implementations.LiveTv
IsFavorite = query.IsFavorite,
IsLiked = query.IsLiked,
StartIndex = query.StartIndex,
- Limit = query.Limit
+ Limit = query.Limit,
+ DtoOptions = dtoOptions
};
internalQuery.OrderBy.AddRange(query.SortBy.Select(i => new Tuple<string, SortOrder>(i, query.SortOrder ?? SortOrder.Ascending)));
@@ -249,7 +250,7 @@ namespace Emby.Server.Implementations.LiveTv
{
Id = id
- }, cancellationToken).ConfigureAwait(false);
+ }, new DtoOptions(), cancellationToken).ConfigureAwait(false);
return result.Items.FirstOrDefault();
}
@@ -865,13 +866,6 @@ namespace Emby.Server.Implementations.LiveTv
return item.Id;
}
-
-
- private string GetExternalSeriesIdLegacy(BaseItem item)
- {
- return item.GetProviderId("ProviderExternalSeriesId");
- }
-
public async Task<BaseItemDto> GetProgram(string id, CancellationToken cancellationToken, User user = null)
{
var program = GetInternalProgram(id);
@@ -882,11 +876,6 @@ namespace Emby.Server.Implementations.LiveTv
var externalSeriesId = program.ExternalSeriesId;
- if (string.IsNullOrWhiteSpace(externalSeriesId))
- {
- externalSeriesId = GetExternalSeriesIdLegacy(program);
- }
-
list.Add(new Tuple<BaseItemDto, string, string, string>(dto, program.ServiceName, GetItemExternalId(program), externalSeriesId));
await AddRecordingInfo(list, cancellationToken).ConfigureAwait(false);
@@ -906,6 +895,8 @@ namespace Emby.Server.Implementations.LiveTv
query.SortBy = new[] { ItemSortBy.StartDate };
}
+ RemoveFields(options);
+
var internalQuery = new InternalItemsQuery(user)
{
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
@@ -965,8 +956,6 @@ namespace Emby.Server.Implementations.LiveTv
var queryResult = _libraryManager.QueryItems(internalQuery);
- RemoveFields(options);
-
var returnArray = (await _dtoService.GetBaseItemDtos(queryResult.Items, options, user).ConfigureAwait(false)).ToArray();
var result = new QueryResult<BaseItemDto>
@@ -1045,12 +1034,12 @@ namespace Emby.Server.Implementations.LiveTv
public async Task<QueryResult<BaseItemDto>> GetRecommendedPrograms(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken)
{
+ RemoveFields(options);
+
var internalResult = await GetRecommendedProgramsInternal(query, options, cancellationToken).ConfigureAwait(false);
var user = _userManager.GetUserById(query.UserId);
- RemoveFields(options);
-
var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray();
var result = new QueryResult<BaseItemDto>
@@ -1333,7 +1322,8 @@ namespace Emby.Server.Implementations.LiveTv
{
IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name },
- ChannelIds = new string[] { currentChannel.Id.ToString("N") }
+ ChannelIds = new string[] { currentChannel.Id.ToString("N") },
+ DtoOptions = new DtoOptions(true)
}).Cast<LiveTvProgram>().ToDictionary(i => i.Id);
@@ -1436,7 +1426,8 @@ namespace Emby.Server.Implementations.LiveTv
{
var list = _itemRepo.GetItemIdsList(new InternalItemsQuery
{
- IncludeItemTypes = validTypes
+ IncludeItemTypes = validTypes,
+ DtoOptions = new DtoOptions(false)
}).ToList();
@@ -1663,6 +1654,8 @@ namespace Emby.Server.Implementations.LiveTv
includeItemTypes.Add(typeof(Series).Name);
+ RemoveFields(options);
+
var internalResult = _libraryManager.GetItemsResult(new InternalItemsQuery(user)
{
Recursive = true,
@@ -1672,11 +1665,10 @@ namespace Emby.Server.Implementations.LiveTv
SortOrder = SortOrder.Descending,
EnableTotalRecordCount = query.EnableTotalRecordCount,
IncludeItemTypes = includeItemTypes.ToArray(),
- ExcludeItemTypes = excludeItemTypes.ToArray()
+ ExcludeItemTypes = excludeItemTypes.ToArray(),
+ DtoOptions = options
});
- RemoveFields(options);
-
var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray();
return new QueryResult<BaseItemDto>
@@ -1686,7 +1678,7 @@ namespace Emby.Server.Implementations.LiveTv
};
}
- public async Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, CancellationToken cancellationToken)
+ public async Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, DtoOptions options, CancellationToken cancellationToken)
{
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
if (user != null && !IsLiveTvEnabled(user))
@@ -1696,14 +1688,15 @@ namespace Emby.Server.Implementations.LiveTv
if (_services.Count == 1 && !(query.IsInProgress ?? false) && (!query.IsLibraryItem.HasValue || query.IsLibraryItem.Value))
{
- return GetEmbyRecordings(query, new DtoOptions(), user);
+ return GetEmbyRecordings(query, options, user);
}
await RefreshRecordings(cancellationToken).ConfigureAwait(false);
var internalQuery = new InternalItemsQuery(user)
{
- IncludeItemTypes = new[] { typeof(LiveTvVideoRecording).Name, typeof(LiveTvAudioRecording).Name }
+ IncludeItemTypes = new[] { typeof(LiveTvVideoRecording).Name, typeof(LiveTvAudioRecording).Name },
+ DtoOptions = options
};
if (!string.IsNullOrEmpty(query.ChannelId))
@@ -1872,11 +1865,6 @@ namespace Emby.Server.Implementations.LiveTv
var externalSeriesId = program.ExternalSeriesId;
- if (string.IsNullOrWhiteSpace(externalSeriesId))
- {
- externalSeriesId = GetExternalSeriesIdLegacy(program);
- }
-
programTuples.Add(new Tuple<BaseItemDto, string, string, string>(dto, serviceName, GetItemExternalId(program), externalSeriesId));
}
@@ -1953,10 +1941,10 @@ namespace Emby.Server.Implementations.LiveTv
{
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
- var internalResult = await GetInternalRecordings(query, cancellationToken).ConfigureAwait(false);
-
RemoveFields(options);
+ var internalResult = await GetInternalRecordings(query, options, cancellationToken).ConfigureAwait(false);
+
var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray();
return new QueryResult<BaseItemDto>
@@ -2299,7 +2287,8 @@ namespace Emby.Server.Implementations.LiveTv
MinEndDate = now,
Limit = channelIds.Length,
SortBy = new[] { "StartDate" },
- TopParentIds = new[] { GetInternalLiveTvFolder(CancellationToken.None).Result.Id.ToString("N") }
+ TopParentIds = new[] { GetInternalLiveTvFolder(CancellationToken.None).Result.Id.ToString("N") },
+ DtoOptions = options
}).ToList() : new List<BaseItem>();
@@ -2601,7 +2590,7 @@ namespace Emby.Server.Implementations.LiveTv
{
UserId = query.UserId
- }, cancellationToken).ConfigureAwait(false);
+ }, new DtoOptions(), cancellationToken).ConfigureAwait(false);
var recordings = recordingResult.Items.OfType<ILiveTvRecording>().ToList();
diff --git a/Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs b/Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs
index 9514c12ca..75124cab8 100644
--- a/Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs
+++ b/Emby.Server.Implementations/Playlists/PlaylistImageProvider.cs
@@ -11,6 +11,7 @@ using System.Linq;
using System.Threading.Tasks;
using Emby.Server.Implementations.Images;
using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
@@ -89,7 +90,8 @@ namespace Emby.Server.Implementations.Playlists
SortBy = new[] { ItemSortBy.Random },
Limit = 4,
Recursive = true,
- ImageTypes = new[] { ImageType.Primary }
+ ImageTypes = new[] { ImageType.Primary },
+ DtoOptions = new DtoOptions(false)
}).ToList();
@@ -120,7 +122,8 @@ namespace Emby.Server.Implementations.Playlists
SortBy = new[] { ItemSortBy.Random },
Limit = 4,
Recursive = true,
- ImageTypes = new[] { ImageType.Primary }
+ ImageTypes = new[] { ImageType.Primary },
+ DtoOptions = new DtoOptions(false)
}).ToList();
diff --git a/Emby.Server.Implementations/Playlists/PlaylistManager.cs b/Emby.Server.Implementations/Playlists/PlaylistManager.cs
index 18042b587..6a290c664 100644
--- a/Emby.Server.Implementations/Playlists/PlaylistManager.cs
+++ b/Emby.Server.Implementations/Playlists/PlaylistManager.cs
@@ -13,6 +13,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
@@ -135,7 +136,10 @@ namespace Emby.Server.Implementations.Playlists
if (options.ItemIdList.Count > 0)
{
- await AddToPlaylistInternal(playlist.Id.ToString("N"), options.ItemIdList, user);
+ await AddToPlaylistInternal(playlist.Id.ToString("N"), options.ItemIdList, user, new DtoOptions(false)
+ {
+ EnableImages = true
+ });
}
return new PlaylistCreationResult
@@ -160,21 +164,24 @@ namespace Emby.Server.Implementations.Playlists
return path;
}
- private Task<IEnumerable<BaseItem>> GetPlaylistItems(IEnumerable<string> itemIds, string playlistMediaType, User user)
+ private Task<IEnumerable<BaseItem>> GetPlaylistItems(IEnumerable<string> itemIds, string playlistMediaType, User user, DtoOptions options)
{
var items = itemIds.Select(i => _libraryManager.GetItemById(i)).Where(i => i != null);
- return Playlist.GetPlaylistItems(playlistMediaType, items, user);
+ return Playlist.GetPlaylistItems(playlistMediaType, items, user, options);
}
public Task AddToPlaylist(string playlistId, IEnumerable<string> itemIds, string userId)
{
var user = string.IsNullOrWhiteSpace(userId) ? null : _userManager.GetUserById(userId);
- return AddToPlaylistInternal(playlistId, itemIds, user);
+ return AddToPlaylistInternal(playlistId, itemIds, user, new DtoOptions(false)
+ {
+ EnableImages = true
+ });
}
- private async Task AddToPlaylistInternal(string playlistId, IEnumerable<string> itemIds, User user)
+ private async Task AddToPlaylistInternal(string playlistId, IEnumerable<string> itemIds, User user, DtoOptions options)
{
var playlist = _libraryManager.GetItemById(playlistId) as Playlist;
@@ -185,7 +192,7 @@ namespace Emby.Server.Implementations.Playlists
var list = new List<LinkedChild>();
- var items = (await GetPlaylistItems(itemIds, playlist.MediaType, user).ConfigureAwait(false))
+ var items = (await GetPlaylistItems(itemIds, playlist.MediaType, user, options).ConfigureAwait(false))
.Where(i => i.SupportsAddingToPlaylist)
.ToList();
diff --git a/Emby.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs b/Emby.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs
index d1c70ba1d..22d54831e 100644
--- a/Emby.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs
+++ b/Emby.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs
@@ -11,6 +11,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Entities;
@@ -85,7 +86,9 @@ namespace Emby.Server.Implementations.ScheduledTasks
{
MediaTypes = new[] { MediaType.Video },
IsFolder = false,
- Recursive = true
+ Recursive = true,
+ DtoOptions = new DtoOptions(false)
+
})
.OfType<Video>()
.ToList();
diff --git a/Emby.Server.Implementations/Session/SessionManager.cs b/Emby.Server.Implementations/Session/SessionManager.cs
index de00cf239..7031ad770 100644
--- a/Emby.Server.Implementations/Session/SessionManager.cs
+++ b/Emby.Server.Implementations/Session/SessionManager.cs
@@ -1022,7 +1022,10 @@ namespace Emby.Server.Implementations.Session
var series = episode.Series;
if (series != null)
{
- var episodes = series.GetEpisodes(user)
+ var episodes = series.GetEpisodes(user, new DtoOptions(false)
+ {
+ EnableImages = false
+ })
.Where(i => !i.IsVirtualItem)
.SkipWhile(i => i.Id != episode.Id)
.ToList();
@@ -1065,7 +1068,11 @@ namespace Emby.Server.Implementations.Session
var items = byName.GetTaggedItems(new InternalItemsQuery(user)
{
IsFolder = false,
- Recursive = true
+ Recursive = true,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
});
return FilterToSingleMediaType(items)
@@ -1080,7 +1087,11 @@ namespace Emby.Server.Implementations.Session
var itemsResult = await folder.GetItems(new InternalItemsQuery(user)
{
Recursive = true,
- IsFolder = false
+ IsFolder = false,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
}).ConfigureAwait(false);
@@ -1111,7 +1122,7 @@ namespace Emby.Server.Implementations.Session
return new List<BaseItem>();
}
- return _musicManager.GetInstantMixFromItem(item, user);
+ return _musicManager.GetInstantMixFromItem(item, user, new DtoOptions(false) { EnableImages = false });
}
public Task SendBrowseCommand(string controllingSessionId, string sessionId, BrowseRequest command, CancellationToken cancellationToken)
diff --git a/Emby.Server.Implementations/TV/SeriesPostScanTask.cs b/Emby.Server.Implementations/TV/SeriesPostScanTask.cs
index 3d93561f1..23b6a3cb5 100644
--- a/Emby.Server.Implementations/TV/SeriesPostScanTask.cs
+++ b/Emby.Server.Implementations/TV/SeriesPostScanTask.cs
@@ -4,6 +4,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
@@ -58,7 +59,8 @@ namespace Emby.Server.Implementations.TV
{
IncludeItemTypes = new[] { typeof(Series).Name },
Recursive = true,
- GroupByPresentationUniqueKey = false
+ GroupByPresentationUniqueKey = false,
+ DtoOptions = new DtoOptions(true)
}).Cast<Series>().ToList();
@@ -188,7 +190,8 @@ namespace Emby.Server.Implementations.TV
{
IncludeItemTypes = new[] { typeof(Series).Name },
Recursive = true,
- GroupByPresentationUniqueKey = false
+ GroupByPresentationUniqueKey = false,
+ DtoOptions = new DtoOptions(true)
}).Cast<Series>().ToList();
diff --git a/Emby.Server.Implementations/TV/TVSeriesManager.cs b/Emby.Server.Implementations/TV/TVSeriesManager.cs
index b5e64bc23..255c93b5f 100644
--- a/Emby.Server.Implementations/TV/TVSeriesManager.cs
+++ b/Emby.Server.Implementations/TV/TVSeriesManager.cs
@@ -8,6 +8,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Dto;
namespace Emby.Server.Implementations.TV
{
@@ -26,7 +27,7 @@ namespace Emby.Server.Implementations.TV
_config = config;
}
- public QueryResult<BaseItem> GetNextUp(NextUpQuery request)
+ public QueryResult<BaseItem> GetNextUp(NextUpQuery request, DtoOptions dtoOptions)
{
var user = _userManager.GetUserById(request.UserId);
@@ -75,12 +76,12 @@ namespace Emby.Server.Implementations.TV
}).Cast<Series>().Select(GetUniqueSeriesKey);
// Avoid implicitly captured closure
- var episodes = GetNextUpEpisodes(request, user, items);
+ var episodes = GetNextUpEpisodes(request, user, items, dtoOptions);
return GetResult(episodes, request);
}
- public QueryResult<BaseItem> GetNextUp(NextUpQuery request, List<Folder> parentsFolders)
+ public QueryResult<BaseItem> GetNextUp(NextUpQuery request, List<Folder> parentsFolders, DtoOptions dtoOptions)
{
var user = _userManager.GetUserById(request.UserId);
@@ -126,18 +127,18 @@ namespace Emby.Server.Implementations.TV
}, parentsFolders.Cast<BaseItem>().ToList()).Cast<Series>().Select(GetUniqueSeriesKey);
// Avoid implicitly captured closure
- var episodes = GetNextUpEpisodes(request, user, items);
+ var episodes = GetNextUpEpisodes(request, user, items, dtoOptions);
return GetResult(episodes, request);
}
- public IEnumerable<Episode> GetNextUpEpisodes(NextUpQuery request, User user, IEnumerable<string> seriesKeys)
+ public IEnumerable<Episode> GetNextUpEpisodes(NextUpQuery request, User user, IEnumerable<string> seriesKeys, DtoOptions dtoOptions)
{
// Avoid implicitly captured closure
var currentUser = user;
var allNextUp = seriesKeys
- .Select(i => GetNextUp(i, currentUser));
+ .Select(i => GetNextUp(i, currentUser, dtoOptions));
//allNextUp = allNextUp.OrderByDescending(i => i.Item1);
@@ -175,7 +176,7 @@ namespace Emby.Server.Implementations.TV
/// Gets the next up.
/// </summary>
/// <returns>Task{Episode}.</returns>
- private Tuple<DateTime, Func<Episode>> GetNextUp(string seriesKey, User user)
+ private Tuple<DateTime, Func<Episode>> GetNextUp(string seriesKey, User user, DtoOptions dtoOptions)
{
var enableSeriesPresentationKey = _config.Configuration.EnableSeriesPresentationUniqueKey;
@@ -213,7 +214,8 @@ namespace Emby.Server.Implementations.TV
IsPlayed = false,
IsVirtualItem = false,
ParentIndexNumberNotEquals = 0,
- MinSortName = lastWatchedEpisode == null ? null : lastWatchedEpisode.SortName
+ MinSortName = lastWatchedEpisode == null ? null : lastWatchedEpisode.SortName,
+ DtoOptions = dtoOptions
}).Cast<Episode>().FirstOrDefault();
};
diff --git a/Emby.Server.Implementations/UserViews/CollectionFolderImageProvider.cs b/Emby.Server.Implementations/UserViews/CollectionFolderImageProvider.cs
index 7d3a118c0..376696536 100644
--- a/Emby.Server.Implementations/UserViews/CollectionFolderImageProvider.cs
+++ b/Emby.Server.Implementations/UserViews/CollectionFolderImageProvider.cs
@@ -14,6 +14,7 @@ using Emby.Server.Implementations.Images;
using MediaBrowser.Common.IO;
using MediaBrowser.Model.IO;
using MediaBrowser.Controller.Collections;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
@@ -46,7 +47,8 @@ namespace Emby.Server.Implementations.UserViews
{
CollapseBoxSetItems = false,
Recursive = recursive,
- ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Playlist" }
+ ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Playlist" },
+ DtoOptions = new DtoOptions(false)
}).ConfigureAwait(false);
@@ -144,7 +146,8 @@ namespace Emby.Server.Implementations.UserViews
Recursive = recursive,
IncludeItemTypes = new[] { typeof(BoxSet).Name },
Limit = 20,
- SortBy = new[] { ItemSortBy.Random }
+ SortBy = new[] { ItemSortBy.Random },
+ DtoOptions = new DtoOptions(false)
});
return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary) || i.HasImage(ImageType.Thumb)).ToList(), 8);
diff --git a/Emby.Server.Implementations/UserViews/DynamicImageProvider.cs b/Emby.Server.Implementations/UserViews/DynamicImageProvider.cs
index b0fb954e2..06f7d73e5 100644
--- a/Emby.Server.Implementations/UserViews/DynamicImageProvider.cs
+++ b/Emby.Server.Implementations/UserViews/DynamicImageProvider.cs
@@ -12,6 +12,7 @@ using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Emby.Server.Implementations.Images;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.IO;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.Extensions;
@@ -58,7 +59,9 @@ namespace Emby.Server.Implementations.UserViews
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
ImageTypes = new[] { ImageType.Primary },
Limit = 30,
- IsMovie = true
+ IsMovie = true,
+ DtoOptions = new DtoOptions(false)
+
}).ToList();
return GetFinalItems(programs).ToList();
@@ -69,7 +72,8 @@ namespace Emby.Server.Implementations.UserViews
{
var userItemsResult = await view.GetItems(new InternalItemsQuery
{
- CollapseBoxSetItems = false
+ CollapseBoxSetItems = false,
+ DtoOptions = new DtoOptions(false)
});
return userItemsResult.Items.ToList();
@@ -84,6 +88,7 @@ namespace Emby.Server.Implementations.UserViews
CollapseBoxSetItems = false,
Recursive = recursive,
ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Person" },
+ DtoOptions = new DtoOptions(false)
}).ConfigureAwait(false);
diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs
index a802e56af..1a57ff62d 100644
--- a/MediaBrowser.Api/BaseApiService.cs
+++ b/MediaBrowser.Api/BaseApiService.cs
@@ -151,16 +151,6 @@ namespace MediaBrowser.Api
options.Fields.Add(Model.Querying.ItemFields.ChildCount);
}
- if (client.IndexOf("web", StringComparison.OrdinalIgnoreCase) == -1 &&
-
- // covers both emby mobile and emby for android mobile
- client.IndexOf("mobile", StringComparison.OrdinalIgnoreCase) == -1 &&
- client.IndexOf("ios", StringComparison.OrdinalIgnoreCase) == -1 &&
- client.IndexOf("theater", StringComparison.OrdinalIgnoreCase) == -1)
- {
- options.Fields.Add(Model.Querying.ItemFields.ChildCount);
- }
-
var hasDtoOptions = request as IHasDtoOptions;
if (hasDtoOptions != null)
{
diff --git a/MediaBrowser.Api/GamesService.cs b/MediaBrowser.Api/GamesService.cs
index a9394b52e..2d161ccfd 100644
--- a/MediaBrowser.Api/GamesService.cs
+++ b/MediaBrowser.Api/GamesService.cs
@@ -110,7 +110,11 @@ namespace MediaBrowser.Api
var user = request.UserId == null ? null : _userManager.GetUserById(request.UserId);
var query = new InternalItemsQuery(user)
{
- IncludeItemTypes = new[] { typeof(GameSystem).Name }
+ IncludeItemTypes = new[] { typeof(GameSystem).Name },
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
};
var gameSystems = _libraryManager.GetItemList(query)
.Cast<GameSystem>()
@@ -130,7 +134,11 @@ namespace MediaBrowser.Api
var user = request.UserId == null ? null : _userManager.GetUserById(request.UserId);
var query = new InternalItemsQuery(user)
{
- IncludeItemTypes = new[] { typeof(Game).Name }
+ IncludeItemTypes = new[] { typeof(Game).Name },
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
};
var games = _libraryManager.GetItemList(query)
.Cast<Game>()
@@ -167,7 +175,11 @@ namespace MediaBrowser.Api
system.GetRecursiveChildren(i => i is Game) :
system.GetRecursiveChildren(user, new InternalItemsQuery(user)
{
- IncludeItemTypes = new[] { typeof(Game).Name }
+ IncludeItemTypes = new[] { typeof(Game).Name },
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
});
var games = items.Cast<Game>().ToList();
diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs
index 9f144c8e4..cbbaa82b8 100644
--- a/MediaBrowser.Api/Images/ImageService.cs
+++ b/MediaBrowser.Api/Images/ImageService.cs
@@ -617,6 +617,8 @@ namespace MediaBrowser.Api.Images
ImageIndex = request.Index ?? 0,
Image = image,
Item = item,
+ ItemId = item.Id.ToString("N"),
+ ItemType = item.GetType().Name,
MaxHeight = request.MaxHeight,
MaxWidth = request.MaxWidth,
Quality = request.Quality ?? 100,
diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs
index e654cc8f6..31292618d 100644
--- a/MediaBrowser.Api/Library/LibraryService.cs
+++ b/MediaBrowser.Api/Library/LibraryService.cs
@@ -427,7 +427,11 @@ namespace MediaBrowser.Api.Library
{
var series = _libraryManager.GetItemList(new InternalItemsQuery
{
- IncludeItemTypes = new[] { typeof(Series).Name }
+ IncludeItemTypes = new[] { typeof(Series).Name },
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
}).Where(i => string.Equals(request.TvdbId, i.GetProviderId(MetadataProviders.Tvdb), StringComparison.OrdinalIgnoreCase)).ToArray();
@@ -448,7 +452,11 @@ namespace MediaBrowser.Api.Library
{
var movies = _libraryManager.GetItemList(new InternalItemsQuery
{
- IncludeItemTypes = new[] { typeof(Movie).Name }
+ IncludeItemTypes = new[] { typeof(Movie).Name },
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
}).ToArray();
@@ -668,7 +676,11 @@ namespace MediaBrowser.Api.Library
Recursive = true,
IsVirtualItem = false,
SourceTypes = new[] { SourceType.Library },
- IsFavorite = request.IsFavorite
+ IsFavorite = request.IsFavorite,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
};
return _libraryManager.GetItemsResult(query).TotalRecordCount;
@@ -898,7 +910,11 @@ namespace MediaBrowser.Api.Library
var query = new InternalItemsQuery(user)
{
IncludeItemTypes = includeTypes,
- Recursive = true
+ Recursive = true,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
};
var items = _libraryManager.GetItemList(query);
diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs
index 9fcdb4be5..3494754d0 100644
--- a/MediaBrowser.Api/LiveTv/LiveTvService.cs
+++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs
@@ -889,6 +889,8 @@ namespace MediaBrowser.Api.LiveTv
public async Task<object> Get(GetChannels request)
{
+ var options = GetDtoOptions(_authContext, request);
+
var channelResult = await _liveTvManager.GetInternalChannels(new LiveTvChannelQuery
{
ChannelType = request.Type,
@@ -908,11 +910,10 @@ namespace MediaBrowser.Api.LiveTv
SortOrder = request.SortOrder ?? SortOrder.Ascending,
AddCurrentProgram = request.AddCurrentProgram
- }, CancellationToken.None).ConfigureAwait(false);
+ }, options, CancellationToken.None).ConfigureAwait(false);
var user = string.IsNullOrEmpty(request.UserId) ? null : _userManager.GetUserById(request.UserId);
- var options = GetDtoOptions(_authContext, request);
RemoveFields(options);
options.AddCurrentProgram = request.AddCurrentProgram;
diff --git a/MediaBrowser.Api/Movies/MoviesService.cs b/MediaBrowser.Api/Movies/MoviesService.cs
index b5c6f52fc..e20fa2cca 100644
--- a/MediaBrowser.Api/Movies/MoviesService.cs
+++ b/MediaBrowser.Api/Movies/MoviesService.cs
@@ -36,7 +36,7 @@ namespace MediaBrowser.Api.Movies
}
[Route("/Movies/Recommendations", "GET", Summary = "Gets movie recommendations")]
- public class GetMovieRecommendations : IReturn<RecommendationDto[]>, IHasItemFields
+ public class GetMovieRecommendations : IReturn<RecommendationDto[]>, IHasDtoOptions
{
[ApiMember(Name = "CategoryLimit", Description = "The max number of categories to return", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
public int CategoryLimit { get; set; }
@@ -58,6 +58,18 @@ namespace MediaBrowser.Api.Movies
[ApiMember(Name = "ParentId", Description = "Specify this to localize the search to a specific item or folder. Omit to use the root", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string ParentId { get; set; }
+ [ApiMember(Name = "EnableImages", Description = "Optional, include image information in output", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")]
+ public bool? EnableImages { get; set; }
+
+ [ApiMember(Name = "EnableUserData", Description = "Optional, include user data", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")]
+ public bool? EnableUserData { get; set; }
+
+ [ApiMember(Name = "ImageTypeLimit", Description = "Optional, the max number of images to return, per image type", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
+ public int? ImageTypeLimit { get; set; }
+
+ [ApiMember(Name = "EnableImageTypes", Description = "Optional. The image types to include in the output.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public string EnableImageTypes { get; set; }
+
public GetMovieRecommendations()
{
CategoryLimit = 5;
@@ -115,14 +127,12 @@ namespace MediaBrowser.Api.Movies
return ToOptimizedSerializedResultUsingCache(result);
}
- public async Task<object> Get(GetMovieRecommendations request)
+ public object Get(GetMovieRecommendations request)
{
var user = _userManager.GetUserById(request.UserId);
var dtoOptions = GetDtoOptions(_authContext, request);
- dtoOptions.Fields = request.GetItemFields().ToList();
-
var result = GetRecommendationCategories(user, request.ParentId, request.CategoryLimit, request.ItemLimit, dtoOptions);
return ToOptimizedResult(result);
diff --git a/MediaBrowser.Api/Music/InstantMixService.cs b/MediaBrowser.Api/Music/InstantMixService.cs
index d735dd7cd..797edd940 100644
--- a/MediaBrowser.Api/Music/InstantMixService.cs
+++ b/MediaBrowser.Api/Music/InstantMixService.cs
@@ -85,9 +85,11 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId);
- var items = _musicManager.GetInstantMixFromItem(item, user);
+ var dtoOptions = GetDtoOptions(_authContext, request);
+
+ var items = _musicManager.GetInstantMixFromItem(item, user, dtoOptions);
- return GetResult(items, user, request);
+ return GetResult(items, user, request, dtoOptions);
}
public Task<object> Get(GetInstantMixFromArtistId request)
@@ -96,9 +98,11 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId);
- var items = _musicManager.GetInstantMixFromItem(item, user);
+ var dtoOptions = GetDtoOptions(_authContext, request);
- return GetResult(items, user, request);
+ var items = _musicManager.GetInstantMixFromItem(item, user, dtoOptions);
+
+ return GetResult(items, user, request, dtoOptions);
}
public Task<object> Get(GetInstantMixFromMusicGenreId request)
@@ -107,9 +111,11 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId);
- var items = _musicManager.GetInstantMixFromItem(item, user);
+ var dtoOptions = GetDtoOptions(_authContext, request);
- return GetResult(items, user, request);
+ var items = _musicManager.GetInstantMixFromItem(item, user, dtoOptions);
+
+ return GetResult(items, user, request, dtoOptions);
}
public Task<object> Get(GetInstantMixFromSong request)
@@ -118,9 +124,11 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId);
- var items = _musicManager.GetInstantMixFromItem(item, user);
+ var dtoOptions = GetDtoOptions(_authContext, request);
+
+ var items = _musicManager.GetInstantMixFromItem(item, user, dtoOptions);
- return GetResult(items, user, request);
+ return GetResult(items, user, request, dtoOptions);
}
public Task<object> Get(GetInstantMixFromAlbum request)
@@ -129,9 +137,11 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId);
- var items = _musicManager.GetInstantMixFromItem(album, user);
+ var dtoOptions = GetDtoOptions(_authContext, request);
+
+ var items = _musicManager.GetInstantMixFromItem(album, user, dtoOptions);
- return GetResult(items, user, request);
+ return GetResult(items, user, request, dtoOptions);
}
public Task<object> Get(GetInstantMixFromPlaylist request)
@@ -140,18 +150,22 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId);
- var items = _musicManager.GetInstantMixFromItem(playlist, user);
+ var dtoOptions = GetDtoOptions(_authContext, request);
+
+ var items = _musicManager.GetInstantMixFromItem(playlist, user, dtoOptions);
- return GetResult(items, user, request);
+ return GetResult(items, user, request, dtoOptions);
}
public Task<object> Get(GetInstantMixFromMusicGenre request)
{
var user = _userManager.GetUserById(request.UserId);
- var items = _musicManager.GetInstantMixFromGenres(new[] { request.Name }, user);
+ var dtoOptions = GetDtoOptions(_authContext, request);
+
+ var items = _musicManager.GetInstantMixFromGenres(new[] { request.Name }, user, dtoOptions);
- return GetResult(items, user, request);
+ return GetResult(items, user, request, dtoOptions);
}
public Task<object> Get(GetInstantMixFromArtist request)
@@ -159,12 +173,14 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId);
var artist = _libraryManager.GetArtist(request.Name);
- var items = _musicManager.GetInstantMixFromArtist(artist, user);
+ var dtoOptions = GetDtoOptions(_authContext, request);
+
+ var items = _musicManager.GetInstantMixFromArtist(artist, user, dtoOptions);
- return GetResult(items, user, request);
+ return GetResult(items, user, request, dtoOptions);
}
- private async Task<object> GetResult(IEnumerable<Audio> items, User user, BaseGetSimilarItems request)
+ private async Task<object> GetResult(IEnumerable<Audio> items, User user, BaseGetSimilarItems request, DtoOptions dtoOptions)
{
var list = items.ToList();
@@ -173,8 +189,6 @@ namespace MediaBrowser.Api.Music
TotalRecordCount = list.Count
};
- var dtoOptions = GetDtoOptions(_authContext, request);
-
result.Items = (await _dtoService.GetBaseItemDtos(list.Take(request.Limit ?? list.Count), dtoOptions, user).ConfigureAwait(false)).ToArray();
return ToOptimizedResult(result);
diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs
index 4b279031e..02114399a 100644
--- a/MediaBrowser.Api/TvShowsService.cs
+++ b/MediaBrowser.Api/TvShowsService.cs
@@ -374,6 +374,8 @@ namespace MediaBrowser.Api
/// <returns>System.Object.</returns>
public async Task<object> Get(GetNextUpEpisodes request)
{
+ var options = GetDtoOptions(_authContext, request);
+
var result = _tvSeriesManager.GetNextUp(new NextUpQuery
{
Limit = request.Limit,
@@ -382,12 +384,10 @@ namespace MediaBrowser.Api
StartIndex = request.StartIndex,
UserId = request.UserId,
EnableTotalRecordCount = request.EnableTotalRecordCount
- });
+ }, options);
var user = _userManager.GetUserById(request.UserId);
- var options = GetDtoOptions(_authContext, request);
-
var returnItems = (await _dtoService.GetBaseItemDtos(result.Items, options, user).ConfigureAwait(false)).ToArray();
return ToOptimizedSerializedResultUsingCache(new ItemsResult
@@ -469,6 +469,8 @@ namespace MediaBrowser.Api
IEnumerable<Episode> episodes;
+ var dtoOptions = GetDtoOptions(_authContext, request);
+
if (!string.IsNullOrWhiteSpace(request.SeasonId))
{
var season = _libraryManager.GetItemById(new Guid(request.SeasonId)) as Season;
@@ -478,7 +480,7 @@ namespace MediaBrowser.Api
throw new ResourceNotFoundException("No season exists with Id " + request.SeasonId);
}
- episodes = season.GetEpisodes(user);
+ episodes = season.GetEpisodes(user, dtoOptions);
}
else if (request.Season.HasValue)
{
@@ -489,7 +491,7 @@ namespace MediaBrowser.Api
throw new ResourceNotFoundException("Series not found");
}
- var season = series.GetSeasons(user).FirstOrDefault(i => i.IndexNumber == request.Season.Value);
+ var season = series.GetSeasons(user, dtoOptions).FirstOrDefault(i => i.IndexNumber == request.Season.Value);
if (season == null)
{
@@ -497,7 +499,7 @@ namespace MediaBrowser.Api
}
else
{
- episodes = season.GetEpisodes(user);
+ episodes = season.GetEpisodes(user, dtoOptions);
}
}
else
@@ -509,7 +511,7 @@ namespace MediaBrowser.Api
throw new ResourceNotFoundException("Series not found");
}
- episodes = series.GetEpisodes(user);
+ episodes = series.GetEpisodes(user, dtoOptions);
}
// Filter after the fact in case the ui doesn't want them
@@ -543,8 +545,6 @@ namespace MediaBrowser.Api
var pagedItems = ApplyPaging(returnList, request.StartIndex, request.Limit);
- var dtoOptions = GetDtoOptions(_authContext, request);
-
var dtos = (await _dtoService.GetBaseItemDtos(pagedItems, dtoOptions, user).ConfigureAwait(false))
.ToArray();
diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
index c1cc1555d..daef97915 100644
--- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
+++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
@@ -129,7 +129,8 @@ namespace MediaBrowser.Api.UserLibrary
PersonIds = request.GetPersonIds(),
PersonTypes = request.GetPersonTypes(),
Years = request.GetYears(),
- MinCommunityRating = request.MinCommunityRating
+ MinCommunityRating = request.MinCommunityRating,
+ DtoOptions = dtoOptions
};
if (!string.IsNullOrWhiteSpace(request.ParentId))
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index f8580d328..da5c5c763 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -330,7 +330,7 @@ namespace MediaBrowser.Api.UserLibrary
{
var requestedLocationTypes =
request.LocationTypes.Split(',')
- .Select(d => (LocationType) Enum.Parse(typeof (LocationType), d, true))
+ .Select(d => (LocationType)Enum.Parse(typeof(LocationType), d, true))
.ToList();
if (requestedLocationTypes.Count > 0 && requestedLocationTypes.Count < 4)
@@ -381,15 +381,15 @@ namespace MediaBrowser.Api.UserLibrary
// Albums
if (!string.IsNullOrEmpty(request.Albums))
{
- query.AlbumIds = request.Albums.Split('|').Select(i =>
+ query.AlbumIds = request.Albums.Split('|').SelectMany(i =>
{
- return _libraryManager.GetItemList(new InternalItemsQuery
+ return _libraryManager.GetItemIds(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(MusicAlbum).Name },
Name = i,
Limit = 1
- }).Select(album => album.Id.ToString("N")).FirstOrDefault();
+ }).Select(albumId => albumId.ToString("N"));
}).ToArray();
}
diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
index b1f196f15..a4e1ec330 100644
--- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
+++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
@@ -308,6 +308,8 @@ namespace MediaBrowser.Api.UserLibrary
}
}
+ var dtoOptions = GetDtoOptions(_authContext, request);
+
var list = _userViewManager.GetLatestItems(new LatestItemsQuery
{
GroupItems = request.GroupItems,
@@ -315,10 +317,8 @@ namespace MediaBrowser.Api.UserLibrary
IsPlayed = request.IsPlayed,
Limit = request.Limit,
ParentId = request.ParentId,
- UserId = request.UserId
- });
-
- var dtoOptions = GetDtoOptions(_authContext, request);
+ UserId = request.UserId,
+ }, dtoOptions);
var dtos = list.Select(i =>
{
@@ -360,7 +360,7 @@ namespace MediaBrowser.Api.UserLibrary
var currentUser = user;
var dtos = series
- .GetEpisodes(user)
+ .GetEpisodes(user, dtoOptions)
.Where(i => i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0)
.OrderBy(i =>
{
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/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..1fe7dd3f6 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -22,6 +22,7 @@ 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,21 @@ namespace MediaBrowser.Controller.Entities
}
}
+ private string CreateSortNameFromCustomValue(string value)
+ {
+ return string.IsNullOrWhiteSpace(value) ? null : 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;
@@ -1303,7 +1349,6 @@ namespace MediaBrowser.Controller.Entities
public void AfterMetadataRefresh()
{
- _sortName = null;
}
/// <summary>
@@ -2187,8 +2232,6 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public virtual bool BeforeMetadataRefresh()
{
- _sortName = null;
-
var hasChanges = false;
if (string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Path))
@@ -2210,7 +2253,7 @@ namespace MediaBrowser.Controller.Entities
return path;
}
- public virtual Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> itemFields)
+ public virtual Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields)
{
if (RunTimeTicks.HasValue)
{
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index edac27f99..b18d47a65 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -12,6 +12,7 @@ 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;
@@ -672,7 +673,8 @@ namespace MediaBrowser.Controller.Entities
return ItemRepository.GetItemList(new InternalItemsQuery
{
ParentId = Id,
- GroupByPresentationUniqueKey = false
+ GroupByPresentationUniqueKey = false,
+ DtoOptions = new DtoOptions(true)
});
}
@@ -690,7 +692,11 @@ namespace MediaBrowser.Controller.Entities
{
Recursive = false,
Limit = 0,
- ParentId = Id
+ ParentId = Id,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
}).Result;
@@ -705,7 +711,11 @@ namespace MediaBrowser.Controller.Entities
IsFolder = false,
IsVirtualItem = false,
EnableTotalRecordCount = true,
- Limit = 0
+ Limit = 0,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
}).Result.TotalRecordCount;
}
@@ -1481,7 +1491,7 @@ namespace MediaBrowser.Controller.Entities
}
}
- public override async Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> itemFields)
+ public override async Task FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, List<ItemFields> fields)
{
if (!SupportsUserDataFromChildren)
{
@@ -1490,7 +1500,7 @@ namespace MediaBrowser.Controller.Entities
if (itemDto != null)
{
- if (itemFields.Contains(ItemFields.RecursiveItemCount))
+ if (fields.Contains(ItemFields.RecursiveItemCount))
{
itemDto.RecursiveItemCount = GetRecursiveChildCount(user);
}
@@ -1505,7 +1515,11 @@ namespace MediaBrowser.Controller.Entities
IsVirtualItem = false,
EnableTotalRecordCount = true,
Limit = 0,
- IsPlayed = false
+ IsPlayed = false,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
}).ConfigureAwait(false);
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/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..f029d36fd 100644
--- a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
+++ b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
@@ -166,26 +166,31 @@ namespace MediaBrowser.Controller.Entities
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.Keywords:
case ItemFields.DisplayMediaType:
- //case ItemFields.ServiceName:
- case ItemFields.Genres:
- case ItemFields.Studios:
+ case ItemFields.VoteCount:
+ case ItemFields.CustomRating:
+ case ItemFields.ProductionLocations:
case ItemFields.Settings:
case ItemFields.OriginalTitle:
+ case ItemFields.Taglines:
+ case ItemFields.SortName:
+ case ItemFields.Studios:
case ItemFields.Tags:
+ case ItemFields.ThemeSongIds:
+ case ItemFields.ThemeVideoIds:
+ case ItemFields.DateCreated:
+ case ItemFields.Overview:
+ case ItemFields.Genres:
case ItemFields.DateLastMediaAdded:
- return fields.Count == 0 || fields.Contains(name);
+ case ItemFields.ExternalEtag:
+ case ItemFields.PresentationUniqueKey:
+ case ItemFields.InheritedParentalRatingValue:
+ case ItemFields.ExternalSeriesId:
+ return fields.Contains(name);
+ case ItemFields.ServiceName:
+ return true;
default:
return true;
}
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/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs
index ed04b5ddc..af1b6d53c 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;
@@ -160,7 +161,7 @@ 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);
@@ -170,21 +171,19 @@ namespace MediaBrowser.Controller.Entities.TV
/// <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()
@@ -194,7 +193,7 @@ namespace MediaBrowser.Controller.Entities.TV
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..f75a78c97 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;
@@ -250,12 +251,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);
@@ -321,7 +325,7 @@ namespace MediaBrowser.Controller.Entities.TV
return Task.FromResult(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);
@@ -331,7 +335,8 @@ namespace MediaBrowser.Controller.Entities.TV
AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
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 +357,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,7 +434,7 @@ 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;
@@ -445,7 +450,8 @@ namespace MediaBrowser.Controller.Entities.TV
AncestorWithPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? null : seriesKey,
SeriesPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? seriesKey : null,
IncludeItemTypes = new[] { typeof(Episode).Name },
- SortBy = new[] { ItemSortBy.SortName }
+ SortBy = new[] { ItemSortBy.SortName },
+ DtoOptions = options
};
if (user != null)
{
@@ -466,14 +472,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/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs
index 99601b290..ac843d5fb 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
{
@@ -75,7 +76,8 @@ namespace MediaBrowser.Controller.Entities
var result = GetItems(new InternalItemsQuery
{
User = user,
- EnableTotalRecordCount = false
+ EnableTotalRecordCount = false,
+ DtoOptions = new DtoOptions(true)
}).Result;
@@ -100,7 +102,9 @@ namespace MediaBrowser.Controller.Entities
Recursive = true,
EnableTotalRecordCount = false,
- ForceDirect = true
+ ForceDirect = true,
+
+ DtoOptions = query.DtoOptions
}).Result;
diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs
index 8da069f62..801d1d783 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);
}
@@ -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[] { };
@@ -662,7 +663,7 @@ namespace MediaBrowser.Controller.Entities
StartIndex = query.StartIndex,
UserId = query.User.Id.ToString("N")
- }, parentFolders);
+ }, parentFolders, query.DtoOptions);
return result;
}
@@ -1783,7 +1784,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/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/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/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/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/Playlists/Playlist.cs b/MediaBrowser.Controller/Playlists/Playlist.cs
index fb1410f4a..73c3b9a25 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)).Result;
}
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).Result;
if (query != null)
{
@@ -106,12 +107,12 @@ namespace MediaBrowser.Controller.Playlists
return GetLinkedChildrenInfos();
}
- private Task<IEnumerable<BaseItem>> GetPlayableItems(User user)
+ private Task<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 async Task<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 = await GetPlaylistItems(item, user, playlistMediaType, options).ConfigureAwait(false);
list.AddRange(playlistItems);
}
return list;
}
- private static async Task<IEnumerable<BaseItem>> GetPlaylistItems(BaseItem item, User user, string mediaType)
+ private static async Task<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,7 +169,8 @@ 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);
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);
}
}
diff --git a/MediaBrowser.Model/Querying/ItemFields.cs b/MediaBrowser.Model/Querying/ItemFields.cs
index ab560875e..db35090b9 100644
--- a/MediaBrowser.Model/Querying/ItemFields.cs
+++ b/MediaBrowser.Model/Querying/ItemFields.cs
@@ -154,11 +154,6 @@
RecursiveItemCount,
/// <summary>
- /// The season name
- /// </summary>
- SeasonName,
-
- /// <summary>
/// The settings
/// </summary>
Settings,
@@ -236,6 +231,10 @@
/// </summary>
ServiceName,
ThemeSongIds,
- ThemeVideoIds
+ ThemeVideoIds,
+ ExternalEtag,
+ PresentationUniqueKey,
+ InheritedParentalRatingValue,
+ ExternalSeriesId
}
}
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index 7ff018c7b..131bf50c3 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -21,6 +21,7 @@ using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Model.IO;
using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization;
@@ -958,7 +959,11 @@ namespace MediaBrowser.Providers.Manager
.GetItemList(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(MusicAlbum).Name },
- ArtistIds = new[] { item.Id.ToString("N") }
+ ArtistIds = new[] { item.Id.ToString("N") },
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
})
.OfType<MusicAlbum>()
.ToList();
diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
index 0e842cdb4..200615a5d 100644
--- a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
+++ b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
@@ -14,6 +14,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.IO;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Tasks;
@@ -82,7 +83,8 @@ namespace MediaBrowser.Providers.MediaInfo
{
MediaTypes = new string[] { MediaType.Video },
IsVirtualItem = false,
- IncludeItemTypes = types.ToArray()
+ IncludeItemTypes = types.ToArray(),
+ DtoOptions = new DtoOptions(true)
}).OfType<Video>()
.Where(i => i.LocationType != LocationType.Remote)
diff --git a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs
index dd3bfb4f8..efbf46cd6 100644
--- a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs
+++ b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs
@@ -15,6 +15,7 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Xml;
@@ -65,7 +66,11 @@ namespace MediaBrowser.Providers.People
var seriesWithPerson = _libraryManager.GetItemList(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(Series).Name },
- PersonIds = new[] { item.Id.ToString("N") }
+ PersonIds = new[] { item.Id.ToString("N") },
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
}).Cast<Series>()
.Where(i => TvdbSeriesProvider.IsValidSeries(i.ProviderIds))
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs
index e8ed05225..5fccb9e3c 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs
@@ -15,6 +15,7 @@ using System.Threading;
using System.Threading.Tasks;
using System.Xml;
using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.IO;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
@@ -114,7 +115,11 @@ namespace MediaBrowser.Providers.TV
{
IncludeItemTypes = new[] { typeof(Series).Name },
Recursive = true,
- GroupByPresentationUniqueKey = false
+ GroupByPresentationUniqueKey = false,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
}).Cast<Series>()
.ToList();
@@ -325,7 +330,11 @@ namespace MediaBrowser.Providers.TV
{
IncludeItemTypes = new[] { typeof(Series).Name },
Recursive = true,
- GroupByPresentationUniqueKey = false
+ GroupByPresentationUniqueKey = false,
+ DtoOptions = new DtoOptions(false)
+ {
+ EnableImages = false
+ }
}).Cast<Series>();
diff --git a/MediaBrowser.XbmcMetadata/EntryPoint.cs b/MediaBrowser.XbmcMetadata/EntryPoint.cs
index cd18e5670..188fc8504 100644
--- a/MediaBrowser.XbmcMetadata/EntryPoint.cs
+++ b/MediaBrowser.XbmcMetadata/EntryPoint.cs
@@ -9,6 +9,7 @@ using MediaBrowser.XbmcMetadata.Configuration;
using MediaBrowser.XbmcMetadata.Savers;
using System;
using System.Linq;
+using MediaBrowser.Controller.Dto;
namespace MediaBrowser.XbmcMetadata
{
@@ -52,7 +53,8 @@ namespace MediaBrowser.XbmcMetadata
var items = _libraryManager.GetItemList(new InternalItemsQuery
{
- PersonIds = new [] { person.Id.ToString("N") }
+ PersonIds = new [] { person.Id.ToString("N") },
+ DtoOptions = new DtoOptions(true)
}).ToList();