mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-03-27 04:22:08 +00:00
update data queries
This commit is contained in:
@@ -460,12 +460,12 @@ namespace Emby.Server.Implementations.Channels
|
||||
|
||||
public IEnumerable<ChannelFeatures> GetAllChannelFeatures()
|
||||
{
|
||||
return _libraryManager.GetItemList(new InternalItemsQuery
|
||||
return _libraryManager.GetItemIds(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Channel).Name },
|
||||
SortBy = new[] { ItemSortBy.SortName }
|
||||
|
||||
}).Select(i => GetChannelFeatures(i.Id.ToString("N")));
|
||||
}).Select(i => GetChannelFeatures(i.ToString("N")));
|
||||
}
|
||||
|
||||
public ChannelFeatures GetChannelFeatures(string id)
|
||||
|
||||
@@ -207,8 +207,6 @@ namespace Emby.Server.Implementations.Data
|
||||
AddColumn(db, "TypedBaseItems", "DateCreated", "DATETIME", existingColumnNames);
|
||||
AddColumn(db, "TypedBaseItems", "DateModified", "DATETIME", existingColumnNames);
|
||||
|
||||
AddColumn(db, "TypedBaseItems", "ForcedSortName", "Text", existingColumnNames);
|
||||
|
||||
AddColumn(db, "TypedBaseItems", "IsSeries", "BIT", existingColumnNames);
|
||||
AddColumn(db, "TypedBaseItems", "IsLive", "BIT", existingColumnNames);
|
||||
AddColumn(db, "TypedBaseItems", "IsNews", "BIT", existingColumnNames);
|
||||
@@ -426,7 +424,7 @@ namespace Emby.Server.Implementations.Data
|
||||
"OfficialRating",
|
||||
"HomePageUrl",
|
||||
"DisplayMediaType",
|
||||
"ForcedSortName",
|
||||
"SortName",
|
||||
"RunTimeTicks",
|
||||
"VoteCount",
|
||||
"DateCreated",
|
||||
@@ -549,7 +547,6 @@ namespace Emby.Server.Implementations.Data
|
||||
"DisplayMediaType",
|
||||
"DateCreated",
|
||||
"DateModified",
|
||||
"ForcedSortName",
|
||||
"PreferredMetadataLanguage",
|
||||
"PreferredMetadataCountryCode",
|
||||
"IsHD",
|
||||
@@ -826,8 +823,6 @@ namespace Emby.Server.Implementations.Data
|
||||
saveItemStatement.TryBind("@DateCreated", item.DateCreated);
|
||||
saveItemStatement.TryBind("@DateModified", item.DateModified);
|
||||
|
||||
saveItemStatement.TryBind("@ForcedSortName", item.ForcedSortName);
|
||||
|
||||
saveItemStatement.TryBind("@PreferredMetadataLanguage", item.PreferredMetadataLanguage);
|
||||
saveItemStatement.TryBind("@PreferredMetadataCountryCode", item.PreferredMetadataCountryCode);
|
||||
saveItemStatement.TryBind("@IsHD", item.IsHD);
|
||||
@@ -1237,7 +1232,7 @@ namespace Emby.Server.Implementations.Data
|
||||
|
||||
foreach (var row in statement.ExecuteQuery())
|
||||
{
|
||||
return GetItem(row);
|
||||
return GetItem(row, new InternalItemsQuery());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1246,11 +1241,6 @@ namespace Emby.Server.Implementations.Data
|
||||
}
|
||||
}
|
||||
|
||||
private BaseItem GetItem(IReadOnlyList<IResultSetValue> reader)
|
||||
{
|
||||
return GetItem(reader, new InternalItemsQuery());
|
||||
}
|
||||
|
||||
private bool TypeRequiresDeserialization(Type type)
|
||||
{
|
||||
if (_config.Configuration.SkipDeserializationForBasicTypes)
|
||||
@@ -1535,11 +1525,14 @@ namespace Emby.Server.Implementations.Data
|
||||
}
|
||||
index++;
|
||||
|
||||
if (!reader.IsDBNull(index))
|
||||
if (query.HasField(ItemFields.ExternalEtag))
|
||||
{
|
||||
item.ExternalEtag = reader.GetString(index);
|
||||
if (!reader.IsDBNull(index))
|
||||
{
|
||||
item.ExternalEtag = reader.GetString(index);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
index++;
|
||||
|
||||
if (!reader.IsDBNull(index))
|
||||
{
|
||||
@@ -1614,7 +1607,7 @@ namespace Emby.Server.Implementations.Data
|
||||
{
|
||||
if (!reader.IsDBNull(index))
|
||||
{
|
||||
item.ForcedSortName = reader.GetString(index);
|
||||
item.SortName = reader.GetString(index);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
@@ -1821,29 +1814,41 @@ namespace Emby.Server.Implementations.Data
|
||||
}
|
||||
index++;
|
||||
|
||||
if (!reader.IsDBNull(index))
|
||||
if (query.HasField(ItemFields.PresentationUniqueKey))
|
||||
{
|
||||
item.PresentationUniqueKey = reader.GetString(index);
|
||||
if (!reader.IsDBNull(index))
|
||||
{
|
||||
item.PresentationUniqueKey = reader.GetString(index);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
index++;
|
||||
|
||||
if (!reader.IsDBNull(index))
|
||||
if (query.HasField(ItemFields.InheritedParentalRatingValue))
|
||||
{
|
||||
item.InheritedParentalRatingValue = reader.GetInt32(index);
|
||||
if (!reader.IsDBNull(index))
|
||||
{
|
||||
item.InheritedParentalRatingValue = reader.GetInt32(index);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
index++;
|
||||
|
||||
if (!reader.IsDBNull(index))
|
||||
if (query.HasField(ItemFields.Tags))
|
||||
{
|
||||
item.InheritedTags = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
||||
if (!reader.IsDBNull(index))
|
||||
{
|
||||
item.InheritedTags = reader.GetString(index).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
|
||||
}
|
||||
index++;
|
||||
}
|
||||
index++;
|
||||
|
||||
if (!reader.IsDBNull(index))
|
||||
if (query.HasField(ItemFields.ExternalSeriesId))
|
||||
{
|
||||
item.ExternalSeriesId = reader.GetString(index);
|
||||
if (!reader.IsDBNull(index))
|
||||
{
|
||||
item.ExternalSeriesId = reader.GetString(index);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
index++;
|
||||
|
||||
if (query.HasField(ItemFields.Taglines))
|
||||
{
|
||||
@@ -2240,12 +2245,16 @@ namespace Emby.Server.Implementations.Data
|
||||
}
|
||||
if (field == ItemFields.SortName)
|
||||
{
|
||||
return new[] { "ForcedSortName" };
|
||||
return new[] { "SortName" };
|
||||
}
|
||||
if (field == ItemFields.Taglines)
|
||||
{
|
||||
return new[] { "Tagline" };
|
||||
}
|
||||
if (field == ItemFields.Tags)
|
||||
{
|
||||
return new[] { "Tags", "InheritedTags" };
|
||||
}
|
||||
|
||||
return new[] { field.ToString() };
|
||||
}
|
||||
@@ -4916,7 +4925,9 @@ namespace Emby.Server.Implementations.Data
|
||||
var columns = _retriveItemColumns.ToList();
|
||||
columns.AddRange(itemCountColumns.Select(i => i.Item2).ToArray());
|
||||
|
||||
var commandText = "select " + string.Join(",", GetFinalColumnsToSelect(query, columns.ToArray())) + GetFromText();
|
||||
columns = GetFinalColumnsToSelect(query, columns.ToArray()).ToList();
|
||||
|
||||
var commandText = "select " + string.Join(",", columns.ToArray()) + GetFromText();
|
||||
commandText += GetJoinUserDataText(query);
|
||||
|
||||
var innerQuery = new InternalItemsQuery(query.User)
|
||||
@@ -5042,7 +5053,7 @@ namespace Emby.Server.Implementations.Data
|
||||
|
||||
foreach (var row in statement.ExecuteQuery())
|
||||
{
|
||||
var item = GetItem(row);
|
||||
var item = GetItem(row, query);
|
||||
if (item != null)
|
||||
{
|
||||
var countStartColumn = columns.Count - 1;
|
||||
|
||||
@@ -127,7 +127,11 @@ namespace Emby.Server.Implementations.Dto
|
||||
{
|
||||
var libraryItems = byName.GetTaggedItems(new InternalItemsQuery(user)
|
||||
{
|
||||
Recursive = true
|
||||
Recursive = true,
|
||||
DtoOptions = new DtoOptions(false)
|
||||
{
|
||||
EnableImages = false
|
||||
}
|
||||
});
|
||||
|
||||
SetItemByNameInfo(item, dto, libraryItems.ToList(), user);
|
||||
@@ -177,7 +181,11 @@ namespace Emby.Server.Implementations.Dto
|
||||
{
|
||||
if (options.Fields.Contains(ItemFields.ItemCounts))
|
||||
{
|
||||
SetItemByNameInfo(item, dto, GetTaggedItems(byName, user), user);
|
||||
SetItemByNameInfo(item, dto, GetTaggedItems(byName, user, new DtoOptions(false)
|
||||
{
|
||||
EnableImages = false
|
||||
|
||||
}), user);
|
||||
}
|
||||
|
||||
FillSyncInfo(dto, item, options, user, syncDictionary);
|
||||
@@ -189,11 +197,12 @@ namespace Emby.Server.Implementations.Dto
|
||||
return dto;
|
||||
}
|
||||
|
||||
private List<BaseItem> GetTaggedItems(IItemByName byName, User user)
|
||||
private List<BaseItem> GetTaggedItems(IItemByName byName, User user, DtoOptions options)
|
||||
{
|
||||
var items = byName.GetTaggedItems(new InternalItemsQuery(user)
|
||||
{
|
||||
Recursive = true
|
||||
Recursive = true,
|
||||
DtoOptions = options
|
||||
|
||||
}).ToList();
|
||||
|
||||
@@ -595,16 +604,17 @@ namespace Emby.Server.Implementations.Dto
|
||||
{
|
||||
if (!string.IsNullOrEmpty(item.Album))
|
||||
{
|
||||
var parentAlbum = _libraryManager.GetItemList(new InternalItemsQuery
|
||||
var parentAlbumIds = _libraryManager.GetItemIds(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(MusicAlbum).Name },
|
||||
Name = item.Album
|
||||
Name = item.Album,
|
||||
Limit = 1
|
||||
|
||||
}).FirstOrDefault();
|
||||
});
|
||||
|
||||
if (parentAlbum != null)
|
||||
if (parentAlbumIds.Count > 0)
|
||||
{
|
||||
dto.AlbumId = GetDtoId(parentAlbum);
|
||||
dto.AlbumId = parentAlbumIds[0].ToString("N");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Emby.Server.Implementations.Library;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
@@ -588,7 +589,8 @@ namespace Emby.Server.Implementations.FileOrganization
|
||||
var series = _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Series).Name },
|
||||
Recursive = true
|
||||
Recursive = true,
|
||||
DtoOptions = new DtoOptions(true)
|
||||
})
|
||||
.Cast<Series>()
|
||||
.Select(i => NameUtils.GetMatchScore(nameWithoutYear, yearInName, i))
|
||||
@@ -607,7 +609,8 @@ namespace Emby.Server.Implementations.FileOrganization
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Series).Name },
|
||||
Recursive = true,
|
||||
Name = info.ItemName
|
||||
Name = info.ItemName,
|
||||
DtoOptions = new DtoOptions(true)
|
||||
|
||||
}).Cast<Series>().FirstOrDefault();
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ using SortOrder = MediaBrowser.Model.Entities.SortOrder;
|
||||
using VideoResolver = MediaBrowser.Naming.Video.VideoResolver;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.LiveTv;
|
||||
using MediaBrowser.Model.Tasks;
|
||||
|
||||
@@ -313,7 +314,8 @@ namespace Emby.Server.Implementations.Library
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Season).Name },
|
||||
Recursive = true,
|
||||
IndexNumber = 0
|
||||
IndexNumber = 0,
|
||||
DtoOptions = new DtoOptions(true)
|
||||
|
||||
}).Cast<Season>()
|
||||
.Where(i => !string.Equals(i.Name, newName, StringComparison.Ordinal))
|
||||
@@ -342,7 +344,7 @@ namespace Emby.Server.Implementations.Library
|
||||
}
|
||||
if (item is IItemByName)
|
||||
{
|
||||
if (!(item is MusicArtist) && !(item is Studio))
|
||||
if (!(item is MusicArtist))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -868,7 +870,8 @@ namespace Emby.Server.Implementations.Library
|
||||
IsFolder = isFolder,
|
||||
SortBy = new[] { ItemSortBy.DateCreated },
|
||||
SortOrder = SortOrder.Descending,
|
||||
Limit = 1
|
||||
Limit = 1,
|
||||
DtoOptions = new DtoOptions(true)
|
||||
};
|
||||
|
||||
return GetItemList(query)
|
||||
@@ -981,7 +984,8 @@ namespace Emby.Server.Implementations.Library
|
||||
var existing = GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(T).Name },
|
||||
Name = name
|
||||
Name = name,
|
||||
DtoOptions = new DtoOptions(true)
|
||||
|
||||
}).Cast<MusicArtist>()
|
||||
.OrderBy(i => i.IsAccessedByName ? 1 : 0)
|
||||
|
||||
@@ -6,6 +6,7 @@ using System;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
|
||||
@@ -27,7 +28,8 @@ namespace Emby.Server.Implementations.Library
|
||||
var items = _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(BoxSet).Name, typeof(Game).Name, typeof(Movie).Name, typeof(Series).Name },
|
||||
Recursive = true
|
||||
Recursive = true,
|
||||
DtoOptions = new DtoOptions(true)
|
||||
|
||||
}).OfType<IHasTrailers>().ToList();
|
||||
|
||||
@@ -40,7 +42,8 @@ namespace Emby.Server.Implementations.Library
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Trailer).Name },
|
||||
TrailerTypes = trailerTypes,
|
||||
Recursive = true
|
||||
Recursive = true,
|
||||
DtoOptions = new DtoOptions(false)
|
||||
|
||||
}).ToArray();
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ using MediaBrowser.Controller.Playlists;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Model.Querying;
|
||||
|
||||
namespace Emby.Server.Implementations.Library
|
||||
@@ -18,47 +19,48 @@ namespace Emby.Server.Implementations.Library
|
||||
_libraryManager = libraryManager;
|
||||
}
|
||||
|
||||
public IEnumerable<Audio> GetInstantMixFromSong(Audio item, User user)
|
||||
public IEnumerable<Audio> GetInstantMixFromSong(Audio item, User user, DtoOptions dtoOptions)
|
||||
{
|
||||
var list = new List<Audio>
|
||||
{
|
||||
item
|
||||
};
|
||||
|
||||
return list.Concat(GetInstantMixFromGenres(item.Genres, user));
|
||||
return list.Concat(GetInstantMixFromGenres(item.Genres, user, dtoOptions));
|
||||
}
|
||||
|
||||
public IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist item, User user)
|
||||
public IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist item, User user, DtoOptions dtoOptions)
|
||||
{
|
||||
return GetInstantMixFromGenres(item.Genres, user);
|
||||
return GetInstantMixFromGenres(item.Genres, user, dtoOptions);
|
||||
}
|
||||
|
||||
public IEnumerable<Audio> GetInstantMixFromAlbum(MusicAlbum item, User user)
|
||||
public IEnumerable<Audio> GetInstantMixFromAlbum(MusicAlbum item, User user, DtoOptions dtoOptions)
|
||||
{
|
||||
return GetInstantMixFromGenres(item.Genres, user);
|
||||
return GetInstantMixFromGenres(item.Genres, user, dtoOptions);
|
||||
}
|
||||
|
||||
public IEnumerable<Audio> GetInstantMixFromFolder(Folder item, User user)
|
||||
public IEnumerable<Audio> GetInstantMixFromFolder(Folder item, User user, DtoOptions dtoOptions)
|
||||
{
|
||||
var genres = item
|
||||
.GetRecursiveChildren(user, new InternalItemsQuery(user)
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Audio).Name }
|
||||
IncludeItemTypes = new[] { typeof(Audio).Name },
|
||||
DtoOptions = dtoOptions
|
||||
})
|
||||
.Cast<Audio>()
|
||||
.SelectMany(i => i.Genres)
|
||||
.Concat(item.Genres)
|
||||
.DistinctNames();
|
||||
|
||||
return GetInstantMixFromGenres(genres, user);
|
||||
return GetInstantMixFromGenres(genres, user, dtoOptions);
|
||||
}
|
||||
|
||||
public IEnumerable<Audio> GetInstantMixFromPlaylist(Playlist item, User user)
|
||||
public IEnumerable<Audio> GetInstantMixFromPlaylist(Playlist item, User user, DtoOptions dtoOptions)
|
||||
{
|
||||
return GetInstantMixFromGenres(item.Genres, user);
|
||||
return GetInstantMixFromGenres(item.Genres, user, dtoOptions);
|
||||
}
|
||||
|
||||
public IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user)
|
||||
public IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user, DtoOptions dtoOptions)
|
||||
{
|
||||
var genreIds = genres.DistinctNames().Select(i =>
|
||||
{
|
||||
@@ -73,10 +75,10 @@ namespace Emby.Server.Implementations.Library
|
||||
|
||||
}).Where(i => i != null);
|
||||
|
||||
return GetInstantMixFromGenreIds(genreIds, user);
|
||||
return GetInstantMixFromGenreIds(genreIds, user, dtoOptions);
|
||||
}
|
||||
|
||||
public IEnumerable<Audio> GetInstantMixFromGenreIds(IEnumerable<string> genreIds, User user)
|
||||
public IEnumerable<Audio> GetInstantMixFromGenreIds(IEnumerable<string> genreIds, User user, DtoOptions dtoOptions)
|
||||
{
|
||||
return _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||
{
|
||||
@@ -86,47 +88,49 @@ namespace Emby.Server.Implementations.Library
|
||||
|
||||
Limit = 200,
|
||||
|
||||
SortBy = new[] { ItemSortBy.Random }
|
||||
SortBy = new[] { ItemSortBy.Random },
|
||||
|
||||
DtoOptions = dtoOptions
|
||||
|
||||
}).Cast<Audio>();
|
||||
}
|
||||
|
||||
public IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user)
|
||||
public IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user, DtoOptions dtoOptions)
|
||||
{
|
||||
var genre = item as MusicGenre;
|
||||
if (genre != null)
|
||||
{
|
||||
return GetInstantMixFromGenreIds(new[] { item.Id.ToString("N") }, user);
|
||||
return GetInstantMixFromGenreIds(new[] { item.Id.ToString("N") }, user, dtoOptions);
|
||||
}
|
||||
|
||||
var playlist = item as Playlist;
|
||||
if (playlist != null)
|
||||
{
|
||||
return GetInstantMixFromPlaylist(playlist, user);
|
||||
return GetInstantMixFromPlaylist(playlist, user, dtoOptions);
|
||||
}
|
||||
|
||||
var album = item as MusicAlbum;
|
||||
if (album != null)
|
||||
{
|
||||
return GetInstantMixFromAlbum(album, user);
|
||||
return GetInstantMixFromAlbum(album, user, dtoOptions);
|
||||
}
|
||||
|
||||
var artist = item as MusicArtist;
|
||||
if (artist != null)
|
||||
{
|
||||
return GetInstantMixFromArtist(artist, user);
|
||||
return GetInstantMixFromArtist(artist, user, dtoOptions);
|
||||
}
|
||||
|
||||
var song = item as Audio;
|
||||
if (song != null)
|
||||
{
|
||||
return GetInstantMixFromSong(song, user);
|
||||
return GetInstantMixFromSong(song, user, dtoOptions);
|
||||
}
|
||||
|
||||
var folder = item as Folder;
|
||||
if (folder != null)
|
||||
{
|
||||
return GetInstantMixFromFolder(folder, user);
|
||||
return GetInstantMixFromFolder(folder, user, dtoOptions);
|
||||
}
|
||||
|
||||
return new Audio[] { };
|
||||
|
||||
@@ -8,6 +8,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Extensions;
|
||||
|
||||
namespace Emby.Server.Implementations.Library
|
||||
@@ -175,7 +176,17 @@ namespace Emby.Server.Implementations.Library
|
||||
IsNews = query.IsNews,
|
||||
IsSeries = query.IsSeries,
|
||||
IsSports = query.IsSports,
|
||||
MediaTypes = query.MediaTypes
|
||||
MediaTypes = query.MediaTypes,
|
||||
|
||||
DtoOptions = new DtoOptions
|
||||
{
|
||||
Fields = new List<ItemFields>
|
||||
{
|
||||
ItemFields.AirTime,
|
||||
ItemFields.DateCreated,
|
||||
ItemFields.ChannelInfo
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Add search hints based on item name
|
||||
|
||||
@@ -12,6 +12,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Model.Globalization;
|
||||
|
||||
@@ -190,11 +191,11 @@ namespace Emby.Server.Implementations.Library
|
||||
return _libraryManager.GetShadowView(parent, viewType, sortName, cancellationToken);
|
||||
}
|
||||
|
||||
public List<Tuple<BaseItem, List<BaseItem>>> GetLatestItems(LatestItemsQuery request)
|
||||
public List<Tuple<BaseItem, List<BaseItem>>> GetLatestItems(LatestItemsQuery request, DtoOptions options)
|
||||
{
|
||||
var user = _userManager.GetUserById(request.UserId);
|
||||
|
||||
var libraryItems = GetItemsForLatestItems(user, request);
|
||||
var libraryItems = GetItemsForLatestItems(user, request, options);
|
||||
|
||||
var list = new List<Tuple<BaseItem, List<BaseItem>>>();
|
||||
|
||||
@@ -230,7 +231,7 @@ namespace Emby.Server.Implementations.Library
|
||||
return list;
|
||||
}
|
||||
|
||||
private IEnumerable<BaseItem> GetItemsForLatestItems(User user, LatestItemsQuery request)
|
||||
private IEnumerable<BaseItem> GetItemsForLatestItems(User user, LatestItemsQuery request, DtoOptions options)
|
||||
{
|
||||
var parentId = request.ParentId;
|
||||
|
||||
@@ -289,7 +290,8 @@ namespace Emby.Server.Implementations.Library
|
||||
IsVirtualItem = false,
|
||||
Limit = limit * 5,
|
||||
SourceTypes = parents.Count == 0 ? new[] { SourceType.Library } : new SourceType[] { },
|
||||
IsPlayed = isPlayed
|
||||
IsPlayed = isPlayed,
|
||||
DtoOptions = options
|
||||
|
||||
}, parents);
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ using MediaBrowser.Common.Events;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.IO;
|
||||
@@ -1232,7 +1233,9 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||
RequiresClosing = false,
|
||||
Protocol = MediaBrowser.Model.MediaInfo.MediaProtocol.Http,
|
||||
BufferMs = 0,
|
||||
IgnoreDts = true
|
||||
IgnoreDts = true,
|
||||
IgnoreIndex = true,
|
||||
GenPtsInput = true
|
||||
};
|
||||
|
||||
var isAudio = false;
|
||||
@@ -1640,7 +1643,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||
SortOrder = SortOrder.Descending,
|
||||
IsVirtualItem = false,
|
||||
IsFolder = false,
|
||||
Recursive = true
|
||||
Recursive = true,
|
||||
DtoOptions = new DtoOptions(true)
|
||||
|
||||
}).ConfigureAwait(false))
|
||||
.Items
|
||||
@@ -1977,7 +1981,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
|
||||
Limit = 1,
|
||||
ExternalId = timer.ProgramId
|
||||
ExternalId = timer.ProgramId,
|
||||
DtoOptions = new DtoOptions(true)
|
||||
|
||||
}).FirstOrDefault() as LiveTvProgram;
|
||||
|
||||
@@ -2511,16 +2516,17 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||
|
||||
if (program.EpisodeNumber.HasValue && program.SeasonNumber.HasValue)
|
||||
{
|
||||
var result = _libraryManager.GetItemsResult(new InternalItemsQuery
|
||||
var result = _libraryManager.GetItemIds(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Episode).Name },
|
||||
ParentIndexNumber = program.SeasonNumber.Value,
|
||||
IndexNumber = program.EpisodeNumber.Value,
|
||||
AncestorIds = seriesIds,
|
||||
IsVirtualItem = false
|
||||
IsVirtualItem = false,
|
||||
Limit = 1
|
||||
});
|
||||
|
||||
if (result.TotalRecordCount > 0)
|
||||
if (result.Count > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -200,27 +200,32 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||
flags.Add("+genpts");
|
||||
}
|
||||
|
||||
var inputModifiers = "-async 1 -vsync -1";
|
||||
var inputModifier = "-async 1 -vsync -1";
|
||||
|
||||
if (flags.Count > 0)
|
||||
{
|
||||
inputModifiers += " -fflags " + string.Join("", flags.ToArray());
|
||||
inputModifier += " -fflags " + string.Join("", flags.ToArray());
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(GetEncodingOptions().HardwareAccelerationType))
|
||||
{
|
||||
inputModifiers += " -hwaccel auto";
|
||||
inputModifier += " -hwaccel auto";
|
||||
}
|
||||
|
||||
if (mediaSource.ReadAtNativeFramerate)
|
||||
{
|
||||
inputModifiers += " -re";
|
||||
inputModifier += " -re";
|
||||
}
|
||||
|
||||
if (mediaSource.RequiresLooping)
|
||||
{
|
||||
inputModifier += " -stream_loop -1";
|
||||
}
|
||||
|
||||
var analyzeDurationSeconds = 5;
|
||||
var analyzeDuration = " -analyzeduration " +
|
||||
(analyzeDurationSeconds * 1000000).ToString(CultureInfo.InvariantCulture);
|
||||
inputModifiers += analyzeDuration;
|
||||
inputModifier += analyzeDuration;
|
||||
|
||||
var subtitleArgs = CopySubtitles ? " -codec:s copy" : " -sn";
|
||||
|
||||
@@ -239,7 +244,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||
durationParam,
|
||||
outputParam);
|
||||
|
||||
return inputModifiers + " " + commandLineArgs;
|
||||
return inputModifier + " " + commandLineArgs;
|
||||
}
|
||||
|
||||
private string GetAudioArgs(MediaSourceInfo mediaSource)
|
||||
|
||||
@@ -149,7 +149,11 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
IncludeItemTypes = new string[] { typeof(Series).Name },
|
||||
Name = seriesName,
|
||||
Limit = 1,
|
||||
ImageTypes = new ImageType[] { ImageType.Thumb }
|
||||
ImageTypes = new ImageType[] { ImageType.Thumb },
|
||||
DtoOptions = new DtoOptions
|
||||
{
|
||||
Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
|
||||
}
|
||||
|
||||
}).FirstOrDefault();
|
||||
|
||||
@@ -191,7 +195,11 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name },
|
||||
ExternalSeriesId = programSeriesId,
|
||||
Limit = 1,
|
||||
ImageTypes = new ImageType[] { ImageType.Primary }
|
||||
ImageTypes = new ImageType[] { ImageType.Primary },
|
||||
DtoOptions = new DtoOptions
|
||||
{
|
||||
Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
|
||||
}
|
||||
|
||||
}).FirstOrDefault();
|
||||
|
||||
@@ -239,7 +247,11 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
IncludeItemTypes = new string[] { typeof(Series).Name },
|
||||
Name = seriesName,
|
||||
Limit = 1,
|
||||
ImageTypes = new ImageType[] { ImageType.Thumb }
|
||||
ImageTypes = new ImageType[] { ImageType.Thumb },
|
||||
DtoOptions = new DtoOptions
|
||||
{
|
||||
Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
|
||||
}
|
||||
|
||||
}).FirstOrDefault();
|
||||
|
||||
@@ -281,14 +293,22 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
IncludeItemTypes = new string[] { typeof(Series).Name },
|
||||
Name = seriesName,
|
||||
Limit = 1,
|
||||
ImageTypes = new ImageType[] { ImageType.Primary }
|
||||
ImageTypes = new ImageType[] { ImageType.Primary },
|
||||
DtoOptions = new DtoOptions
|
||||
{
|
||||
Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
|
||||
}
|
||||
|
||||
}).FirstOrDefault() ?? _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name },
|
||||
ExternalSeriesId = programSeriesId,
|
||||
Limit = 1,
|
||||
ImageTypes = new ImageType[] { ImageType.Primary }
|
||||
ImageTypes = new ImageType[] { ImageType.Primary },
|
||||
DtoOptions = new DtoOptions
|
||||
{
|
||||
Fields = new List<MediaBrowser.Model.Querying.ItemFields>()
|
||||
}
|
||||
|
||||
}).FirstOrDefault();
|
||||
|
||||
|
||||
@@ -173,7 +173,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<QueryResult<LiveTvChannel>> GetInternalChannels(LiveTvChannelQuery query, CancellationToken cancellationToken)
|
||||
public async Task<QueryResult<LiveTvChannel>> GetInternalChannels(LiveTvChannelQuery query, DtoOptions dtoOptions, CancellationToken cancellationToken)
|
||||
{
|
||||
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
|
||||
|
||||
@@ -192,7 +192,8 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
IsFavorite = query.IsFavorite,
|
||||
IsLiked = query.IsLiked,
|
||||
StartIndex = query.StartIndex,
|
||||
Limit = query.Limit
|
||||
Limit = query.Limit,
|
||||
DtoOptions = dtoOptions
|
||||
};
|
||||
|
||||
internalQuery.OrderBy.AddRange(query.SortBy.Select(i => new Tuple<string, SortOrder>(i, query.SortOrder ?? SortOrder.Ascending)));
|
||||
@@ -249,7 +250,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
{
|
||||
Id = id
|
||||
|
||||
}, cancellationToken).ConfigureAwait(false);
|
||||
}, new DtoOptions(), cancellationToken).ConfigureAwait(false);
|
||||
|
||||
return result.Items.FirstOrDefault();
|
||||
}
|
||||
@@ -865,13 +866,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
return item.Id;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private string GetExternalSeriesIdLegacy(BaseItem item)
|
||||
{
|
||||
return item.GetProviderId("ProviderExternalSeriesId");
|
||||
}
|
||||
|
||||
public async Task<BaseItemDto> GetProgram(string id, CancellationToken cancellationToken, User user = null)
|
||||
{
|
||||
var program = GetInternalProgram(id);
|
||||
@@ -882,11 +876,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
|
||||
var externalSeriesId = program.ExternalSeriesId;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(externalSeriesId))
|
||||
{
|
||||
externalSeriesId = GetExternalSeriesIdLegacy(program);
|
||||
}
|
||||
|
||||
list.Add(new Tuple<BaseItemDto, string, string, string>(dto, program.ServiceName, GetItemExternalId(program), externalSeriesId));
|
||||
|
||||
await AddRecordingInfo(list, cancellationToken).ConfigureAwait(false);
|
||||
@@ -906,6 +895,8 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
query.SortBy = new[] { ItemSortBy.StartDate };
|
||||
}
|
||||
|
||||
RemoveFields(options);
|
||||
|
||||
var internalQuery = new InternalItemsQuery(user)
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
|
||||
@@ -965,8 +956,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
|
||||
var queryResult = _libraryManager.QueryItems(internalQuery);
|
||||
|
||||
RemoveFields(options);
|
||||
|
||||
var returnArray = (await _dtoService.GetBaseItemDtos(queryResult.Items, options, user).ConfigureAwait(false)).ToArray();
|
||||
|
||||
var result = new QueryResult<BaseItemDto>
|
||||
@@ -1045,12 +1034,12 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
|
||||
public async Task<QueryResult<BaseItemDto>> GetRecommendedPrograms(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken)
|
||||
{
|
||||
RemoveFields(options);
|
||||
|
||||
var internalResult = await GetRecommendedProgramsInternal(query, options, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var user = _userManager.GetUserById(query.UserId);
|
||||
|
||||
RemoveFields(options);
|
||||
|
||||
var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray();
|
||||
|
||||
var result = new QueryResult<BaseItemDto>
|
||||
@@ -1333,7 +1322,8 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
{
|
||||
|
||||
IncludeItemTypes = new string[] { typeof(LiveTvProgram).Name },
|
||||
ChannelIds = new string[] { currentChannel.Id.ToString("N") }
|
||||
ChannelIds = new string[] { currentChannel.Id.ToString("N") },
|
||||
DtoOptions = new DtoOptions(true)
|
||||
|
||||
}).Cast<LiveTvProgram>().ToDictionary(i => i.Id);
|
||||
|
||||
@@ -1436,7 +1426,8 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
{
|
||||
var list = _itemRepo.GetItemIdsList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = validTypes
|
||||
IncludeItemTypes = validTypes,
|
||||
DtoOptions = new DtoOptions(false)
|
||||
|
||||
}).ToList();
|
||||
|
||||
@@ -1663,6 +1654,8 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
|
||||
includeItemTypes.Add(typeof(Series).Name);
|
||||
|
||||
RemoveFields(options);
|
||||
|
||||
var internalResult = _libraryManager.GetItemsResult(new InternalItemsQuery(user)
|
||||
{
|
||||
Recursive = true,
|
||||
@@ -1672,11 +1665,10 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
SortOrder = SortOrder.Descending,
|
||||
EnableTotalRecordCount = query.EnableTotalRecordCount,
|
||||
IncludeItemTypes = includeItemTypes.ToArray(),
|
||||
ExcludeItemTypes = excludeItemTypes.ToArray()
|
||||
ExcludeItemTypes = excludeItemTypes.ToArray(),
|
||||
DtoOptions = options
|
||||
});
|
||||
|
||||
RemoveFields(options);
|
||||
|
||||
var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray();
|
||||
|
||||
return new QueryResult<BaseItemDto>
|
||||
@@ -1686,7 +1678,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, CancellationToken cancellationToken)
|
||||
public async Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, DtoOptions options, CancellationToken cancellationToken)
|
||||
{
|
||||
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
|
||||
if (user != null && !IsLiveTvEnabled(user))
|
||||
@@ -1696,14 +1688,15 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
|
||||
if (_services.Count == 1 && !(query.IsInProgress ?? false) && (!query.IsLibraryItem.HasValue || query.IsLibraryItem.Value))
|
||||
{
|
||||
return GetEmbyRecordings(query, new DtoOptions(), user);
|
||||
return GetEmbyRecordings(query, options, user);
|
||||
}
|
||||
|
||||
await RefreshRecordings(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var internalQuery = new InternalItemsQuery(user)
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(LiveTvVideoRecording).Name, typeof(LiveTvAudioRecording).Name }
|
||||
IncludeItemTypes = new[] { typeof(LiveTvVideoRecording).Name, typeof(LiveTvAudioRecording).Name },
|
||||
DtoOptions = options
|
||||
};
|
||||
|
||||
if (!string.IsNullOrEmpty(query.ChannelId))
|
||||
@@ -1872,11 +1865,6 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
|
||||
var externalSeriesId = program.ExternalSeriesId;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(externalSeriesId))
|
||||
{
|
||||
externalSeriesId = GetExternalSeriesIdLegacy(program);
|
||||
}
|
||||
|
||||
programTuples.Add(new Tuple<BaseItemDto, string, string, string>(dto, serviceName, GetItemExternalId(program), externalSeriesId));
|
||||
}
|
||||
|
||||
@@ -1953,10 +1941,10 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
{
|
||||
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
|
||||
|
||||
var internalResult = await GetInternalRecordings(query, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
RemoveFields(options);
|
||||
|
||||
var internalResult = await GetInternalRecordings(query, options, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray();
|
||||
|
||||
return new QueryResult<BaseItemDto>
|
||||
@@ -2299,7 +2287,8 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
MinEndDate = now,
|
||||
Limit = channelIds.Length,
|
||||
SortBy = new[] { "StartDate" },
|
||||
TopParentIds = new[] { GetInternalLiveTvFolder(CancellationToken.None).Result.Id.ToString("N") }
|
||||
TopParentIds = new[] { GetInternalLiveTvFolder(CancellationToken.None).Result.Id.ToString("N") },
|
||||
DtoOptions = options
|
||||
|
||||
}).ToList() : new List<BaseItem>();
|
||||
|
||||
@@ -2601,7 +2590,7 @@ namespace Emby.Server.Implementations.LiveTv
|
||||
{
|
||||
UserId = query.UserId
|
||||
|
||||
}, cancellationToken).ConfigureAwait(false);
|
||||
}, new DtoOptions(), cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var recordings = recordingResult.Items.OfType<ILiveTvRecording>().ToList();
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Emby.Server.Implementations.Images;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
@@ -89,7 +90,8 @@ namespace Emby.Server.Implementations.Playlists
|
||||
SortBy = new[] { ItemSortBy.Random },
|
||||
Limit = 4,
|
||||
Recursive = true,
|
||||
ImageTypes = new[] { ImageType.Primary }
|
||||
ImageTypes = new[] { ImageType.Primary },
|
||||
DtoOptions = new DtoOptions(false)
|
||||
|
||||
}).ToList();
|
||||
|
||||
@@ -120,7 +122,8 @@ namespace Emby.Server.Implementations.Playlists
|
||||
SortBy = new[] { ItemSortBy.Random },
|
||||
Limit = 4,
|
||||
Recursive = true,
|
||||
ImageTypes = new[] { ImageType.Primary }
|
||||
ImageTypes = new[] { ImageType.Primary },
|
||||
DtoOptions = new DtoOptions(false)
|
||||
|
||||
}).ToList();
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
|
||||
@@ -135,7 +136,10 @@ namespace Emby.Server.Implementations.Playlists
|
||||
|
||||
if (options.ItemIdList.Count > 0)
|
||||
{
|
||||
await AddToPlaylistInternal(playlist.Id.ToString("N"), options.ItemIdList, user);
|
||||
await AddToPlaylistInternal(playlist.Id.ToString("N"), options.ItemIdList, user, new DtoOptions(false)
|
||||
{
|
||||
EnableImages = true
|
||||
});
|
||||
}
|
||||
|
||||
return new PlaylistCreationResult
|
||||
@@ -160,21 +164,24 @@ namespace Emby.Server.Implementations.Playlists
|
||||
return path;
|
||||
}
|
||||
|
||||
private Task<IEnumerable<BaseItem>> GetPlaylistItems(IEnumerable<string> itemIds, string playlistMediaType, User user)
|
||||
private Task<IEnumerable<BaseItem>> GetPlaylistItems(IEnumerable<string> itemIds, string playlistMediaType, User user, DtoOptions options)
|
||||
{
|
||||
var items = itemIds.Select(i => _libraryManager.GetItemById(i)).Where(i => i != null);
|
||||
|
||||
return Playlist.GetPlaylistItems(playlistMediaType, items, user);
|
||||
return Playlist.GetPlaylistItems(playlistMediaType, items, user, options);
|
||||
}
|
||||
|
||||
public Task AddToPlaylist(string playlistId, IEnumerable<string> itemIds, string userId)
|
||||
{
|
||||
var user = string.IsNullOrWhiteSpace(userId) ? null : _userManager.GetUserById(userId);
|
||||
|
||||
return AddToPlaylistInternal(playlistId, itemIds, user);
|
||||
return AddToPlaylistInternal(playlistId, itemIds, user, new DtoOptions(false)
|
||||
{
|
||||
EnableImages = true
|
||||
});
|
||||
}
|
||||
|
||||
private async Task AddToPlaylistInternal(string playlistId, IEnumerable<string> itemIds, User user)
|
||||
private async Task AddToPlaylistInternal(string playlistId, IEnumerable<string> itemIds, User user, DtoOptions options)
|
||||
{
|
||||
var playlist = _libraryManager.GetItemById(playlistId) as Playlist;
|
||||
|
||||
@@ -185,7 +192,7 @@ namespace Emby.Server.Implementations.Playlists
|
||||
|
||||
var list = new List<LinkedChild>();
|
||||
|
||||
var items = (await GetPlaylistItems(itemIds, playlist.MediaType, user).ConfigureAwait(false))
|
||||
var items = (await GetPlaylistItems(itemIds, playlist.MediaType, user, options).ConfigureAwait(false))
|
||||
.Where(i => i.SupportsAddingToPlaylist)
|
||||
.ToList();
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Model.Entities;
|
||||
@@ -85,7 +86,9 @@ namespace Emby.Server.Implementations.ScheduledTasks
|
||||
{
|
||||
MediaTypes = new[] { MediaType.Video },
|
||||
IsFolder = false,
|
||||
Recursive = true
|
||||
Recursive = true,
|
||||
DtoOptions = new DtoOptions(false)
|
||||
|
||||
})
|
||||
.OfType<Video>()
|
||||
.ToList();
|
||||
|
||||
@@ -1022,7 +1022,10 @@ namespace Emby.Server.Implementations.Session
|
||||
var series = episode.Series;
|
||||
if (series != null)
|
||||
{
|
||||
var episodes = series.GetEpisodes(user)
|
||||
var episodes = series.GetEpisodes(user, new DtoOptions(false)
|
||||
{
|
||||
EnableImages = false
|
||||
})
|
||||
.Where(i => !i.IsVirtualItem)
|
||||
.SkipWhile(i => i.Id != episode.Id)
|
||||
.ToList();
|
||||
@@ -1065,7 +1068,11 @@ namespace Emby.Server.Implementations.Session
|
||||
var items = byName.GetTaggedItems(new InternalItemsQuery(user)
|
||||
{
|
||||
IsFolder = false,
|
||||
Recursive = true
|
||||
Recursive = true,
|
||||
DtoOptions = new DtoOptions(false)
|
||||
{
|
||||
EnableImages = false
|
||||
}
|
||||
});
|
||||
|
||||
return FilterToSingleMediaType(items)
|
||||
@@ -1080,7 +1087,11 @@ namespace Emby.Server.Implementations.Session
|
||||
var itemsResult = await folder.GetItems(new InternalItemsQuery(user)
|
||||
{
|
||||
Recursive = true,
|
||||
IsFolder = false
|
||||
IsFolder = false,
|
||||
DtoOptions = new DtoOptions(false)
|
||||
{
|
||||
EnableImages = false
|
||||
}
|
||||
|
||||
}).ConfigureAwait(false);
|
||||
|
||||
@@ -1111,7 +1122,7 @@ namespace Emby.Server.Implementations.Session
|
||||
return new List<BaseItem>();
|
||||
}
|
||||
|
||||
return _musicManager.GetInstantMixFromItem(item, user);
|
||||
return _musicManager.GetInstantMixFromItem(item, user, new DtoOptions(false) { EnableImages = false });
|
||||
}
|
||||
|
||||
public Task SendBrowseCommand(string controllingSessionId, string sessionId, BrowseRequest command, CancellationToken cancellationToken)
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
@@ -58,7 +59,8 @@ namespace Emby.Server.Implementations.TV
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Series).Name },
|
||||
Recursive = true,
|
||||
GroupByPresentationUniqueKey = false
|
||||
GroupByPresentationUniqueKey = false,
|
||||
DtoOptions = new DtoOptions(true)
|
||||
|
||||
}).Cast<Series>().ToList();
|
||||
|
||||
@@ -188,7 +190,8 @@ namespace Emby.Server.Implementations.TV
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Series).Name },
|
||||
Recursive = true,
|
||||
GroupByPresentationUniqueKey = false
|
||||
GroupByPresentationUniqueKey = false,
|
||||
DtoOptions = new DtoOptions(true)
|
||||
|
||||
}).Cast<Series>().ToList();
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
|
||||
namespace Emby.Server.Implementations.TV
|
||||
{
|
||||
@@ -26,7 +27,7 @@ namespace Emby.Server.Implementations.TV
|
||||
_config = config;
|
||||
}
|
||||
|
||||
public QueryResult<BaseItem> GetNextUp(NextUpQuery request)
|
||||
public QueryResult<BaseItem> GetNextUp(NextUpQuery request, DtoOptions dtoOptions)
|
||||
{
|
||||
var user = _userManager.GetUserById(request.UserId);
|
||||
|
||||
@@ -75,12 +76,12 @@ namespace Emby.Server.Implementations.TV
|
||||
}).Cast<Series>().Select(GetUniqueSeriesKey);
|
||||
|
||||
// Avoid implicitly captured closure
|
||||
var episodes = GetNextUpEpisodes(request, user, items);
|
||||
var episodes = GetNextUpEpisodes(request, user, items, dtoOptions);
|
||||
|
||||
return GetResult(episodes, request);
|
||||
}
|
||||
|
||||
public QueryResult<BaseItem> GetNextUp(NextUpQuery request, List<Folder> parentsFolders)
|
||||
public QueryResult<BaseItem> GetNextUp(NextUpQuery request, List<Folder> parentsFolders, DtoOptions dtoOptions)
|
||||
{
|
||||
var user = _userManager.GetUserById(request.UserId);
|
||||
|
||||
@@ -126,18 +127,18 @@ namespace Emby.Server.Implementations.TV
|
||||
}, parentsFolders.Cast<BaseItem>().ToList()).Cast<Series>().Select(GetUniqueSeriesKey);
|
||||
|
||||
// Avoid implicitly captured closure
|
||||
var episodes = GetNextUpEpisodes(request, user, items);
|
||||
var episodes = GetNextUpEpisodes(request, user, items, dtoOptions);
|
||||
|
||||
return GetResult(episodes, request);
|
||||
}
|
||||
|
||||
public IEnumerable<Episode> GetNextUpEpisodes(NextUpQuery request, User user, IEnumerable<string> seriesKeys)
|
||||
public IEnumerable<Episode> GetNextUpEpisodes(NextUpQuery request, User user, IEnumerable<string> seriesKeys, DtoOptions dtoOptions)
|
||||
{
|
||||
// Avoid implicitly captured closure
|
||||
var currentUser = user;
|
||||
|
||||
var allNextUp = seriesKeys
|
||||
.Select(i => GetNextUp(i, currentUser));
|
||||
.Select(i => GetNextUp(i, currentUser, dtoOptions));
|
||||
|
||||
//allNextUp = allNextUp.OrderByDescending(i => i.Item1);
|
||||
|
||||
@@ -175,7 +176,7 @@ namespace Emby.Server.Implementations.TV
|
||||
/// Gets the next up.
|
||||
/// </summary>
|
||||
/// <returns>Task{Episode}.</returns>
|
||||
private Tuple<DateTime, Func<Episode>> GetNextUp(string seriesKey, User user)
|
||||
private Tuple<DateTime, Func<Episode>> GetNextUp(string seriesKey, User user, DtoOptions dtoOptions)
|
||||
{
|
||||
var enableSeriesPresentationKey = _config.Configuration.EnableSeriesPresentationUniqueKey;
|
||||
|
||||
@@ -213,7 +214,8 @@ namespace Emby.Server.Implementations.TV
|
||||
IsPlayed = false,
|
||||
IsVirtualItem = false,
|
||||
ParentIndexNumberNotEquals = 0,
|
||||
MinSortName = lastWatchedEpisode == null ? null : lastWatchedEpisode.SortName
|
||||
MinSortName = lastWatchedEpisode == null ? null : lastWatchedEpisode.SortName,
|
||||
DtoOptions = dtoOptions
|
||||
|
||||
}).Cast<Episode>().FirstOrDefault();
|
||||
};
|
||||
|
||||
@@ -14,6 +14,7 @@ using Emby.Server.Implementations.Images;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Controller.Collections;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Controller.Library;
|
||||
@@ -46,7 +47,8 @@ namespace Emby.Server.Implementations.UserViews
|
||||
{
|
||||
CollapseBoxSetItems = false,
|
||||
Recursive = recursive,
|
||||
ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Playlist" }
|
||||
ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Playlist" },
|
||||
DtoOptions = new DtoOptions(false)
|
||||
|
||||
}).ConfigureAwait(false);
|
||||
|
||||
@@ -144,7 +146,8 @@ namespace Emby.Server.Implementations.UserViews
|
||||
Recursive = recursive,
|
||||
IncludeItemTypes = new[] { typeof(BoxSet).Name },
|
||||
Limit = 20,
|
||||
SortBy = new[] { ItemSortBy.Random }
|
||||
SortBy = new[] { ItemSortBy.Random },
|
||||
DtoOptions = new DtoOptions(false)
|
||||
});
|
||||
|
||||
return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary) || i.HasImage(ImageType.Thumb)).ToList(), 8);
|
||||
|
||||
@@ -12,6 +12,7 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Emby.Server.Implementations.Images;
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Controller.LiveTv;
|
||||
using MediaBrowser.Model.Extensions;
|
||||
@@ -58,7 +59,9 @@ namespace Emby.Server.Implementations.UserViews
|
||||
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
|
||||
ImageTypes = new[] { ImageType.Primary },
|
||||
Limit = 30,
|
||||
IsMovie = true
|
||||
IsMovie = true,
|
||||
DtoOptions = new DtoOptions(false)
|
||||
|
||||
}).ToList();
|
||||
|
||||
return GetFinalItems(programs).ToList();
|
||||
@@ -69,7 +72,8 @@ namespace Emby.Server.Implementations.UserViews
|
||||
{
|
||||
var userItemsResult = await view.GetItems(new InternalItemsQuery
|
||||
{
|
||||
CollapseBoxSetItems = false
|
||||
CollapseBoxSetItems = false,
|
||||
DtoOptions = new DtoOptions(false)
|
||||
});
|
||||
|
||||
return userItemsResult.Items.ToList();
|
||||
@@ -84,6 +88,7 @@ namespace Emby.Server.Implementations.UserViews
|
||||
CollapseBoxSetItems = false,
|
||||
Recursive = recursive,
|
||||
ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Person" },
|
||||
DtoOptions = new DtoOptions(false)
|
||||
|
||||
}).ConfigureAwait(false);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user