diff options
Diffstat (limited to 'Emby.Dlna/ContentDirectory')
| -rw-r--r-- | Emby.Dlna/ContentDirectory/ContentDirectory.cs | 29 | ||||
| -rw-r--r-- | Emby.Dlna/ContentDirectory/ControlHandler.cs | 498 |
2 files changed, 421 insertions, 106 deletions
diff --git a/Emby.Dlna/ContentDirectory/ContentDirectory.cs b/Emby.Dlna/ContentDirectory/ContentDirectory.cs index 4a36a16eb..fbd709010 100644 --- a/Emby.Dlna/ContentDirectory/ContentDirectory.cs +++ b/Emby.Dlna/ContentDirectory/ContentDirectory.cs @@ -10,14 +10,14 @@ using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; -using System.Linq; using MediaBrowser.Controller.MediaEncoding; +using MediaBrowser.Controller.TV; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Xml; namespace Emby.Dlna.ContentDirectory { - public class ContentDirectory : BaseService, IContentDirectory, IDisposable + public class ContentDirectory : BaseService, IContentDirectory { private readonly ILibraryManager _libraryManager; private readonly IImageProcessor _imageProcessor; @@ -31,6 +31,7 @@ namespace Emby.Dlna.ContentDirectory private readonly IUserViewManager _userViewManager; private readonly Func<IMediaEncoder> _mediaEncoder; protected readonly IXmlReaderSettingsFactory XmlReaderSettingsFactory; + private readonly ITVSeriesManager _tvSeriesManager; public ContentDirectory(IDlnaManager dlna, IUserDataManager userDataManager, @@ -39,7 +40,7 @@ namespace Emby.Dlna.ContentDirectory IServerConfigurationManager config, IUserManager userManager, ILogger logger, - IHttpClient httpClient, ILocalizationManager localization, IChannelManager channelManager, IMediaSourceManager mediaSourceManager, IUserViewManager userViewManager, Func<IMediaEncoder> mediaEncoder, IXmlReaderSettingsFactory xmlReaderSettingsFactory) + IHttpClient httpClient, ILocalizationManager localization, IChannelManager channelManager, IMediaSourceManager mediaSourceManager, IUserViewManager userViewManager, Func<IMediaEncoder> mediaEncoder, IXmlReaderSettingsFactory xmlReaderSettingsFactory, ITVSeriesManager tvSeriesManager) : base(logger, httpClient) { _dlna = dlna; @@ -54,6 +55,7 @@ namespace Emby.Dlna.ContentDirectory _userViewManager = userViewManager; _mediaEncoder = mediaEncoder; XmlReaderSettingsFactory = xmlReaderSettingsFactory; + _tvSeriesManager = tvSeriesManager; } private int SystemUpdateId @@ -97,7 +99,8 @@ namespace Emby.Dlna.ContentDirectory _mediaSourceManager, _userViewManager, _mediaEncoder(), - XmlReaderSettingsFactory) + XmlReaderSettingsFactory, + _tvSeriesManager) .ProcessControlRequest(request); } @@ -125,14 +128,20 @@ namespace Emby.Dlna.ContentDirectory } } - // No configuration so it's going to be pretty arbitrary - return _userManager.Users.FirstOrDefault(i => i.Policy.IsAdministrator) ?? - _userManager.Users.First(); - } + foreach (var user in _userManager.Users) + { + if (user.Policy.IsAdministrator) + { + return user; + } + } - public void Dispose() - { + foreach (var user in _userManager.Users) + { + return user; + } + return null; } } } diff --git a/Emby.Dlna/ContentDirectory/ControlHandler.cs b/Emby.Dlna/ContentDirectory/ControlHandler.cs index 9345a1df7..47d199e6e 100644 --- a/Emby.Dlna/ContentDirectory/ControlHandler.cs +++ b/Emby.Dlna/ContentDirectory/ControlHandler.cs @@ -27,8 +27,10 @@ using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Controller.Playlists; +using MediaBrowser.Controller.TV; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Xml; +using MediaBrowser.Model.Extensions; namespace Emby.Dlna.ContentDirectory { @@ -40,6 +42,7 @@ namespace Emby.Dlna.ContentDirectory private readonly IServerConfigurationManager _config; private readonly User _user; private readonly IUserViewManager _userViewManager; + private readonly ITVSeriesManager _tvSeriesManager; private const string NS_DC = "http://purl.org/dc/elements/1.1/"; private const string NS_DIDL = "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"; @@ -53,7 +56,7 @@ namespace Emby.Dlna.ContentDirectory private readonly DeviceProfile _profile; - public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, string accessToken, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config, ILocalizationManager localization, IChannelManager channelManager, IMediaSourceManager mediaSourceManager, IUserViewManager userViewManager, IMediaEncoder mediaEncoder, IXmlReaderSettingsFactory xmlReaderSettingsFactory) + public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, string accessToken, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config, ILocalizationManager localization, IChannelManager channelManager, IMediaSourceManager mediaSourceManager, IUserViewManager userViewManager, IMediaEncoder mediaEncoder, IXmlReaderSettingsFactory xmlReaderSettingsFactory, ITVSeriesManager tvSeriesManager) : base(config, logger, xmlReaderSettingsFactory) { _libraryManager = libraryManager; @@ -62,6 +65,7 @@ namespace Emby.Dlna.ContentDirectory _systemUpdateId = systemUpdateId; _channelManager = channelManager; _userViewManager = userViewManager; + _tvSeriesManager = tvSeriesManager; _profile = profile; _config = config; @@ -454,14 +458,13 @@ namespace Emby.Dlna.ContentDirectory { Limit = limit, StartIndex = startIndex, - SortBy = sortOrders.ToArray(), - SortOrder = sort.SortOrder, + OrderBy = sortOrders.Select(i => new Tuple<string, SortOrder>(i, sort.SortOrder)).ToArray(), User = user, Recursive = true, IsMissing = false, ExcludeItemTypes = new[] { typeof(Game).Name, typeof(Book).Name }, IsFolder = isFolder, - MediaTypes = mediaTypes.ToArray(), + MediaTypes = mediaTypes.ToArray(mediaTypes.Count), DtoOptions = GetDtoOptions() }); } @@ -483,31 +486,27 @@ namespace Emby.Dlna.ContentDirectory return GetMusicArtistItems(item, null, user, sort, startIndex, limit); } + if (item is Genre) + { + return GetGenreItems(item, null, user, sort, startIndex, limit); + } + var collectionFolder = item as ICollectionFolder; if (collectionFolder != null && string.Equals(CollectionType.Music, collectionFolder.CollectionType, StringComparison.OrdinalIgnoreCase)) { return GetMusicFolders(item, user, stubType, sort, startIndex, limit); } + if (collectionFolder != null && string.Equals(CollectionType.Movies, collectionFolder.CollectionType, StringComparison.OrdinalIgnoreCase)) + { + return GetMovieFolders(item, user, stubType, sort, startIndex, limit); + } + if (collectionFolder != null && string.Equals(CollectionType.TvShows, collectionFolder.CollectionType, StringComparison.OrdinalIgnoreCase)) + { + return GetTvFolders(item, user, stubType, sort, startIndex, limit); + } if (stubType.HasValue) { - if (stubType.Value == StubType.People) - { - var items = _libraryManager.GetPeopleItems(new InternalPeopleQuery - { - ItemId = item.Id - - }).ToArray(); - - var result = new QueryResult<ServerItem> - { - Items = items.Select(i => new ServerItem(i)).ToArray(), - TotalRecordCount = items.Length - }; - - return ApplyPaging(result, startIndex, limit); - } - var person = item as Person; if (person != null) { @@ -524,8 +523,8 @@ namespace Emby.Dlna.ContentDirectory Limit = limit, StartIndex = startIndex, User = user, - IsMissing = false, - PresetViews = new[] { CollectionType.Movies, CollectionType.TvShows }, + IsVirtualItem = false, + PresetViews = new string[] { }, ExcludeItemTypes = new[] { typeof(Game).Name, typeof(Book).Name }, IsPlaceHolder = false, DtoOptions = GetDtoOptions() @@ -651,11 +650,236 @@ namespace Emby.Dlna.ContentDirectory return new QueryResult<ServerItem> { - Items = list.ToArray(), + Items = list.ToArray(list.Count), TotalRecordCount = list.Count }; } + private QueryResult<ServerItem> GetMovieFolders(BaseItem item, User user, StubType? stubType, SortCriteria sort, int? startIndex, int? limit) + { + var query = new InternalItemsQuery(user) + { + StartIndex = startIndex, + Limit = limit + }; + SetSorting(query, sort, false); + + if (stubType.HasValue && stubType.Value == StubType.ContinueWatching) + { + return GetMovieContinueWatching(item, user, query); + } + + if (stubType.HasValue && stubType.Value == StubType.Latest) + { + return GetMovieLatest(item, user, query); + } + + if (stubType.HasValue && stubType.Value == StubType.Movies) + { + return GetMovieMovies(item, user, query); + } + + if (stubType.HasValue && stubType.Value == StubType.Collections) + { + return GetMovieCollections(item, user, query); + } + + if (stubType.HasValue && stubType.Value == StubType.Favorites) + { + return GetMovieFavorites(item, user, query); + } + + if (stubType.HasValue && stubType.Value == StubType.Genres) + { + return GetGenres(item, user, query); + } + + var list = new List<ServerItem>(); + + list.Add(new ServerItem(item) + { + StubType = StubType.ContinueWatching + }); + + list.Add(new ServerItem(item) + { + StubType = StubType.Latest + }); + + list.Add(new ServerItem(item) + { + StubType = StubType.Movies + }); + + list.Add(new ServerItem(item) + { + StubType = StubType.Collections + }); + + list.Add(new ServerItem(item) + { + StubType = StubType.Favorites + }); + + list.Add(new ServerItem(item) + { + StubType = StubType.Genres + }); + + return new QueryResult<ServerItem> + { + Items = list.ToArray(list.Count), + TotalRecordCount = list.Count + }; + } + + private QueryResult<ServerItem> GetTvFolders(BaseItem item, User user, StubType? stubType, SortCriteria sort, int? startIndex, int? limit) + { + var query = new InternalItemsQuery(user) + { + StartIndex = startIndex, + Limit = limit + }; + SetSorting(query, sort, false); + + if (stubType.HasValue && stubType.Value == StubType.ContinueWatching) + { + return GetMovieContinueWatching(item, user, query); + } + + if (stubType.HasValue && stubType.Value == StubType.NextUp) + { + return GetNextUp(item, user, query); + } + + if (stubType.HasValue && stubType.Value == StubType.Latest) + { + return GetTvLatest(item, user, query); + } + + if (stubType.HasValue && stubType.Value == StubType.Series) + { + return GetSeries(item, user, query); + } + + if (stubType.HasValue && stubType.Value == StubType.FavoriteSeries) + { + return GetFavoriteSeries(item, user, query); + } + + if (stubType.HasValue && stubType.Value == StubType.FavoriteEpisodes) + { + return GetFavoriteEpisodes(item, user, query); + } + + if (stubType.HasValue && stubType.Value == StubType.Genres) + { + return GetGenres(item, user, query); + } + + var list = new List<ServerItem>(); + + list.Add(new ServerItem(item) + { + StubType = StubType.ContinueWatching + }); + + list.Add(new ServerItem(item) + { + StubType = StubType.NextUp + }); + + list.Add(new ServerItem(item) + { + StubType = StubType.Latest + }); + + list.Add(new ServerItem(item) + { + StubType = StubType.Series + }); + + list.Add(new ServerItem(item) + { + StubType = StubType.FavoriteSeries + }); + + list.Add(new ServerItem(item) + { + StubType = StubType.FavoriteEpisodes + }); + + list.Add(new ServerItem(item) + { + StubType = StubType.Genres + }); + + return new QueryResult<ServerItem> + { + Items = list.ToArray(list.Count), + TotalRecordCount = list.Count + }; + } + + private QueryResult<ServerItem> GetMovieContinueWatching(BaseItem parent, User user, InternalItemsQuery query) + { + query.Recursive = true; + query.Parent = parent; + query.SetUser(user); + + query.OrderBy = new Tuple<string, SortOrder>[] + { + new Tuple<string, SortOrder> (ItemSortBy.DatePlayed, SortOrder.Descending), + new Tuple<string, SortOrder> (ItemSortBy.SortName, SortOrder.Ascending) + }; + + query.IsResumable = true; + query.Limit = 10; + + var result = _libraryManager.GetItemsResult(query); + + return ToResult(result); + } + + private QueryResult<ServerItem> GetSeries(BaseItem parent, User user, InternalItemsQuery query) + { + query.Recursive = true; + query.Parent = parent; + query.SetUser(user); + + query.IncludeItemTypes = new[] { typeof(Series).Name }; + + var result = _libraryManager.GetItemsResult(query); + + return ToResult(result); + } + + private QueryResult<ServerItem> GetMovieMovies(BaseItem parent, User user, InternalItemsQuery query) + { + query.Recursive = true; + query.Parent = parent; + query.SetUser(user); + + query.IncludeItemTypes = new[] { typeof(Movie).Name }; + + var result = _libraryManager.GetItemsResult(query); + + return ToResult(result); + } + + private QueryResult<ServerItem> GetMovieCollections(BaseItem parent, User user, InternalItemsQuery query) + { + query.Recursive = true; + //query.Parent = parent; + query.SetUser(user); + + query.IncludeItemTypes = new[] { typeof(BoxSet).Name }; + + var result = _libraryManager.GetItemsResult(query); + + return ToResult(result); + } + private QueryResult<ServerItem> GetMusicAlbums(BaseItem parent, User user, InternalItemsQuery query) { query.Recursive = true; @@ -695,6 +919,45 @@ namespace Emby.Dlna.ContentDirectory return ToResult(result); } + private QueryResult<ServerItem> GetFavoriteSeries(BaseItem parent, User user, InternalItemsQuery query) + { + query.Recursive = true; + query.Parent = parent; + query.SetUser(user); + query.IsFavorite = true; + query.IncludeItemTypes = new[] { typeof(Series).Name }; + + var result = _libraryManager.GetItemsResult(query); + + return ToResult(result); + } + + private QueryResult<ServerItem> GetFavoriteEpisodes(BaseItem parent, User user, InternalItemsQuery query) + { + query.Recursive = true; + query.Parent = parent; + query.SetUser(user); + query.IsFavorite = true; + query.IncludeItemTypes = new[] { typeof(Episode).Name }; + + var result = _libraryManager.GetItemsResult(query); + + return ToResult(result); + } + + private QueryResult<ServerItem> GetMovieFavorites(BaseItem parent, User user, InternalItemsQuery query) + { + query.Recursive = true; + query.Parent = parent; + query.SetUser(user); + query.IsFavorite = true; + query.IncludeItemTypes = new[] { typeof(Movie).Name }; + + var result = _libraryManager.GetItemsResult(query); + + return ToResult(result); + } + private QueryResult<ServerItem> GetFavoriteAlbums(BaseItem parent, User user, InternalItemsQuery query) { query.Recursive = true; @@ -708,6 +971,24 @@ namespace Emby.Dlna.ContentDirectory return ToResult(result); } + private QueryResult<ServerItem> GetGenres(BaseItem parent, User user, InternalItemsQuery query) + { + var genresResult = _libraryManager.GetGenres(new InternalItemsQuery(user) + { + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit + }); + + var result = new QueryResult<BaseItem> + { + TotalRecordCount = genresResult.TotalRecordCount, + Items = genresResult.Items.Select(i => i.Item1).ToArray(genresResult.Items.Length) + }; + + return ToResult(result); + } + private QueryResult<ServerItem> GetMusicGenres(BaseItem parent, User user, InternalItemsQuery query) { var genresResult = _libraryManager.GetMusicGenres(new InternalItemsQuery(user) @@ -720,7 +1001,7 @@ namespace Emby.Dlna.ContentDirectory var result = new QueryResult<BaseItem> { TotalRecordCount = genresResult.TotalRecordCount, - Items = genresResult.Items.Select(i => i.Item1).ToArray() + Items = genresResult.Items.Select(i => i.Item1).ToArray(genresResult.Items.Length) }; return ToResult(result); @@ -738,7 +1019,7 @@ namespace Emby.Dlna.ContentDirectory var result = new QueryResult<BaseItem> { TotalRecordCount = artists.TotalRecordCount, - Items = artists.Items.Select(i => i.Item1).ToArray() + Items = artists.Items.Select(i => i.Item1).ToArray(artists.Items.Length) }; return ToResult(result); @@ -756,7 +1037,7 @@ namespace Emby.Dlna.ContentDirectory var result = new QueryResult<BaseItem> { TotalRecordCount = artists.TotalRecordCount, - Items = artists.Items.Select(i => i.Item1).ToArray() + Items = artists.Items.Select(i => i.Item1).ToArray(artists.Items.Length) }; return ToResult(result); @@ -775,7 +1056,7 @@ namespace Emby.Dlna.ContentDirectory var result = new QueryResult<BaseItem> { TotalRecordCount = artists.TotalRecordCount, - Items = artists.Items.Select(i => i.Item1).ToArray() + Items = artists.Items.Select(i => i.Item1).ToArray(artists.Items.Length) }; return ToResult(result); @@ -795,7 +1076,7 @@ namespace Emby.Dlna.ContentDirectory private QueryResult<ServerItem> GetMusicLatest(BaseItem parent, User user, InternalItemsQuery query) { - query.SortBy = new string[] { }; + query.OrderBy = new Tuple<string, SortOrder>[] { }; var items = _userViewManager.GetLatestItems(new LatestItemsQuery { @@ -810,6 +1091,55 @@ namespace Emby.Dlna.ContentDirectory return ToResult(items); } + private QueryResult<ServerItem> GetNextUp(BaseItem parent, User user, InternalItemsQuery query) + { + query.OrderBy = new Tuple<string, SortOrder>[] { }; + + var result = _tvSeriesManager.GetNextUp(new NextUpQuery + { + Limit = query.Limit, + StartIndex = query.StartIndex, + UserId = query.User.Id.ToString("N") + + }, new List<Folder> { (Folder)parent }, query.DtoOptions); + + return ToResult(result); + } + + private QueryResult<ServerItem> GetTvLatest(BaseItem parent, User user, InternalItemsQuery query) + { + query.OrderBy = new Tuple<string, SortOrder>[] { }; + + var items = _userViewManager.GetLatestItems(new LatestItemsQuery + { + UserId = user.Id.ToString("N"), + Limit = 50, + IncludeItemTypes = new[] { typeof(Episode).Name }, + ParentId = parent == null ? null : parent.Id.ToString("N"), + GroupItems = false + + }, query.DtoOptions).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i != null).ToList(); + + return ToResult(items); + } + + private QueryResult<ServerItem> GetMovieLatest(BaseItem parent, User user, InternalItemsQuery query) + { + query.OrderBy = new Tuple<string, SortOrder>[] { }; + + var items = _userViewManager.GetLatestItems(new LatestItemsQuery + { + UserId = user.Id.ToString("N"), + Limit = 50, + IncludeItemTypes = new[] { typeof(Movie).Name }, + ParentId = parent == null ? null : parent.Id.ToString("N"), + GroupItems = true + + }, query.DtoOptions).Select(i => i.Item1 ?? i.Item2.FirstOrDefault()).Where(i => i != null).ToList(); + + return ToResult(items); + } + private QueryResult<ServerItem> GetMusicArtistItems(BaseItem item, Guid? parentId, User user, SortCriteria sort, int? startIndex, int? limit) { var query = new InternalItemsQuery(user) @@ -830,6 +1160,26 @@ namespace Emby.Dlna.ContentDirectory return ToResult(result); } + private QueryResult<ServerItem> GetGenreItems(BaseItem item, Guid? parentId, User user, SortCriteria sort, int? startIndex, int? limit) + { + var query = new InternalItemsQuery(user) + { + Recursive = true, + ParentId = parentId, + GenreIds = new[] { item.Id.ToString("N") }, + IncludeItemTypes = new[] { typeof(Movie).Name, typeof(Series).Name }, + Limit = limit, + StartIndex = startIndex, + DtoOptions = GetDtoOptions() + }; + + SetSorting(query, sort, false); + + var result = _libraryManager.GetItemsResult(query); + + return ToResult(result); + } + private QueryResult<ServerItem> GetMusicGenreItems(BaseItem item, Guid? parentId, User user, SortCriteria sort, int? startIndex, int? limit) { var query = new InternalItemsQuery(user) @@ -854,7 +1204,7 @@ namespace Emby.Dlna.ContentDirectory { var serverItems = result .Select(i => new ServerItem(i)) - .ToArray(); + .ToArray(result.Count); return new QueryResult<ServerItem> { @@ -868,7 +1218,7 @@ namespace Emby.Dlna.ContentDirectory var serverItems = result .Items .Select(i => new ServerItem(i)) - .ToArray(); + .ToArray(result.Items.Length); return new QueryResult<ServerItem> { @@ -885,8 +1235,7 @@ namespace Emby.Dlna.ContentDirectory sortOrders.Add(ItemSortBy.SortName); } - query.SortBy = sortOrders.ToArray(); - query.SortOrder = sort.SortOrder; + query.OrderBy = sortOrders.Select(i => new Tuple<string, SortOrder>(i, sort.SortOrder)).ToArray(); } private QueryResult<ServerItem> GetItemsFromPerson(Person person, User user, int? startIndex, int? limit) @@ -895,14 +1244,13 @@ namespace Emby.Dlna.ContentDirectory { PersonIds = new[] { person.Id.ToString("N") }, IncludeItemTypes = new[] { typeof(Movie).Name, typeof(Series).Name, typeof(Trailer).Name }, - SortBy = new[] { ItemSortBy.SortName }, + OrderBy = new[] { ItemSortBy.SortName }.Select(i => new Tuple<string, SortOrder>(i, SortOrder.Ascending)).ToArray(), Limit = limit, StartIndex = startIndex, DtoOptions = GetDtoOptions() }); - var serverItems = itemsResult.Items.Select(i => new ServerItem(i)) - .ToArray(); + var serverItems = itemsResult.Items.Select(i => new ServerItem(i)).ToArray(itemsResult.Items.Length); return new QueryResult<ServerItem> { @@ -942,65 +1290,16 @@ namespace Emby.Dlna.ContentDirectory id = parts[23]; } - if (id.StartsWith("folder_", StringComparison.OrdinalIgnoreCase)) - { - stubType = StubType.Folder; - id = id.Split(new[] { '_' }, 2)[1]; - } - else if (id.StartsWith("people_", StringComparison.OrdinalIgnoreCase)) - { - stubType = StubType.People; - id = id.Split(new[] { '_' }, 2)[1]; - } - else if (id.StartsWith("latest_", StringComparison.OrdinalIgnoreCase)) - { - stubType = StubType.Latest; - id = id.Split(new[] { '_' }, 2)[1]; - } - else if (id.StartsWith("playlists_", StringComparison.OrdinalIgnoreCase)) - { - stubType = StubType.Playlists; - id = id.Split(new[] { '_' }, 2)[1]; - } - else if (id.StartsWith("Albums_", StringComparison.OrdinalIgnoreCase)) - { - stubType = StubType.Albums; - id = id.Split(new[] { '_' }, 2)[1]; - } - else if (id.StartsWith("AlbumArtists_", StringComparison.OrdinalIgnoreCase)) - { - stubType = StubType.AlbumArtists; - id = id.Split(new[] { '_' }, 2)[1]; - } - else if (id.StartsWith("Artists_", StringComparison.OrdinalIgnoreCase)) - { - stubType = StubType.Artists; - id = id.Split(new[] { '_' }, 2)[1]; - } - else if (id.StartsWith("Genres_", StringComparison.OrdinalIgnoreCase)) - { - stubType = StubType.Genres; - id = id.Split(new[] { '_' }, 2)[1]; - } - else if (id.StartsWith("Songs_", StringComparison.OrdinalIgnoreCase)) - { - stubType = StubType.Songs; - id = id.Split(new[] { '_' }, 2)[1]; - } - else if (id.StartsWith("FavoriteAlbums_", StringComparison.OrdinalIgnoreCase)) - { - stubType = StubType.FavoriteAlbums; - id = id.Split(new[] { '_' }, 2)[1]; - } - else if (id.StartsWith("FavoriteArtists_", StringComparison.OrdinalIgnoreCase)) + var enumNames = Enum.GetNames(typeof(StubType)); + foreach (var name in enumNames) { - stubType = StubType.FavoriteArtists; - id = id.Split(new[] { '_' }, 2)[1]; - } - else if (id.StartsWith("FavoriteSongs_", StringComparison.OrdinalIgnoreCase)) - { - stubType = StubType.FavoriteSongs; - id = id.Split(new[] { '_' }, 2)[1]; + if (id.StartsWith(name + "_", StringComparison.OrdinalIgnoreCase)) + { + stubType = (StubType)Enum.Parse(typeof(StubType), name, true); + id = id.Split(new[] { '_' }, 2)[1]; + + break; + } } if (Guid.TryParse(id, out itemId)) @@ -1038,7 +1337,6 @@ namespace Emby.Dlna.ContentDirectory public enum StubType { Folder = 0, - People = 1, Latest = 2, Playlists = 3, Albums = 4, @@ -1048,6 +1346,14 @@ namespace Emby.Dlna.ContentDirectory Genres = 8, FavoriteSongs = 9, FavoriteArtists = 10, - FavoriteAlbums = 11 + FavoriteAlbums = 11, + ContinueWatching = 12, + Movies = 13, + Collections = 14, + Favorites = 15, + NextUp = 16, + Series = 17, + FavoriteSeries = 18, + FavoriteEpisodes = 19 } } |
