update data queries

This commit is contained in:
Luke Pulverenti 2017-05-21 03:25:49 -04:00
parent ead88d3b65
commit da77b05817
62 changed files with 620 additions and 446 deletions

View file

@ -23,6 +23,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml; using System.Xml;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Globalization;
@ -459,10 +460,16 @@ namespace Emby.Dlna.ContentDirectory
IsMissing = false, IsMissing = false,
ExcludeItemTypes = new[] { typeof(Game).Name, typeof(Book).Name }, ExcludeItemTypes = new[] { typeof(Game).Name, typeof(Book).Name },
IsFolder = isFolder, 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) private async Task<QueryResult<ServerItem>> GetUserItems(BaseItem item, StubType? stubType, User user, SortCriteria sort, int? startIndex, int? limit)
{ {
if (item is MusicGenre) if (item is MusicGenre)
@ -513,7 +520,8 @@ namespace Emby.Dlna.ContentDirectory
IsMissing = false, IsMissing = false,
PresetViews = new[] {CollectionType.Movies, CollectionType.TvShows, CollectionType.Music}, PresetViews = new[] {CollectionType.Movies, CollectionType.TvShows, CollectionType.Music},
ExcludeItemTypes = new[] {typeof (Game).Name, typeof (Book).Name}, ExcludeItemTypes = new[] {typeof (Game).Name, typeof (Book).Name},
IsPlaceHolder = false IsPlaceHolder = false,
DtoOptions = GetDtoOptions()
}; };
SetSorting(query, sort, folder.IsPreSorted); SetSorting(query, sort, folder.IsPreSorted);
@ -532,7 +540,8 @@ namespace Emby.Dlna.ContentDirectory
ArtistIds = new[] { item.Id.ToString("N") }, ArtistIds = new[] { item.Id.ToString("N") },
IncludeItemTypes = new[] { typeof(MusicAlbum).Name }, IncludeItemTypes = new[] { typeof(MusicAlbum).Name },
Limit = limit, Limit = limit,
StartIndex = startIndex StartIndex = startIndex,
DtoOptions = GetDtoOptions()
}; };
SetSorting(query, sort, false); SetSorting(query, sort, false);
@ -551,7 +560,8 @@ namespace Emby.Dlna.ContentDirectory
GenreIds = new[] {item.Id.ToString("N")}, GenreIds = new[] {item.Id.ToString("N")},
IncludeItemTypes = new[] {typeof (MusicAlbum).Name}, IncludeItemTypes = new[] {typeof (MusicAlbum).Name},
Limit = limit, Limit = limit,
StartIndex = startIndex StartIndex = startIndex,
DtoOptions = GetDtoOptions()
}; };
SetSorting(query, sort, false); SetSorting(query, sort, false);
@ -595,8 +605,8 @@ namespace Emby.Dlna.ContentDirectory
IncludeItemTypes = new[] { typeof(Movie).Name, typeof(Series).Name, typeof(Trailer).Name }, IncludeItemTypes = new[] { typeof(Movie).Name, typeof(Series).Name, typeof(Trailer).Name },
SortBy = new[] { ItemSortBy.SortName }, SortBy = new[] { ItemSortBy.SortName },
Limit = limit, Limit = limit,
StartIndex = startIndex StartIndex = startIndex,
DtoOptions = GetDtoOptions()
}); });
var serverItems = itemsResult.Items.Select(i => new ServerItem(i)) var serverItems = itemsResult.Items.Select(i => new ServerItem(i))

View file

@ -179,10 +179,15 @@ namespace Emby.Drawing
} }
var originalImage = options.Image; var originalImage = options.Image;
IHasImages item = options.Item;
if (!originalImage.IsLocalFile) 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; var originalImagePath = originalImage.Path;
@ -195,13 +200,18 @@ namespace Emby.Drawing
if (options.Enhancers.Count > 0) if (options.Enhancers.Count > 0)
{ {
if (item == null)
{
item = _libraryManager().GetItemById(options.ItemId);
}
var tuple = await GetEnhancedImage(new ItemImageInfo var tuple = await GetEnhancedImage(new ItemImageInfo
{ {
DateModified = dateModified, DateModified = dateModified,
Type = originalImage.Type, Type = originalImage.Type,
Path = originalImagePath Path = originalImagePath
}, options.Item, options.ImageIndex, options.Enhancers).ConfigureAwait(false); }, item, options.ImageIndex, options.Enhancers).ConfigureAwait(false);
originalImagePath = tuple.Item1; originalImagePath = tuple.Item1;
dateModified = tuple.Item2; 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)); var tmpPath = Path.ChangeExtension(Path.Combine(_appPaths.TempDirectory, Guid.NewGuid().ToString("N")), Path.GetExtension(cacheFilePath));
_fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(tmpPath)); _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)) if (string.Equals(resultPath, originalImagePath, StringComparison.OrdinalIgnoreCase))
{ {

View file

@ -460,12 +460,12 @@ namespace Emby.Server.Implementations.Channels
public IEnumerable<ChannelFeatures> GetAllChannelFeatures() public IEnumerable<ChannelFeatures> GetAllChannelFeatures()
{ {
return _libraryManager.GetItemList(new InternalItemsQuery return _libraryManager.GetItemIds(new InternalItemsQuery
{ {
IncludeItemTypes = new[] { typeof(Channel).Name }, IncludeItemTypes = new[] { typeof(Channel).Name },
SortBy = new[] { ItemSortBy.SortName } SortBy = new[] { ItemSortBy.SortName }
}).Select(i => GetChannelFeatures(i.Id.ToString("N"))); }).Select(i => GetChannelFeatures(i.ToString("N")));
} }
public ChannelFeatures GetChannelFeatures(string id) public ChannelFeatures GetChannelFeatures(string id)

View file

@ -207,8 +207,6 @@ namespace Emby.Server.Implementations.Data
AddColumn(db, "TypedBaseItems", "DateCreated", "DATETIME", existingColumnNames); AddColumn(db, "TypedBaseItems", "DateCreated", "DATETIME", existingColumnNames);
AddColumn(db, "TypedBaseItems", "DateModified", "DATETIME", existingColumnNames); AddColumn(db, "TypedBaseItems", "DateModified", "DATETIME", existingColumnNames);
AddColumn(db, "TypedBaseItems", "ForcedSortName", "Text", existingColumnNames);
AddColumn(db, "TypedBaseItems", "IsSeries", "BIT", existingColumnNames); AddColumn(db, "TypedBaseItems", "IsSeries", "BIT", existingColumnNames);
AddColumn(db, "TypedBaseItems", "IsLive", "BIT", existingColumnNames); AddColumn(db, "TypedBaseItems", "IsLive", "BIT", existingColumnNames);
AddColumn(db, "TypedBaseItems", "IsNews", "BIT", existingColumnNames); AddColumn(db, "TypedBaseItems", "IsNews", "BIT", existingColumnNames);
@ -426,7 +424,7 @@ namespace Emby.Server.Implementations.Data
"OfficialRating", "OfficialRating",
"HomePageUrl", "HomePageUrl",
"DisplayMediaType", "DisplayMediaType",
"ForcedSortName", "SortName",
"RunTimeTicks", "RunTimeTicks",
"VoteCount", "VoteCount",
"DateCreated", "DateCreated",
@ -549,7 +547,6 @@ namespace Emby.Server.Implementations.Data
"DisplayMediaType", "DisplayMediaType",
"DateCreated", "DateCreated",
"DateModified", "DateModified",
"ForcedSortName",
"PreferredMetadataLanguage", "PreferredMetadataLanguage",
"PreferredMetadataCountryCode", "PreferredMetadataCountryCode",
"IsHD", "IsHD",
@ -826,8 +823,6 @@ namespace Emby.Server.Implementations.Data
saveItemStatement.TryBind("@DateCreated", item.DateCreated); saveItemStatement.TryBind("@DateCreated", item.DateCreated);
saveItemStatement.TryBind("@DateModified", item.DateModified); saveItemStatement.TryBind("@DateModified", item.DateModified);
saveItemStatement.TryBind("@ForcedSortName", item.ForcedSortName);
saveItemStatement.TryBind("@PreferredMetadataLanguage", item.PreferredMetadataLanguage); saveItemStatement.TryBind("@PreferredMetadataLanguage", item.PreferredMetadataLanguage);
saveItemStatement.TryBind("@PreferredMetadataCountryCode", item.PreferredMetadataCountryCode); saveItemStatement.TryBind("@PreferredMetadataCountryCode", item.PreferredMetadataCountryCode);
saveItemStatement.TryBind("@IsHD", item.IsHD); saveItemStatement.TryBind("@IsHD", item.IsHD);
@ -1237,7 +1232,7 @@ namespace Emby.Server.Implementations.Data
foreach (var row in statement.ExecuteQuery()) 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) private bool TypeRequiresDeserialization(Type type)
{ {
if (_config.Configuration.SkipDeserializationForBasicTypes) if (_config.Configuration.SkipDeserializationForBasicTypes)
@ -1535,11 +1525,14 @@ namespace Emby.Server.Implementations.Data
} }
index++; 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)) if (!reader.IsDBNull(index))
{ {
@ -1614,7 +1607,7 @@ namespace Emby.Server.Implementations.Data
{ {
if (!reader.IsDBNull(index)) if (!reader.IsDBNull(index))
{ {
item.ForcedSortName = reader.GetString(index); item.SortName = reader.GetString(index);
} }
index++; index++;
} }
@ -1821,29 +1814,41 @@ namespace Emby.Server.Implementations.Data
} }
index++; 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)) if (query.HasField(ItemFields.Taglines))
{ {
@ -2240,12 +2245,16 @@ namespace Emby.Server.Implementations.Data
} }
if (field == ItemFields.SortName) if (field == ItemFields.SortName)
{ {
return new[] { "ForcedSortName" }; return new[] { "SortName" };
} }
if (field == ItemFields.Taglines) if (field == ItemFields.Taglines)
{ {
return new[] { "Tagline" }; return new[] { "Tagline" };
} }
if (field == ItemFields.Tags)
{
return new[] { "Tags", "InheritedTags" };
}
return new[] { field.ToString() }; return new[] { field.ToString() };
} }
@ -4916,7 +4925,9 @@ namespace Emby.Server.Implementations.Data
var columns = _retriveItemColumns.ToList(); var columns = _retriveItemColumns.ToList();
columns.AddRange(itemCountColumns.Select(i => i.Item2).ToArray()); 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); commandText += GetJoinUserDataText(query);
var innerQuery = new InternalItemsQuery(query.User) var innerQuery = new InternalItemsQuery(query.User)
@ -5042,7 +5053,7 @@ namespace Emby.Server.Implementations.Data
foreach (var row in statement.ExecuteQuery()) foreach (var row in statement.ExecuteQuery())
{ {
var item = GetItem(row); var item = GetItem(row, query);
if (item != null) if (item != null)
{ {
var countStartColumn = columns.Count - 1; var countStartColumn = columns.Count - 1;

View file

@ -127,7 +127,11 @@ namespace Emby.Server.Implementations.Dto
{ {
var libraryItems = byName.GetTaggedItems(new InternalItemsQuery(user) var libraryItems = byName.GetTaggedItems(new InternalItemsQuery(user)
{ {
Recursive = true Recursive = true,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}); });
SetItemByNameInfo(item, dto, libraryItems.ToList(), user); SetItemByNameInfo(item, dto, libraryItems.ToList(), user);
@ -177,7 +181,11 @@ namespace Emby.Server.Implementations.Dto
{ {
if (options.Fields.Contains(ItemFields.ItemCounts)) 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); FillSyncInfo(dto, item, options, user, syncDictionary);
@ -189,11 +197,12 @@ namespace Emby.Server.Implementations.Dto
return 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) var items = byName.GetTaggedItems(new InternalItemsQuery(user)
{ {
Recursive = true Recursive = true,
DtoOptions = options
}).ToList(); }).ToList();
@ -595,16 +604,17 @@ namespace Emby.Server.Implementations.Dto
{ {
if (!string.IsNullOrEmpty(item.Album)) if (!string.IsNullOrEmpty(item.Album))
{ {
var parentAlbum = _libraryManager.GetItemList(new InternalItemsQuery var parentAlbumIds = _libraryManager.GetItemIds(new InternalItemsQuery
{ {
IncludeItemTypes = new[] { typeof(MusicAlbum).Name }, 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");
} }
} }

View file

@ -16,6 +16,7 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Emby.Server.Implementations.Library; using Emby.Server.Implementations.Library;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
@ -588,7 +589,8 @@ namespace Emby.Server.Implementations.FileOrganization
var series = _libraryManager.GetItemList(new InternalItemsQuery var series = _libraryManager.GetItemList(new InternalItemsQuery
{ {
IncludeItemTypes = new[] { typeof(Series).Name }, IncludeItemTypes = new[] { typeof(Series).Name },
Recursive = true Recursive = true,
DtoOptions = new DtoOptions(true)
}) })
.Cast<Series>() .Cast<Series>()
.Select(i => NameUtils.GetMatchScore(nameWithoutYear, yearInName, i)) .Select(i => NameUtils.GetMatchScore(nameWithoutYear, yearInName, i))
@ -607,7 +609,8 @@ namespace Emby.Server.Implementations.FileOrganization
{ {
IncludeItemTypes = new[] { typeof(Series).Name }, IncludeItemTypes = new[] { typeof(Series).Name },
Recursive = true, Recursive = true,
Name = info.ItemName Name = info.ItemName,
DtoOptions = new DtoOptions(true)
}).Cast<Series>().FirstOrDefault(); }).Cast<Series>().FirstOrDefault();
} }

View file

@ -41,6 +41,7 @@ using SortOrder = MediaBrowser.Model.Entities.SortOrder;
using VideoResolver = MediaBrowser.Naming.Video.VideoResolver; using VideoResolver = MediaBrowser.Naming.Video.VideoResolver;
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Tasks;
@ -313,7 +314,8 @@ namespace Emby.Server.Implementations.Library
{ {
IncludeItemTypes = new[] { typeof(Season).Name }, IncludeItemTypes = new[] { typeof(Season).Name },
Recursive = true, Recursive = true,
IndexNumber = 0 IndexNumber = 0,
DtoOptions = new DtoOptions(true)
}).Cast<Season>() }).Cast<Season>()
.Where(i => !string.Equals(i.Name, newName, StringComparison.Ordinal)) .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 IItemByName)
{ {
if (!(item is MusicArtist) && !(item is Studio)) if (!(item is MusicArtist))
{ {
return; return;
} }
@ -868,7 +870,8 @@ namespace Emby.Server.Implementations.Library
IsFolder = isFolder, IsFolder = isFolder,
SortBy = new[] { ItemSortBy.DateCreated }, SortBy = new[] { ItemSortBy.DateCreated },
SortOrder = SortOrder.Descending, SortOrder = SortOrder.Descending,
Limit = 1 Limit = 1,
DtoOptions = new DtoOptions(true)
}; };
return GetItemList(query) return GetItemList(query)
@ -981,7 +984,8 @@ namespace Emby.Server.Implementations.Library
var existing = GetItemList(new InternalItemsQuery var existing = GetItemList(new InternalItemsQuery
{ {
IncludeItemTypes = new[] { typeof(T).Name }, IncludeItemTypes = new[] { typeof(T).Name },
Name = name Name = name,
DtoOptions = new DtoOptions(true)
}).Cast<MusicArtist>() }).Cast<MusicArtist>()
.OrderBy(i => i.IsAccessedByName ? 1 : 0) .OrderBy(i => i.IsAccessedByName ? 1 : 0)

View file

@ -6,6 +6,7 @@ using System;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
@ -27,7 +28,8 @@ namespace Emby.Server.Implementations.Library
var items = _libraryManager.GetItemList(new InternalItemsQuery var items = _libraryManager.GetItemList(new InternalItemsQuery
{ {
IncludeItemTypes = new[] { typeof(BoxSet).Name, typeof(Game).Name, typeof(Movie).Name, typeof(Series).Name }, 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(); }).OfType<IHasTrailers>().ToList();
@ -40,7 +42,8 @@ namespace Emby.Server.Implementations.Library
{ {
IncludeItemTypes = new[] { typeof(Trailer).Name }, IncludeItemTypes = new[] { typeof(Trailer).Name },
TrailerTypes = trailerTypes, TrailerTypes = trailerTypes,
Recursive = true Recursive = true,
DtoOptions = new DtoOptions(false)
}).ToArray(); }).ToArray();

View file

@ -5,6 +5,7 @@ using MediaBrowser.Controller.Playlists;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Querying; using MediaBrowser.Model.Querying;
namespace Emby.Server.Implementations.Library namespace Emby.Server.Implementations.Library
@ -18,47 +19,48 @@ namespace Emby.Server.Implementations.Library
_libraryManager = libraryManager; _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> var list = new List<Audio>
{ {
item 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 var genres = item
.GetRecursiveChildren(user, new InternalItemsQuery(user) .GetRecursiveChildren(user, new InternalItemsQuery(user)
{ {
IncludeItemTypes = new[] { typeof(Audio).Name } IncludeItemTypes = new[] { typeof(Audio).Name },
DtoOptions = dtoOptions
}) })
.Cast<Audio>() .Cast<Audio>()
.SelectMany(i => i.Genres) .SelectMany(i => i.Genres)
.Concat(item.Genres) .Concat(item.Genres)
.DistinctNames(); .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 => var genreIds = genres.DistinctNames().Select(i =>
{ {
@ -73,10 +75,10 @@ namespace Emby.Server.Implementations.Library
}).Where(i => i != null); }).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) return _libraryManager.GetItemList(new InternalItemsQuery(user)
{ {
@ -86,47 +88,49 @@ namespace Emby.Server.Implementations.Library
Limit = 200, Limit = 200,
SortBy = new[] { ItemSortBy.Random } SortBy = new[] { ItemSortBy.Random },
DtoOptions = dtoOptions
}).Cast<Audio>(); }).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; var genre = item as MusicGenre;
if (genre != null) 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; var playlist = item as Playlist;
if (playlist != null) if (playlist != null)
{ {
return GetInstantMixFromPlaylist(playlist, user); return GetInstantMixFromPlaylist(playlist, user, dtoOptions);
} }
var album = item as MusicAlbum; var album = item as MusicAlbum;
if (album != null) if (album != null)
{ {
return GetInstantMixFromAlbum(album, user); return GetInstantMixFromAlbum(album, user, dtoOptions);
} }
var artist = item as MusicArtist; var artist = item as MusicArtist;
if (artist != null) if (artist != null)
{ {
return GetInstantMixFromArtist(artist, user); return GetInstantMixFromArtist(artist, user, dtoOptions);
} }
var song = item as Audio; var song = item as Audio;
if (song != null) if (song != null)
{ {
return GetInstantMixFromSong(song, user); return GetInstantMixFromSong(song, user, dtoOptions);
} }
var folder = item as Folder; var folder = item as Folder;
if (folder != null) if (folder != null)
{ {
return GetInstantMixFromFolder(folder, user); return GetInstantMixFromFolder(folder, user, dtoOptions);
} }
return new Audio[] { }; return new Audio[] { };

View file

@ -8,6 +8,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Extensions; using MediaBrowser.Controller.Extensions;
namespace Emby.Server.Implementations.Library namespace Emby.Server.Implementations.Library
@ -175,7 +176,17 @@ namespace Emby.Server.Implementations.Library
IsNews = query.IsNews, IsNews = query.IsNews,
IsSeries = query.IsSeries, IsSeries = query.IsSeries,
IsSports = query.IsSports, 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 // Add search hints based on item name

View file

@ -12,6 +12,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Globalization;
@ -190,11 +191,11 @@ namespace Emby.Server.Implementations.Library
return _libraryManager.GetShadowView(parent, viewType, sortName, cancellationToken); 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 user = _userManager.GetUserById(request.UserId);
var libraryItems = GetItemsForLatestItems(user, request); var libraryItems = GetItemsForLatestItems(user, request, options);
var list = new List<Tuple<BaseItem, List<BaseItem>>>(); var list = new List<Tuple<BaseItem, List<BaseItem>>>();
@ -230,7 +231,7 @@ namespace Emby.Server.Implementations.Library
return list; return list;
} }
private IEnumerable<BaseItem> GetItemsForLatestItems(User user, LatestItemsQuery request) private IEnumerable<BaseItem> GetItemsForLatestItems(User user, LatestItemsQuery request, DtoOptions options)
{ {
var parentId = request.ParentId; var parentId = request.ParentId;
@ -289,7 +290,8 @@ namespace Emby.Server.Implementations.Library
IsVirtualItem = false, IsVirtualItem = false,
Limit = limit * 5, Limit = limit * 5,
SourceTypes = parents.Count == 0 ? new[] { SourceType.Library } : new SourceType[] { }, SourceTypes = parents.Count == 0 ? new[] { SourceType.Library } : new SourceType[] { },
IsPlayed = isPlayed IsPlayed = isPlayed,
DtoOptions = options
}, parents); }, parents);
} }

View file

@ -30,6 +30,7 @@ using MediaBrowser.Common.Events;
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
@ -1232,7 +1233,9 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
RequiresClosing = false, RequiresClosing = false,
Protocol = MediaBrowser.Model.MediaInfo.MediaProtocol.Http, Protocol = MediaBrowser.Model.MediaInfo.MediaProtocol.Http,
BufferMs = 0, BufferMs = 0,
IgnoreDts = true IgnoreDts = true,
IgnoreIndex = true,
GenPtsInput = true
}; };
var isAudio = false; var isAudio = false;
@ -1640,7 +1643,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
SortOrder = SortOrder.Descending, SortOrder = SortOrder.Descending,
IsVirtualItem = false, IsVirtualItem = false,
IsFolder = false, IsFolder = false,
Recursive = true Recursive = true,
DtoOptions = new DtoOptions(true)
}).ConfigureAwait(false)) }).ConfigureAwait(false))
.Items .Items
@ -1977,7 +1981,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
{ {
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
Limit = 1, Limit = 1,
ExternalId = timer.ProgramId ExternalId = timer.ProgramId,
DtoOptions = new DtoOptions(true)
}).FirstOrDefault() as LiveTvProgram; }).FirstOrDefault() as LiveTvProgram;
@ -2511,16 +2516,17 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
if (program.EpisodeNumber.HasValue && program.SeasonNumber.HasValue) if (program.EpisodeNumber.HasValue && program.SeasonNumber.HasValue)
{ {
var result = _libraryManager.GetItemsResult(new InternalItemsQuery var result = _libraryManager.GetItemIds(new InternalItemsQuery
{ {
IncludeItemTypes = new[] { typeof(Episode).Name }, IncludeItemTypes = new[] { typeof(Episode).Name },
ParentIndexNumber = program.SeasonNumber.Value, ParentIndexNumber = program.SeasonNumber.Value,
IndexNumber = program.EpisodeNumber.Value, IndexNumber = program.EpisodeNumber.Value,
AncestorIds = seriesIds, AncestorIds = seriesIds,
IsVirtualItem = false IsVirtualItem = false,
Limit = 1
}); });
if (result.TotalRecordCount > 0) if (result.Count > 0)
{ {
return true; return true;
} }

View file

@ -200,27 +200,32 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
flags.Add("+genpts"); flags.Add("+genpts");
} }
var inputModifiers = "-async 1 -vsync -1"; var inputModifier = "-async 1 -vsync -1";
if (flags.Count > 0) if (flags.Count > 0)
{ {
inputModifiers += " -fflags " + string.Join("", flags.ToArray()); inputModifier += " -fflags " + string.Join("", flags.ToArray());
} }
if (!string.IsNullOrWhiteSpace(GetEncodingOptions().HardwareAccelerationType)) if (!string.IsNullOrWhiteSpace(GetEncodingOptions().HardwareAccelerationType))
{ {
inputModifiers += " -hwaccel auto"; inputModifier += " -hwaccel auto";
} }
if (mediaSource.ReadAtNativeFramerate) if (mediaSource.ReadAtNativeFramerate)
{ {
inputModifiers += " -re"; inputModifier += " -re";
}
if (mediaSource.RequiresLooping)
{
inputModifier += " -stream_loop -1";
} }
var analyzeDurationSeconds = 5; var analyzeDurationSeconds = 5;
var analyzeDuration = " -analyzeduration " + var analyzeDuration = " -analyzeduration " +
(analyzeDurationSeconds * 1000000).ToString(CultureInfo.InvariantCulture); (analyzeDurationSeconds * 1000000).ToString(CultureInfo.InvariantCulture);
inputModifiers += analyzeDuration; inputModifier += analyzeDuration;
var subtitleArgs = CopySubtitles ? " -codec:s copy" : " -sn"; var subtitleArgs = CopySubtitles ? " -codec:s copy" : " -sn";
@ -239,7 +244,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
durationParam, durationParam,
outputParam); outputParam);
return inputModifiers + " " + commandLineArgs; return inputModifier + " " + commandLineArgs;
} }
private string GetAudioArgs(MediaSourceInfo mediaSource) private string GetAudioArgs(MediaSourceInfo mediaSource)

View file

@ -149,7 +149,11 @@ namespace Emby.Server.Implementations.LiveTv
IncludeItemTypes = new string[] { typeof(Series).Name }, IncludeItemTypes = new string[] { typeof(Series).Name },
Name = seriesName, Name = seriesName,
Limit = 1, Limit = 1,
ImageTypes = new ImageType[] { ImageType.Thumb } ImageTypes = new ImageType[] { ImageType.Thumb },
DtoOptions = new DtoOptions
{
Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
}
}).FirstOrDefault(); }).FirstOrDefault();
@ -191,7 +195,11 @@ namespace Emby.Server.Implementations.LiveTv
IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name }, IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name },
ExternalSeriesId = programSeriesId, ExternalSeriesId = programSeriesId,
Limit = 1, Limit = 1,
ImageTypes = new ImageType[] { ImageType.Primary } ImageTypes = new ImageType[] { ImageType.Primary },
DtoOptions = new DtoOptions
{
Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
}
}).FirstOrDefault(); }).FirstOrDefault();
@ -239,7 +247,11 @@ namespace Emby.Server.Implementations.LiveTv
IncludeItemTypes = new string[] { typeof(Series).Name }, IncludeItemTypes = new string[] { typeof(Series).Name },
Name = seriesName, Name = seriesName,
Limit = 1, Limit = 1,
ImageTypes = new ImageType[] { ImageType.Thumb } ImageTypes = new ImageType[] { ImageType.Thumb },
DtoOptions = new DtoOptions
{
Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
}
}).FirstOrDefault(); }).FirstOrDefault();
@ -281,14 +293,22 @@ namespace Emby.Server.Implementations.LiveTv
IncludeItemTypes = new string[] { typeof(Series).Name }, IncludeItemTypes = new string[] { typeof(Series).Name },
Name = seriesName, Name = seriesName,
Limit = 1, 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 }).FirstOrDefault() ?? _libraryManager.GetItemList(new InternalItemsQuery
{ {
IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name }, IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name },
ExternalSeriesId = programSeriesId, ExternalSeriesId = programSeriesId,
Limit = 1, Limit = 1,
ImageTypes = new ImageType[] { ImageType.Primary } ImageTypes = new ImageType[] { ImageType.Primary },
DtoOptions = new DtoOptions
{
Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
}
}).FirstOrDefault(); }).FirstOrDefault();

View file

@ -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); var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
@ -192,7 +192,8 @@ namespace Emby.Server.Implementations.LiveTv
IsFavorite = query.IsFavorite, IsFavorite = query.IsFavorite,
IsLiked = query.IsLiked, IsLiked = query.IsLiked,
StartIndex = query.StartIndex, 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))); 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 Id = id
}, cancellationToken).ConfigureAwait(false); }, new DtoOptions(), cancellationToken).ConfigureAwait(false);
return result.Items.FirstOrDefault(); return result.Items.FirstOrDefault();
} }
@ -865,13 +866,6 @@ namespace Emby.Server.Implementations.LiveTv
return item.Id; return item.Id;
} }
private string GetExternalSeriesIdLegacy(BaseItem item)
{
return item.GetProviderId("ProviderExternalSeriesId");
}
public async Task<BaseItemDto> GetProgram(string id, CancellationToken cancellationToken, User user = null) public async Task<BaseItemDto> GetProgram(string id, CancellationToken cancellationToken, User user = null)
{ {
var program = GetInternalProgram(id); var program = GetInternalProgram(id);
@ -882,11 +876,6 @@ namespace Emby.Server.Implementations.LiveTv
var externalSeriesId = program.ExternalSeriesId; 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)); list.Add(new Tuple<BaseItemDto, string, string, string>(dto, program.ServiceName, GetItemExternalId(program), externalSeriesId));
await AddRecordingInfo(list, cancellationToken).ConfigureAwait(false); await AddRecordingInfo(list, cancellationToken).ConfigureAwait(false);
@ -906,6 +895,8 @@ namespace Emby.Server.Implementations.LiveTv
query.SortBy = new[] { ItemSortBy.StartDate }; query.SortBy = new[] { ItemSortBy.StartDate };
} }
RemoveFields(options);
var internalQuery = new InternalItemsQuery(user) var internalQuery = new InternalItemsQuery(user)
{ {
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
@ -965,8 +956,6 @@ namespace Emby.Server.Implementations.LiveTv
var queryResult = _libraryManager.QueryItems(internalQuery); var queryResult = _libraryManager.QueryItems(internalQuery);
RemoveFields(options);
var returnArray = (await _dtoService.GetBaseItemDtos(queryResult.Items, options, user).ConfigureAwait(false)).ToArray(); var returnArray = (await _dtoService.GetBaseItemDtos(queryResult.Items, options, user).ConfigureAwait(false)).ToArray();
var result = new QueryResult<BaseItemDto> 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) public async Task<QueryResult<BaseItemDto>> GetRecommendedPrograms(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken)
{ {
RemoveFields(options);
var internalResult = await GetRecommendedProgramsInternal(query, options, cancellationToken).ConfigureAwait(false); var internalResult = await GetRecommendedProgramsInternal(query, options, cancellationToken).ConfigureAwait(false);
var user = _userManager.GetUserById(query.UserId); var user = _userManager.GetUserById(query.UserId);
RemoveFields(options);
var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray(); var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray();
var result = new QueryResult<BaseItemDto> var result = new QueryResult<BaseItemDto>
@ -1333,7 +1322,8 @@ namespace Emby.Server.Implementations.LiveTv
{ {
IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name }, 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); }).Cast<LiveTvProgram>().ToDictionary(i => i.Id);
@ -1436,7 +1426,8 @@ namespace Emby.Server.Implementations.LiveTv
{ {
var list = _itemRepo.GetItemIdsList(new InternalItemsQuery var list = _itemRepo.GetItemIdsList(new InternalItemsQuery
{ {
IncludeItemTypes = validTypes IncludeItemTypes = validTypes,
DtoOptions = new DtoOptions(false)
}).ToList(); }).ToList();
@ -1663,6 +1654,8 @@ namespace Emby.Server.Implementations.LiveTv
includeItemTypes.Add(typeof(Series).Name); includeItemTypes.Add(typeof(Series).Name);
RemoveFields(options);
var internalResult = _libraryManager.GetItemsResult(new InternalItemsQuery(user) var internalResult = _libraryManager.GetItemsResult(new InternalItemsQuery(user)
{ {
Recursive = true, Recursive = true,
@ -1672,11 +1665,10 @@ namespace Emby.Server.Implementations.LiveTv
SortOrder = SortOrder.Descending, SortOrder = SortOrder.Descending,
EnableTotalRecordCount = query.EnableTotalRecordCount, EnableTotalRecordCount = query.EnableTotalRecordCount,
IncludeItemTypes = includeItemTypes.ToArray(), 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(); var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray();
return new QueryResult<BaseItemDto> 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); var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
if (user != null && !IsLiveTvEnabled(user)) 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)) 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); await RefreshRecordings(cancellationToken).ConfigureAwait(false);
var internalQuery = new InternalItemsQuery(user) 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)) if (!string.IsNullOrEmpty(query.ChannelId))
@ -1872,11 +1865,6 @@ namespace Emby.Server.Implementations.LiveTv
var externalSeriesId = program.ExternalSeriesId; var externalSeriesId = program.ExternalSeriesId;
if (string.IsNullOrWhiteSpace(externalSeriesId))
{
externalSeriesId = GetExternalSeriesIdLegacy(program);
}
programTuples.Add(new Tuple<BaseItemDto, string, string, string>(dto, serviceName, GetItemExternalId(program), externalSeriesId)); 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 user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
var internalResult = await GetInternalRecordings(query, cancellationToken).ConfigureAwait(false);
RemoveFields(options); RemoveFields(options);
var internalResult = await GetInternalRecordings(query, options, cancellationToken).ConfigureAwait(false);
var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray(); var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray();
return new QueryResult<BaseItemDto> return new QueryResult<BaseItemDto>
@ -2299,7 +2287,8 @@ namespace Emby.Server.Implementations.LiveTv
MinEndDate = now, MinEndDate = now,
Limit = channelIds.Length, Limit = channelIds.Length,
SortBy = new[] { "StartDate" }, 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>(); }).ToList() : new List<BaseItem>();
@ -2601,7 +2590,7 @@ namespace Emby.Server.Implementations.LiveTv
{ {
UserId = query.UserId UserId = query.UserId
}, cancellationToken).ConfigureAwait(false); }, new DtoOptions(), cancellationToken).ConfigureAwait(false);
var recordings = recordingResult.Items.OfType<ILiveTvRecording>().ToList(); var recordings = recordingResult.Items.OfType<ILiveTvRecording>().ToList();

View file

@ -11,6 +11,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Emby.Server.Implementations.Images; using Emby.Server.Implementations.Images;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
@ -89,7 +90,8 @@ namespace Emby.Server.Implementations.Playlists
SortBy = new[] { ItemSortBy.Random }, SortBy = new[] { ItemSortBy.Random },
Limit = 4, Limit = 4,
Recursive = true, Recursive = true,
ImageTypes = new[] { ImageType.Primary } ImageTypes = new[] { ImageType.Primary },
DtoOptions = new DtoOptions(false)
}).ToList(); }).ToList();
@ -120,7 +122,8 @@ namespace Emby.Server.Implementations.Playlists
SortBy = new[] { ItemSortBy.Random }, SortBy = new[] { ItemSortBy.Random },
Limit = 4, Limit = 4,
Recursive = true, Recursive = true,
ImageTypes = new[] { ImageType.Primary } ImageTypes = new[] { ImageType.Primary },
DtoOptions = new DtoOptions(false)
}).ToList(); }).ToList();

View file

@ -13,6 +13,7 @@ using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
@ -135,7 +136,10 @@ namespace Emby.Server.Implementations.Playlists
if (options.ItemIdList.Count > 0) 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 return new PlaylistCreationResult
@ -160,21 +164,24 @@ namespace Emby.Server.Implementations.Playlists
return path; 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); 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) public Task AddToPlaylist(string playlistId, IEnumerable<string> itemIds, string userId)
{ {
var user = string.IsNullOrWhiteSpace(userId) ? null : _userManager.GetUserById(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; var playlist = _libraryManager.GetItemById(playlistId) as Playlist;
@ -185,7 +192,7 @@ namespace Emby.Server.Implementations.Playlists
var list = new List<LinkedChild>(); 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) .Where(i => i.SupportsAddingToPlaylist)
.ToList(); .ToList();

View file

@ -11,6 +11,7 @@ using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
@ -85,7 +86,9 @@ namespace Emby.Server.Implementations.ScheduledTasks
{ {
MediaTypes = new[] { MediaType.Video }, MediaTypes = new[] { MediaType.Video },
IsFolder = false, IsFolder = false,
Recursive = true Recursive = true,
DtoOptions = new DtoOptions(false)
}) })
.OfType<Video>() .OfType<Video>()
.ToList(); .ToList();

View file

@ -1022,7 +1022,10 @@ namespace Emby.Server.Implementations.Session
var series = episode.Series; var series = episode.Series;
if (series != null) if (series != null)
{ {
var episodes = series.GetEpisodes(user) var episodes = series.GetEpisodes(user, new DtoOptions(false)
{
EnableImages = false
})
.Where(i => !i.IsVirtualItem) .Where(i => !i.IsVirtualItem)
.SkipWhile(i => i.Id != episode.Id) .SkipWhile(i => i.Id != episode.Id)
.ToList(); .ToList();
@ -1065,7 +1068,11 @@ namespace Emby.Server.Implementations.Session
var items = byName.GetTaggedItems(new InternalItemsQuery(user) var items = byName.GetTaggedItems(new InternalItemsQuery(user)
{ {
IsFolder = false, IsFolder = false,
Recursive = true Recursive = true,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}); });
return FilterToSingleMediaType(items) return FilterToSingleMediaType(items)
@ -1080,7 +1087,11 @@ namespace Emby.Server.Implementations.Session
var itemsResult = await folder.GetItems(new InternalItemsQuery(user) var itemsResult = await folder.GetItems(new InternalItemsQuery(user)
{ {
Recursive = true, Recursive = true,
IsFolder = false IsFolder = false,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}).ConfigureAwait(false); }).ConfigureAwait(false);
@ -1111,7 +1122,7 @@ namespace Emby.Server.Implementations.Session
return new List<BaseItem>(); 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) public Task SendBrowseCommand(string controllingSessionId, string sessionId, BrowseRequest command, CancellationToken cancellationToken)

View file

@ -4,6 +4,7 @@ using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
@ -58,7 +59,8 @@ namespace Emby.Server.Implementations.TV
{ {
IncludeItemTypes = new[] { typeof(Series).Name }, IncludeItemTypes = new[] { typeof(Series).Name },
Recursive = true, Recursive = true,
GroupByPresentationUniqueKey = false GroupByPresentationUniqueKey = false,
DtoOptions = new DtoOptions(true)
}).Cast<Series>().ToList(); }).Cast<Series>().ToList();
@ -188,7 +190,8 @@ namespace Emby.Server.Implementations.TV
{ {
IncludeItemTypes = new[] { typeof(Series).Name }, IncludeItemTypes = new[] { typeof(Series).Name },
Recursive = true, Recursive = true,
GroupByPresentationUniqueKey = false GroupByPresentationUniqueKey = false,
DtoOptions = new DtoOptions(true)
}).Cast<Series>().ToList(); }).Cast<Series>().ToList();

View file

@ -8,6 +8,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
namespace Emby.Server.Implementations.TV namespace Emby.Server.Implementations.TV
{ {
@ -26,7 +27,7 @@ namespace Emby.Server.Implementations.TV
_config = config; _config = config;
} }
public QueryResult<BaseItem> GetNextUp(NextUpQuery request) public QueryResult<BaseItem> GetNextUp(NextUpQuery request, DtoOptions dtoOptions)
{ {
var user = _userManager.GetUserById(request.UserId); var user = _userManager.GetUserById(request.UserId);
@ -75,12 +76,12 @@ namespace Emby.Server.Implementations.TV
}).Cast<Series>().Select(GetUniqueSeriesKey); }).Cast<Series>().Select(GetUniqueSeriesKey);
// Avoid implicitly captured closure // Avoid implicitly captured closure
var episodes = GetNextUpEpisodes(request, user, items); var episodes = GetNextUpEpisodes(request, user, items, dtoOptions);
return GetResult(episodes, request); 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); var user = _userManager.GetUserById(request.UserId);
@ -126,18 +127,18 @@ namespace Emby.Server.Implementations.TV
}, parentsFolders.Cast<BaseItem>().ToList()).Cast<Series>().Select(GetUniqueSeriesKey); }, parentsFolders.Cast<BaseItem>().ToList()).Cast<Series>().Select(GetUniqueSeriesKey);
// Avoid implicitly captured closure // Avoid implicitly captured closure
var episodes = GetNextUpEpisodes(request, user, items); var episodes = GetNextUpEpisodes(request, user, items, dtoOptions);
return GetResult(episodes, request); 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 // Avoid implicitly captured closure
var currentUser = user; var currentUser = user;
var allNextUp = seriesKeys var allNextUp = seriesKeys
.Select(i => GetNextUp(i, currentUser)); .Select(i => GetNextUp(i, currentUser, dtoOptions));
//allNextUp = allNextUp.OrderByDescending(i => i.Item1); //allNextUp = allNextUp.OrderByDescending(i => i.Item1);
@ -175,7 +176,7 @@ namespace Emby.Server.Implementations.TV
/// Gets the next up. /// Gets the next up.
/// </summary> /// </summary>
/// <returns>Task{Episode}.</returns> /// <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; var enableSeriesPresentationKey = _config.Configuration.EnableSeriesPresentationUniqueKey;
@ -213,7 +214,8 @@ namespace Emby.Server.Implementations.TV
IsPlayed = false, IsPlayed = false,
IsVirtualItem = false, IsVirtualItem = false,
ParentIndexNumberNotEquals = 0, ParentIndexNumberNotEquals = 0,
MinSortName = lastWatchedEpisode == null ? null : lastWatchedEpisode.SortName MinSortName = lastWatchedEpisode == null ? null : lastWatchedEpisode.SortName,
DtoOptions = dtoOptions
}).Cast<Episode>().FirstOrDefault(); }).Cast<Episode>().FirstOrDefault();
}; };

View file

@ -14,6 +14,7 @@ using Emby.Server.Implementations.Images;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Controller.Collections; using MediaBrowser.Controller.Collections;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
@ -46,7 +47,8 @@ namespace Emby.Server.Implementations.UserViews
{ {
CollapseBoxSetItems = false, CollapseBoxSetItems = false,
Recursive = recursive, Recursive = recursive,
ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Playlist" } ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Playlist" },
DtoOptions = new DtoOptions(false)
}).ConfigureAwait(false); }).ConfigureAwait(false);
@ -144,7 +146,8 @@ namespace Emby.Server.Implementations.UserViews
Recursive = recursive, Recursive = recursive,
IncludeItemTypes = new[] { typeof(BoxSet).Name }, IncludeItemTypes = new[] { typeof(BoxSet).Name },
Limit = 20, 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); return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary) || i.HasImage(ImageType.Thumb)).ToList(), 8);

View file

@ -12,6 +12,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Emby.Server.Implementations.Images; using Emby.Server.Implementations.Images;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Extensions;
@ -58,7 +59,9 @@ namespace Emby.Server.Implementations.UserViews
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
ImageTypes = new[] { ImageType.Primary }, ImageTypes = new[] { ImageType.Primary },
Limit = 30, Limit = 30,
IsMovie = true IsMovie = true,
DtoOptions = new DtoOptions(false)
}).ToList(); }).ToList();
return GetFinalItems(programs).ToList(); return GetFinalItems(programs).ToList();
@ -69,7 +72,8 @@ namespace Emby.Server.Implementations.UserViews
{ {
var userItemsResult = await view.GetItems(new InternalItemsQuery var userItemsResult = await view.GetItems(new InternalItemsQuery
{ {
CollapseBoxSetItems = false CollapseBoxSetItems = false,
DtoOptions = new DtoOptions(false)
}); });
return userItemsResult.Items.ToList(); return userItemsResult.Items.ToList();
@ -84,6 +88,7 @@ namespace Emby.Server.Implementations.UserViews
CollapseBoxSetItems = false, CollapseBoxSetItems = false,
Recursive = recursive, Recursive = recursive,
ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Person" }, ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Person" },
DtoOptions = new DtoOptions(false)
}).ConfigureAwait(false); }).ConfigureAwait(false);

View file

@ -151,16 +151,6 @@ namespace MediaBrowser.Api
options.Fields.Add(Model.Querying.ItemFields.ChildCount); 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; var hasDtoOptions = request as IHasDtoOptions;
if (hasDtoOptions != null) if (hasDtoOptions != null)
{ {

View file

@ -110,7 +110,11 @@ namespace MediaBrowser.Api
var user = request.UserId == null ? null : _userManager.GetUserById(request.UserId); var user = request.UserId == null ? null : _userManager.GetUserById(request.UserId);
var query = new InternalItemsQuery(user) 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) var gameSystems = _libraryManager.GetItemList(query)
.Cast<GameSystem>() .Cast<GameSystem>()
@ -130,7 +134,11 @@ namespace MediaBrowser.Api
var user = request.UserId == null ? null : _userManager.GetUserById(request.UserId); var user = request.UserId == null ? null : _userManager.GetUserById(request.UserId);
var query = new InternalItemsQuery(user) 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) var games = _libraryManager.GetItemList(query)
.Cast<Game>() .Cast<Game>()
@ -167,7 +175,11 @@ namespace MediaBrowser.Api
system.GetRecursiveChildren(i => i is Game) : system.GetRecursiveChildren(i => i is Game) :
system.GetRecursiveChildren(user, new InternalItemsQuery(user) 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(); var games = items.Cast<Game>().ToList();

View file

@ -617,6 +617,8 @@ namespace MediaBrowser.Api.Images
ImageIndex = request.Index ?? 0, ImageIndex = request.Index ?? 0,
Image = image, Image = image,
Item = item, Item = item,
ItemId = item.Id.ToString("N"),
ItemType = item.GetType().Name,
MaxHeight = request.MaxHeight, MaxHeight = request.MaxHeight,
MaxWidth = request.MaxWidth, MaxWidth = request.MaxWidth,
Quality = request.Quality ?? 100, Quality = request.Quality ?? 100,

View file

@ -427,7 +427,11 @@ namespace MediaBrowser.Api.Library
{ {
var series = _libraryManager.GetItemList(new InternalItemsQuery 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(); }).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 var movies = _libraryManager.GetItemList(new InternalItemsQuery
{ {
IncludeItemTypes = new[] { typeof(Movie).Name } IncludeItemTypes = new[] { typeof(Movie).Name },
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}).ToArray(); }).ToArray();
@ -668,7 +676,11 @@ namespace MediaBrowser.Api.Library
Recursive = true, Recursive = true,
IsVirtualItem = false, IsVirtualItem = false,
SourceTypes = new[] { SourceType.Library }, SourceTypes = new[] { SourceType.Library },
IsFavorite = request.IsFavorite IsFavorite = request.IsFavorite,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}; };
return _libraryManager.GetItemsResult(query).TotalRecordCount; return _libraryManager.GetItemsResult(query).TotalRecordCount;
@ -898,7 +910,11 @@ namespace MediaBrowser.Api.Library
var query = new InternalItemsQuery(user) var query = new InternalItemsQuery(user)
{ {
IncludeItemTypes = includeTypes, IncludeItemTypes = includeTypes,
Recursive = true Recursive = true,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}; };
var items = _libraryManager.GetItemList(query); var items = _libraryManager.GetItemList(query);

View file

@ -889,6 +889,8 @@ namespace MediaBrowser.Api.LiveTv
public async Task<object> Get(GetChannels request) public async Task<object> Get(GetChannels request)
{ {
var options = GetDtoOptions(_authContext, request);
var channelResult = await _liveTvManager.GetInternalChannels(new LiveTvChannelQuery var channelResult = await _liveTvManager.GetInternalChannels(new LiveTvChannelQuery
{ {
ChannelType = request.Type, ChannelType = request.Type,
@ -908,11 +910,10 @@ namespace MediaBrowser.Api.LiveTv
SortOrder = request.SortOrder ?? SortOrder.Ascending, SortOrder = request.SortOrder ?? SortOrder.Ascending,
AddCurrentProgram = request.AddCurrentProgram AddCurrentProgram = request.AddCurrentProgram
}, CancellationToken.None).ConfigureAwait(false); }, options, CancellationToken.None).ConfigureAwait(false);
var user = string.IsNullOrEmpty(request.UserId) ? null : _userManager.GetUserById(request.UserId); var user = string.IsNullOrEmpty(request.UserId) ? null : _userManager.GetUserById(request.UserId);
var options = GetDtoOptions(_authContext, request);
RemoveFields(options); RemoveFields(options);
options.AddCurrentProgram = request.AddCurrentProgram; options.AddCurrentProgram = request.AddCurrentProgram;

View file

@ -36,7 +36,7 @@ namespace MediaBrowser.Api.Movies
} }
[Route("/Movies/Recommendations", "GET", Summary = "Gets movie recommendations")] [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")] [ApiMember(Name = "CategoryLimit", Description = "The max number of categories to return", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
public int CategoryLimit { get; set; } 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")] [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; } 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() public GetMovieRecommendations()
{ {
CategoryLimit = 5; CategoryLimit = 5;
@ -115,14 +127,12 @@ namespace MediaBrowser.Api.Movies
return ToOptimizedSerializedResultUsingCache(result); return ToOptimizedSerializedResultUsingCache(result);
} }
public async Task<object> Get(GetMovieRecommendations request) public object Get(GetMovieRecommendations request)
{ {
var user = _userManager.GetUserById(request.UserId); var user = _userManager.GetUserById(request.UserId);
var dtoOptions = GetDtoOptions(_authContext, request); var dtoOptions = GetDtoOptions(_authContext, request);
dtoOptions.Fields = request.GetItemFields().ToList();
var result = GetRecommendationCategories(user, request.ParentId, request.CategoryLimit, request.ItemLimit, dtoOptions); var result = GetRecommendationCategories(user, request.ParentId, request.CategoryLimit, request.ItemLimit, dtoOptions);
return ToOptimizedResult(result); return ToOptimizedResult(result);

View file

@ -85,9 +85,11 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId); 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(GetInstantMixFromArtistId request) public Task<object> Get(GetInstantMixFromArtistId request)
@ -96,9 +98,11 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId); 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) public Task<object> Get(GetInstantMixFromMusicGenreId request)
@ -107,9 +111,11 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId); 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) public Task<object> Get(GetInstantMixFromSong request)
@ -118,9 +124,11 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId); 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(GetInstantMixFromAlbum request) public Task<object> Get(GetInstantMixFromAlbum request)
@ -129,9 +137,11 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId); var user = _userManager.GetUserById(request.UserId);
var items = _musicManager.GetInstantMixFromItem(album, user); var dtoOptions = GetDtoOptions(_authContext, request);
return GetResult(items, user, request); var items = _musicManager.GetInstantMixFromItem(album, user, dtoOptions);
return GetResult(items, user, request, dtoOptions);
} }
public Task<object> Get(GetInstantMixFromPlaylist request) public Task<object> Get(GetInstantMixFromPlaylist request)
@ -140,18 +150,22 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId); var user = _userManager.GetUserById(request.UserId);
var items = _musicManager.GetInstantMixFromItem(playlist, user); var dtoOptions = GetDtoOptions(_authContext, request);
return GetResult(items, user, request); var items = _musicManager.GetInstantMixFromItem(playlist, user, dtoOptions);
return GetResult(items, user, request, dtoOptions);
} }
public Task<object> Get(GetInstantMixFromMusicGenre request) public Task<object> Get(GetInstantMixFromMusicGenre request)
{ {
var user = _userManager.GetUserById(request.UserId); var user = _userManager.GetUserById(request.UserId);
var items = _musicManager.GetInstantMixFromGenres(new[] { request.Name }, user); var dtoOptions = GetDtoOptions(_authContext, request);
return GetResult(items, user, request); var items = _musicManager.GetInstantMixFromGenres(new[] { request.Name }, user, dtoOptions);
return GetResult(items, user, request, dtoOptions);
} }
public Task<object> Get(GetInstantMixFromArtist request) public Task<object> Get(GetInstantMixFromArtist request)
@ -159,12 +173,14 @@ namespace MediaBrowser.Api.Music
var user = _userManager.GetUserById(request.UserId); var user = _userManager.GetUserById(request.UserId);
var artist = _libraryManager.GetArtist(request.Name); var artist = _libraryManager.GetArtist(request.Name);
var items = _musicManager.GetInstantMixFromArtist(artist, user); var dtoOptions = GetDtoOptions(_authContext, request);
return GetResult(items, user, request); var items = _musicManager.GetInstantMixFromArtist(artist, user, dtoOptions);
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(); var list = items.ToList();
@ -173,8 +189,6 @@ namespace MediaBrowser.Api.Music
TotalRecordCount = list.Count TotalRecordCount = list.Count
}; };
var dtoOptions = GetDtoOptions(_authContext, request);
result.Items = (await _dtoService.GetBaseItemDtos(list.Take(request.Limit ?? list.Count), dtoOptions, user).ConfigureAwait(false)).ToArray(); result.Items = (await _dtoService.GetBaseItemDtos(list.Take(request.Limit ?? list.Count), dtoOptions, user).ConfigureAwait(false)).ToArray();
return ToOptimizedResult(result); return ToOptimizedResult(result);

View file

@ -374,6 +374,8 @@ namespace MediaBrowser.Api
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
public async Task<object> Get(GetNextUpEpisodes request) public async Task<object> Get(GetNextUpEpisodes request)
{ {
var options = GetDtoOptions(_authContext, request);
var result = _tvSeriesManager.GetNextUp(new NextUpQuery var result = _tvSeriesManager.GetNextUp(new NextUpQuery
{ {
Limit = request.Limit, Limit = request.Limit,
@ -382,12 +384,10 @@ namespace MediaBrowser.Api
StartIndex = request.StartIndex, StartIndex = request.StartIndex,
UserId = request.UserId, UserId = request.UserId,
EnableTotalRecordCount = request.EnableTotalRecordCount EnableTotalRecordCount = request.EnableTotalRecordCount
}); }, options);
var user = _userManager.GetUserById(request.UserId); var user = _userManager.GetUserById(request.UserId);
var options = GetDtoOptions(_authContext, request);
var returnItems = (await _dtoService.GetBaseItemDtos(result.Items, options, user).ConfigureAwait(false)).ToArray(); var returnItems = (await _dtoService.GetBaseItemDtos(result.Items, options, user).ConfigureAwait(false)).ToArray();
return ToOptimizedSerializedResultUsingCache(new ItemsResult return ToOptimizedSerializedResultUsingCache(new ItemsResult
@ -469,6 +469,8 @@ namespace MediaBrowser.Api
IEnumerable<Episode> episodes; IEnumerable<Episode> episodes;
var dtoOptions = GetDtoOptions(_authContext, request);
if (!string.IsNullOrWhiteSpace(request.SeasonId)) if (!string.IsNullOrWhiteSpace(request.SeasonId))
{ {
var season = _libraryManager.GetItemById(new Guid(request.SeasonId)) as Season; 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); throw new ResourceNotFoundException("No season exists with Id " + request.SeasonId);
} }
episodes = season.GetEpisodes(user); episodes = season.GetEpisodes(user, dtoOptions);
} }
else if (request.Season.HasValue) else if (request.Season.HasValue)
{ {
@ -489,7 +491,7 @@ namespace MediaBrowser.Api
throw new ResourceNotFoundException("Series not found"); 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) if (season == null)
{ {
@ -497,7 +499,7 @@ namespace MediaBrowser.Api
} }
else else
{ {
episodes = season.GetEpisodes(user); episodes = season.GetEpisodes(user, dtoOptions);
} }
} }
else else
@ -509,7 +511,7 @@ namespace MediaBrowser.Api
throw new ResourceNotFoundException("Series not found"); 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 // 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 pagedItems = ApplyPaging(returnList, request.StartIndex, request.Limit);
var dtoOptions = GetDtoOptions(_authContext, request);
var dtos = (await _dtoService.GetBaseItemDtos(pagedItems, dtoOptions, user).ConfigureAwait(false)) var dtos = (await _dtoService.GetBaseItemDtos(pagedItems, dtoOptions, user).ConfigureAwait(false))
.ToArray(); .ToArray();

View file

@ -129,7 +129,8 @@ namespace MediaBrowser.Api.UserLibrary
PersonIds = request.GetPersonIds(), PersonIds = request.GetPersonIds(),
PersonTypes = request.GetPersonTypes(), PersonTypes = request.GetPersonTypes(),
Years = request.GetYears(), Years = request.GetYears(),
MinCommunityRating = request.MinCommunityRating MinCommunityRating = request.MinCommunityRating,
DtoOptions = dtoOptions
}; };
if (!string.IsNullOrWhiteSpace(request.ParentId)) if (!string.IsNullOrWhiteSpace(request.ParentId))

View file

@ -330,7 +330,7 @@ namespace MediaBrowser.Api.UserLibrary
{ {
var requestedLocationTypes = var requestedLocationTypes =
request.LocationTypes.Split(',') request.LocationTypes.Split(',')
.Select(d => (LocationType) Enum.Parse(typeof (LocationType), d, true)) .Select(d => (LocationType)Enum.Parse(typeof(LocationType), d, true))
.ToList(); .ToList();
if (requestedLocationTypes.Count > 0 && requestedLocationTypes.Count < 4) if (requestedLocationTypes.Count > 0 && requestedLocationTypes.Count < 4)
@ -381,15 +381,15 @@ namespace MediaBrowser.Api.UserLibrary
// Albums // Albums
if (!string.IsNullOrEmpty(request.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 }, IncludeItemTypes = new[] { typeof(MusicAlbum).Name },
Name = i, Name = i,
Limit = 1 Limit = 1
}).Select(album => album.Id.ToString("N")).FirstOrDefault(); }).Select(albumId => albumId.ToString("N"));
}).ToArray(); }).ToArray();
} }

View file

@ -308,6 +308,8 @@ namespace MediaBrowser.Api.UserLibrary
} }
} }
var dtoOptions = GetDtoOptions(_authContext, request);
var list = _userViewManager.GetLatestItems(new LatestItemsQuery var list = _userViewManager.GetLatestItems(new LatestItemsQuery
{ {
GroupItems = request.GroupItems, GroupItems = request.GroupItems,
@ -315,10 +317,8 @@ namespace MediaBrowser.Api.UserLibrary
IsPlayed = request.IsPlayed, IsPlayed = request.IsPlayed,
Limit = request.Limit, Limit = request.Limit,
ParentId = request.ParentId, ParentId = request.ParentId,
UserId = request.UserId UserId = request.UserId,
}); }, dtoOptions);
var dtoOptions = GetDtoOptions(_authContext, request);
var dtos = list.Select(i => var dtos = list.Select(i =>
{ {
@ -360,7 +360,7 @@ namespace MediaBrowser.Api.UserLibrary
var currentUser = user; var currentUser = user;
var dtos = series var dtos = series
.GetEpisodes(user) .GetEpisodes(user, dtoOptions)
.Where(i => i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0) .Where(i => i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0)
.OrderBy(i => .OrderBy(i =>
{ {

View file

@ -10,6 +10,8 @@ namespace MediaBrowser.Controller.Drawing
{ {
public class ImageProcessingOptions public class ImageProcessingOptions
{ {
public string ItemId { get; set; }
public string ItemType { get; set; }
public IHasImages Item { get; set; } public IHasImages Item { get; set; }
public ItemImageInfo Image { get; set; } public ItemImageInfo Image { get; set; }

View file

@ -23,17 +23,28 @@ namespace MediaBrowser.Controller.Dto
public bool AddCurrentProgram { get; set; } public bool AddCurrentProgram { get; set; }
public DtoOptions() public DtoOptions()
: this(true)
{
}
public DtoOptions(bool allFields)
{ {
Fields = new List<ItemFields>();
ImageTypeLimit = int.MaxValue; ImageTypeLimit = int.MaxValue;
EnableImages = true; EnableImages = true;
EnableUserData = true; EnableUserData = true;
AddCurrentProgram = true; AddCurrentProgram = true;
Fields = Enum.GetNames(typeof (ItemFields)) if (allFields)
.Select(i => (ItemFields) Enum.Parse(typeof (ItemFields), i, true)) {
.Except(DefaultExcludedFields) Fields = Enum.GetNames(typeof(ItemFields))
.ToList(); .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true))
.Except(DefaultExcludedFields)
.ToList();
}
else
{
Fields = new List<ItemFields>();
}
ImageTypes = Enum.GetNames(typeof(ImageType)) ImageTypes = Enum.GetNames(typeof(ImageType))
.Select(i => (ImageType)Enum.Parse(typeof(ImageType), i, true)) .Select(i => (ImageType)Enum.Parse(typeof(ImageType), i, true))

View file

@ -266,20 +266,6 @@ namespace MediaBrowser.Controller.Entities.Audio
return info; 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] [IgnoreDataMember]
public override bool SupportsPeople public override bool SupportsPeople
{ {

View file

@ -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] [IgnoreDataMember]
public override bool SupportsPeople public override bool SupportsPeople
{ {

View file

@ -22,6 +22,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Extensions; using MediaBrowser.Controller.Extensions;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Sorting; using MediaBrowser.Controller.Sorting;
@ -186,10 +187,15 @@ namespace MediaBrowser.Controller.Entities
} }
set set
{ {
var isSortNameDefault = IsSortNameDefault(SortName);
_name = value; _name = value;
// lazy load this again if (isSortNameDefault)
_sortName = null; {
// lazy load this again
SortName = null;
}
} }
} }
@ -580,7 +586,6 @@ namespace MediaBrowser.Controller.Entities
} }
} }
private string _forcedSortName;
/// <summary> /// <summary>
/// Gets or sets the name of the forced sort. /// Gets or sets the name of the forced sort.
/// </summary> /// </summary>
@ -588,8 +593,42 @@ namespace MediaBrowser.Controller.Entities
[IgnoreDataMember] [IgnoreDataMember]
public string ForcedSortName public string ForcedSortName
{ {
get { return _forcedSortName; } get
set { _forcedSortName = value; _sortName = null; } {
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; private string _sortName;
@ -604,15 +643,7 @@ namespace MediaBrowser.Controller.Entities
{ {
if (_sortName == null) if (_sortName == null)
{ {
if (!string.IsNullOrWhiteSpace(ForcedSortName)) _sortName = CreateSortName();
{
// Need the ToLower because that's what CreateSortName does
_sortName = ModifySortChunks(ForcedSortName).ToLower();
}
else
{
_sortName = CreateSortName();
}
} }
return _sortName; 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() public string GetInternalMetadataPath()
{ {
var basePath = ConfigurationManager.ApplicationPaths.InternalMetadataPath; var basePath = ConfigurationManager.ApplicationPaths.InternalMetadataPath;
@ -1303,7 +1349,6 @@ namespace MediaBrowser.Controller.Entities
public void AfterMetadataRefresh() public void AfterMetadataRefresh()
{ {
_sortName = null;
} }
/// <summary> /// <summary>
@ -2187,8 +2232,6 @@ namespace MediaBrowser.Controller.Entities
/// </summary> /// </summary>
public virtual bool BeforeMetadataRefresh() public virtual bool BeforeMetadataRefresh()
{ {
_sortName = null;
var hasChanges = false; var hasChanges = false;
if (string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Path)) if (string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Path))
@ -2210,7 +2253,7 @@ namespace MediaBrowser.Controller.Entities
return path; 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) if (RunTimeTicks.HasValue)
{ {

View file

@ -12,6 +12,7 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
@ -672,7 +673,8 @@ namespace MediaBrowser.Controller.Entities
return ItemRepository.GetItemList(new InternalItemsQuery return ItemRepository.GetItemList(new InternalItemsQuery
{ {
ParentId = Id, ParentId = Id,
GroupByPresentationUniqueKey = false GroupByPresentationUniqueKey = false,
DtoOptions = new DtoOptions(true)
}); });
} }
@ -690,7 +692,11 @@ namespace MediaBrowser.Controller.Entities
{ {
Recursive = false, Recursive = false,
Limit = 0, Limit = 0,
ParentId = Id ParentId = Id,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}).Result; }).Result;
@ -705,7 +711,11 @@ namespace MediaBrowser.Controller.Entities
IsFolder = false, IsFolder = false,
IsVirtualItem = false, IsVirtualItem = false,
EnableTotalRecordCount = true, EnableTotalRecordCount = true,
Limit = 0 Limit = 0,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}).Result.TotalRecordCount; }).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) if (!SupportsUserDataFromChildren)
{ {
@ -1490,7 +1500,7 @@ namespace MediaBrowser.Controller.Entities
if (itemDto != null) if (itemDto != null)
{ {
if (itemFields.Contains(ItemFields.RecursiveItemCount)) if (fields.Contains(ItemFields.RecursiveItemCount))
{ {
itemDto.RecursiveItemCount = GetRecursiveChildCount(user); itemDto.RecursiveItemCount = GetRecursiveChildCount(user);
} }
@ -1505,7 +1515,11 @@ namespace MediaBrowser.Controller.Entities
IsVirtualItem = false, IsVirtualItem = false,
EnableTotalRecordCount = true, EnableTotalRecordCount = true,
Limit = 0, Limit = 0,
IsPlayed = false IsPlayed = false,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}).ConfigureAwait(false); }).ConfigureAwait(false);

View file

@ -69,16 +69,6 @@ namespace MediaBrowser.Controller.Entities
return false; 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) public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{ {
query.GenreIds = new[] { Id.ToString("N") }; query.GenreIds = new[] { Id.ToString("N") };

View file

@ -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) public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{ {
query.GenreIds = new[] { Id.ToString("N") }; query.GenreIds = new[] { Id.ToString("N") };

View file

@ -7,13 +7,6 @@ namespace MediaBrowser.Controller.Entities
/// </summary> /// </summary>
public interface IItemByName : IHasMetadata 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); IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query);
} }

View file

@ -166,26 +166,31 @@ namespace MediaBrowser.Controller.Entities
switch (name) 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.HomePageUrl:
case ItemFields.VoteCount: case ItemFields.Keywords:
case ItemFields.DisplayMediaType: case ItemFields.DisplayMediaType:
//case ItemFields.ServiceName: case ItemFields.VoteCount:
case ItemFields.Genres: case ItemFields.CustomRating:
case ItemFields.Studios: case ItemFields.ProductionLocations:
case ItemFields.Settings: case ItemFields.Settings:
case ItemFields.OriginalTitle: case ItemFields.OriginalTitle:
case ItemFields.Taglines:
case ItemFields.SortName:
case ItemFields.Studios:
case ItemFields.Tags: case ItemFields.Tags:
case ItemFields.ThemeSongIds:
case ItemFields.ThemeVideoIds:
case ItemFields.DateCreated:
case ItemFields.Overview:
case ItemFields.Genres:
case ItemFields.DateLastMediaAdded: 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: default:
return true; return true;
} }

View file

@ -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] [IgnoreDataMember]
public override bool SupportsPeople public override bool SupportsPeople
{ {

View file

@ -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) public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{ {
query.StudioIds = new[] { Id.ToString("N") }; query.StudioIds = new[] { Id.ToString("N") };

View file

@ -5,6 +5,7 @@ using MediaBrowser.Model.Users;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Serialization; 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); 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); var result = PostFilterAndSort(items, query, false, false);
@ -170,21 +171,19 @@ namespace MediaBrowser.Controller.Entities.TV
/// <summary> /// <summary>
/// Gets the episodes. /// Gets the episodes.
/// </summary> /// </summary>
/// <param name="user">The user.</param> public IEnumerable<Episode> GetEpisodes(User user, DtoOptions options)
/// <returns>IEnumerable{Episode}.</returns>
public IEnumerable<Episode> GetEpisodes(User user)
{ {
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() public IEnumerable<Episode> GetEpisodes()
@ -194,7 +193,7 @@ namespace MediaBrowser.Controller.Entities.TV
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren) public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
{ {
return GetEpisodes(user); return GetEpisodes(user, new DtoOptions(true));
} }
protected override bool GetBlockUnratedValue(UserPolicy config) protected override bool GetBlockUnratedValue(UserPolicy config)

View file

@ -8,6 +8,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.Providers; using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
@ -250,12 +251,15 @@ namespace MediaBrowser.Controller.Entities.TV
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren) 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); SetSeasonQueryOptions(query, user);
@ -321,7 +325,7 @@ namespace MediaBrowser.Controller.Entities.TV
return Task.FromResult(LibraryManager.GetItemsResult(query)); 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 enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
var seriesKey = GetUniqueSeriesKey(this); var seriesKey = GetUniqueSeriesKey(this);
@ -331,7 +335,8 @@ namespace MediaBrowser.Controller.Entities.TV
AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey, AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null, SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name }, IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name },
SortBy = new[] { ItemSortBy.SortName } SortBy = new[] { ItemSortBy.SortName },
DtoOptions = options
}; };
var config = user.Configuration; var config = user.Configuration;
if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes) if (!config.DisplayMissingEpisodes && !config.DisplayUnairedEpisodes)
@ -352,7 +357,7 @@ namespace MediaBrowser.Controller.Entities.TV
var allSeriesEpisodes = allItems.OfType<Episode>().ToList(); var allSeriesEpisodes = allItems.OfType<Episode>().ToList();
var allEpisodes = allItems.OfType<Season>() var allEpisodes = allItems.OfType<Season>()
.SelectMany(i => i.GetEpisodes(this, user, allSeriesEpisodes)) .SelectMany(i => i.GetEpisodes(this, user, allSeriesEpisodes, options))
.Reverse() .Reverse()
.ToList(); .ToList();
@ -429,7 +434,7 @@ namespace MediaBrowser.Controller.Entities.TV
progress.Report(100); progress.Report(100);
} }
public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user) public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user, DtoOptions options)
{ {
var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey; var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
@ -445,7 +450,8 @@ namespace MediaBrowser.Controller.Entities.TV
AncestorWithPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? null : seriesKey, AncestorWithPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? null : seriesKey,
SeriesPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? seriesKey : null, SeriesPresentationUniqueKey = queryFromSeries && enableSeriesPresentationKey ? seriesKey : null,
IncludeItemTypes = new[] { typeof(Episode).Name }, IncludeItemTypes = new[] { typeof(Episode).Name },
SortBy = new[] { ItemSortBy.SortName } SortBy = new[] { ItemSortBy.SortName },
DtoOptions = options
}; };
if (user != null) if (user != null)
{ {
@ -466,14 +472,14 @@ namespace MediaBrowser.Controller.Entities.TV
var allItems = LibraryManager.GetItemList(query).OfType<Episode>(); 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) if (allSeriesEpisodes == null)
{ {
return GetSeasonEpisodes(parentSeason, user); return GetSeasonEpisodes(parentSeason, user, options);
} }
var episodes = FilterEpisodesBySeason(allSeriesEpisodes, parentSeason, ConfigurationManager.Configuration.DisplaySpecialsWithinSeasons); var episodes = FilterEpisodesBySeason(allSeriesEpisodes, parentSeason, ConfigurationManager.Configuration.DisplaySpecialsWithinSeasons);

View file

@ -7,6 +7,7 @@ using System.Collections.Generic;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Linq; using System.Linq;
using MediaBrowser.Controller.Dto;
namespace MediaBrowser.Controller.Entities namespace MediaBrowser.Controller.Entities
{ {
@ -75,7 +76,8 @@ namespace MediaBrowser.Controller.Entities
var result = GetItems(new InternalItemsQuery var result = GetItems(new InternalItemsQuery
{ {
User = user, User = user,
EnableTotalRecordCount = false EnableTotalRecordCount = false,
DtoOptions = new DtoOptions(true)
}).Result; }).Result;
@ -100,7 +102,9 @@ namespace MediaBrowser.Controller.Entities
Recursive = true, Recursive = true,
EnableTotalRecordCount = false, EnableTotalRecordCount = false,
ForceDirect = true ForceDirect = true,
DtoOptions = query.DtoOptions
}).Result; }).Result;

View file

@ -17,6 +17,7 @@ using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Extensions;
namespace MediaBrowser.Controller.Entities namespace MediaBrowser.Controller.Entities
@ -83,7 +84,7 @@ namespace MediaBrowser.Controller.Entities
Limit = query.Limit, Limit = query.Limit,
StartIndex = query.StartIndex StartIndex = query.StartIndex
}, CancellationToken.None).ConfigureAwait(false); }, new DtoOptions(), CancellationToken.None).ConfigureAwait(false);
return GetResult(result); return GetResult(result);
} }
@ -110,7 +111,7 @@ namespace MediaBrowser.Controller.Entities
Limit = query.Limit, Limit = query.Limit,
StartIndex = query.StartIndex StartIndex = query.StartIndex
}, CancellationToken.None).ConfigureAwait(false); }, new DtoOptions(), CancellationToken.None).ConfigureAwait(false);
return GetResult(result); return GetResult(result);
} }
@ -394,7 +395,7 @@ namespace MediaBrowser.Controller.Entities
ParentId = parent == null ? null : parent.Id.ToString("N"), ParentId = parent == null ? null : parent.Id.ToString("N"),
GroupItems = true 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[] { }; query.SortBy = new string[] { };
@ -662,7 +663,7 @@ namespace MediaBrowser.Controller.Entities
StartIndex = query.StartIndex, StartIndex = query.StartIndex,
UserId = query.User.Id.ToString("N") UserId = query.User.Id.ToString("N")
}, parentFolders); }, parentFolders, query.DtoOptions);
return result; return result;
} }
@ -1783,7 +1784,7 @@ namespace MediaBrowser.Controller.Entities
Status = RecordingStatus.Completed, Status = RecordingStatus.Completed,
UserId = user.Id.ToString("N") UserId = user.Id.ToString("N")
}, CancellationToken.None).ConfigureAwait(false); }, new DtoOptions(), CancellationToken.None).ConfigureAwait(false);
} }
var list = new List<BaseItem>(); var list = new List<BaseItem>();

View file

@ -65,20 +65,6 @@ namespace MediaBrowser.Controller.Entities
return true; 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) public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{ {
int year; int year;
@ -107,12 +93,6 @@ namespace MediaBrowser.Controller.Entities
return null; return null;
} }
public Func<BaseItem, bool> GetItemFilter()
{
var val = GetYearValue();
return i => i.ProductionYear.HasValue && val.HasValue && i.ProductionYear.Value == val.Value;
}
[IgnoreDataMember] [IgnoreDataMember]
public override bool SupportsPeople public override bool SupportsPeople
{ {

View file

@ -1,6 +1,7 @@
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using System.Collections.Generic; using System.Collections.Generic;
using MediaBrowser.Controller.Dto;
namespace MediaBrowser.Controller.Library namespace MediaBrowser.Controller.Library
{ {
@ -9,23 +10,16 @@ namespace MediaBrowser.Controller.Library
/// <summary> /// <summary>
/// Gets the instant mix from song. /// Gets the instant mix from song.
/// </summary> /// </summary>
/// <param name="item">The item.</param> IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user, DtoOptions dtoOptions);
/// <param name="user">The user.</param>
/// <returns>IEnumerable{Audio}.</returns>
IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user);
/// <summary> /// <summary>
/// Gets the instant mix from artist. /// Gets the instant mix from artist.
/// </summary> /// </summary>
/// <param name="artist">The artist.</param> IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist artist, User user, DtoOptions dtoOptions);
/// <param name="user">The user.</param>
/// <returns>IEnumerable{Audio}.</returns>
IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist artist, User user);
/// <summary> /// <summary>
/// Gets the instant mix from genre. /// Gets the instant mix from genre.
/// </summary> /// </summary>
/// <param name="genres">The genres.</param> IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user, DtoOptions dtoOptions);
/// <param name="user">The user.</param>
/// <returns>IEnumerable{Audio}.</returns>
IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user);
} }
} }

View file

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Dto;
namespace MediaBrowser.Controller.Library namespace MediaBrowser.Controller.Library
{ {
@ -16,6 +17,6 @@ namespace MediaBrowser.Controller.Library
Task<UserView> GetUserSubView(string category, string type, string sortName, CancellationToken cancellationToken); 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);
} }
} }

View file

@ -284,19 +284,12 @@ namespace MediaBrowser.Controller.LiveTv
/// <summary> /// <summary>
/// Gets the internal channels. /// Gets the internal channels.
/// </summary> /// </summary>
/// <param name="query">The query.</param> Task<QueryResult<LiveTvChannel>> GetInternalChannels(LiveTvChannelQuery query, DtoOptions dtoOptions, CancellationToken cancellationToken);
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;QueryResult&lt;LiveTvChannel&gt;&gt;.</returns>
Task<QueryResult<LiveTvChannel>> GetInternalChannels(LiveTvChannelQuery query,
CancellationToken cancellationToken);
/// <summary> /// <summary>
/// Gets the internal recordings. /// Gets the internal recordings.
/// </summary> /// </summary>
/// <param name="query">The query.</param> Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, DtoOptions options, CancellationToken cancellationToken);
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;QueryResult&lt;BaseItem&gt;&gt;.</returns>
Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, CancellationToken cancellationToken);
/// <summary> /// <summary>
/// Gets the recording media sources. /// Gets the recording media sources.

View file

@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
namespace MediaBrowser.Controller.Playlists namespace MediaBrowser.Controller.Playlists
@ -81,7 +82,7 @@ namespace MediaBrowser.Controller.Playlists
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren) 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) protected override IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService)
@ -91,7 +92,7 @@ namespace MediaBrowser.Controller.Playlists
public override IEnumerable<BaseItem> GetRecursiveChildren(User user, InternalItemsQuery query) public override IEnumerable<BaseItem> GetRecursiveChildren(User user, InternalItemsQuery query)
{ {
var items = GetPlayableItems(user).Result; var items = GetPlayableItems(user, query.DtoOptions).Result;
if (query != null) if (query != null)
{ {
@ -106,12 +107,12 @@ namespace MediaBrowser.Controller.Playlists
return GetLinkedChildrenInfos(); 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) if (user != null)
{ {
@ -122,14 +123,14 @@ namespace MediaBrowser.Controller.Playlists
foreach (var item in inputItems) 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); list.AddRange(playlistItems);
} }
return list; 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; var musicGenre = item as MusicGenre;
if (musicGenre != null) if (musicGenre != null)
@ -140,7 +141,8 @@ namespace MediaBrowser.Controller.Playlists
IncludeItemTypes = new[] { typeof(Audio).Name }, IncludeItemTypes = new[] { typeof(Audio).Name },
GenreIds = new[] { musicGenre.Id.ToString("N") }, GenreIds = new[] { musicGenre.Id.ToString("N") },
SortBy = new[] { ItemSortBy.AlbumArtist, ItemSortBy.Album, ItemSortBy.SortName }, 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 }, IncludeItemTypes = new[] { typeof(Audio).Name },
ArtistIds = new[] { musicArtist.Id.ToString("N") }, ArtistIds = new[] { musicArtist.Id.ToString("N") },
SortBy = new[] { ItemSortBy.AlbumArtist, ItemSortBy.Album, ItemSortBy.SortName }, 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, IsFolder = false,
SortBy = new[] { ItemSortBy.SortName }, SortBy = new[] { ItemSortBy.SortName },
MediaTypes = new[] { mediaType }, MediaTypes = new[] { mediaType },
EnableTotalRecordCount = false EnableTotalRecordCount = false,
DtoOptions = options
}; };
var itemsResult = await folder.GetItems(query).ConfigureAwait(false); var itemsResult = await folder.GetItems(query).ConfigureAwait(false);

View file

@ -1,6 +1,7 @@
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Querying; using MediaBrowser.Model.Querying;
using System.Collections.Generic; using System.Collections.Generic;
using MediaBrowser.Controller.Dto;
namespace MediaBrowser.Controller.TV namespace MediaBrowser.Controller.TV
{ {
@ -9,16 +10,11 @@ namespace MediaBrowser.Controller.TV
/// <summary> /// <summary>
/// Gets the next up. /// Gets the next up.
/// </summary> /// </summary>
/// <param name="query">The query.</param> QueryResult<BaseItem> GetNextUp(NextUpQuery query, DtoOptions options);
/// <returns>QueryResult&lt;BaseItem&gt;.</returns>
QueryResult<BaseItem> GetNextUp(NextUpQuery query);
/// <summary> /// <summary>
/// Gets the next up. /// Gets the next up.
/// </summary> /// </summary>
/// <param name="request">The request.</param> QueryResult<BaseItem> GetNextUp(NextUpQuery request, List<Folder> parentsFolders, DtoOptions options);
/// <param name="parentsFolders">The parents folders.</param>
/// <returns>QueryResult&lt;BaseItem&gt;.</returns>
QueryResult<BaseItem> GetNextUp(NextUpQuery request, List<Folder> parentsFolders);
} }
} }

View file

@ -153,11 +153,6 @@
RecursiveItemCount, RecursiveItemCount,
/// <summary>
/// The season name
/// </summary>
SeasonName,
/// <summary> /// <summary>
/// The settings /// The settings
/// </summary> /// </summary>
@ -236,6 +231,10 @@
/// </summary> /// </summary>
ServiceName, ServiceName,
ThemeSongIds, ThemeSongIds,
ThemeVideoIds ThemeVideoIds,
ExternalEtag,
PresentationUniqueKey,
InheritedParentalRatingValue,
ExternalSeriesId
} }
} }

View file

@ -21,6 +21,7 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
@ -958,7 +959,11 @@ namespace MediaBrowser.Providers.Manager
.GetItemList(new InternalItemsQuery .GetItemList(new InternalItemsQuery
{ {
IncludeItemTypes = new[] { typeof(MusicAlbum).Name }, 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>() .OfType<MusicAlbum>()
.ToList(); .ToList();

View file

@ -14,6 +14,7 @@ using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.IO; using System.IO;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Tasks;
@ -82,7 +83,8 @@ namespace MediaBrowser.Providers.MediaInfo
{ {
MediaTypes = new string[] { MediaType.Video }, MediaTypes = new string[] { MediaType.Video },
IsVirtualItem = false, IsVirtualItem = false,
IncludeItemTypes = types.ToArray() IncludeItemTypes = types.ToArray(),
DtoOptions = new DtoOptions(true)
}).OfType<Video>() }).OfType<Video>()
.Where(i => i.LocationType != LocationType.Remote) .Where(i => i.LocationType != LocationType.Remote)

View file

@ -15,6 +15,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml; using System.Xml;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Model.Xml; using MediaBrowser.Model.Xml;
@ -65,7 +66,11 @@ namespace MediaBrowser.Providers.People
var seriesWithPerson = _libraryManager.GetItemList(new InternalItemsQuery var seriesWithPerson = _libraryManager.GetItemList(new InternalItemsQuery
{ {
IncludeItemTypes = new[] { typeof(Series).Name }, 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>() }).Cast<Series>()
.Where(i => TvdbSeriesProvider.IsValidSeries(i.ProviderIds)) .Where(i => TvdbSeriesProvider.IsValidSeries(i.ProviderIds))

View file

@ -15,6 +15,7 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml; using System.Xml;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
@ -114,7 +115,11 @@ namespace MediaBrowser.Providers.TV
{ {
IncludeItemTypes = new[] { typeof(Series).Name }, IncludeItemTypes = new[] { typeof(Series).Name },
Recursive = true, Recursive = true,
GroupByPresentationUniqueKey = false GroupByPresentationUniqueKey = false,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}).Cast<Series>() }).Cast<Series>()
.ToList(); .ToList();
@ -325,7 +330,11 @@ namespace MediaBrowser.Providers.TV
{ {
IncludeItemTypes = new[] { typeof(Series).Name }, IncludeItemTypes = new[] { typeof(Series).Name },
Recursive = true, Recursive = true,
GroupByPresentationUniqueKey = false GroupByPresentationUniqueKey = false,
DtoOptions = new DtoOptions(false)
{
EnableImages = false
}
}).Cast<Series>(); }).Cast<Series>();

View file

@ -9,6 +9,7 @@ using MediaBrowser.XbmcMetadata.Configuration;
using MediaBrowser.XbmcMetadata.Savers; using MediaBrowser.XbmcMetadata.Savers;
using System; using System;
using System.Linq; using System.Linq;
using MediaBrowser.Controller.Dto;
namespace MediaBrowser.XbmcMetadata namespace MediaBrowser.XbmcMetadata
{ {
@ -52,7 +53,8 @@ namespace MediaBrowser.XbmcMetadata
var items = _libraryManager.GetItemList(new InternalItemsQuery var items = _libraryManager.GetItemList(new InternalItemsQuery
{ {
PersonIds = new [] { person.Id.ToString("N") } PersonIds = new [] { person.Id.ToString("N") },
DtoOptions = new DtoOptions(true)
}).ToList(); }).ToList();