From 47fc7c6aeeb6d4304a03d1ec83489f9702feea51 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 18 May 2017 17:05:47 -0400 Subject: add GenreItems property --- .../Data/SqliteItemRepository.cs | 7 +-- Emby.Server.Implementations/Dto/DtoService.cs | 67 +++++++++++----------- .../Library/LibraryManager.cs | 33 ++++++++++- 3 files changed, 66 insertions(+), 41 deletions(-) (limited to 'Emby.Server.Implementations') diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index e07425c86..51aee444e 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -241,7 +241,6 @@ namespace Emby.Server.Implementations.Data AddColumn(db, "TypedBaseItems", "InheritedTags", "Text", existingColumnNames); AddColumn(db, "TypedBaseItems", "CleanName", "Text", existingColumnNames); AddColumn(db, "TypedBaseItems", "PresentationUniqueKey", "Text", existingColumnNames); - AddColumn(db, "TypedBaseItems", "SlugName", "Text", existingColumnNames); AddColumn(db, "TypedBaseItems", "OriginalTitle", "Text", existingColumnNames); AddColumn(db, "TypedBaseItems", "PrimaryVersionId", "Text", existingColumnNames); AddColumn(db, "TypedBaseItems", "DateLastMediaAdded", "DATETIME", existingColumnNames); @@ -573,7 +572,6 @@ namespace Emby.Server.Implementations.Data "InheritedTags", "CleanName", "PresentationUniqueKey", - "SlugName", "OriginalTitle", "PrimaryVersionId", "DateLastMediaAdded", @@ -950,7 +948,6 @@ namespace Emby.Server.Implementations.Data } saveItemStatement.TryBind("@PresentationUniqueKey", item.PresentationUniqueKey); - saveItemStatement.TryBind("@SlugName", item.SlugName); saveItemStatement.TryBind("@OriginalTitle", item.OriginalTitle); var video = item as Video; @@ -3665,10 +3662,10 @@ namespace Emby.Server.Implementations.Data if (!string.IsNullOrWhiteSpace(query.SlugName)) { - whereClauses.Add("SlugName=@SlugName"); + whereClauses.Add("CleanName=@SlugName"); if (statement != null) { - statement.TryBind("@SlugName", query.SlugName); + statement.TryBind("@SlugName", GetCleanValue(query.SlugName)); } } diff --git a/Emby.Server.Implementations/Dto/DtoService.cs b/Emby.Server.Implementations/Dto/DtoService.cs index 0b66a8e1f..fe5642f1d 100644 --- a/Emby.Server.Implementations/Dto/DtoService.cs +++ b/Emby.Server.Implementations/Dto/DtoService.cs @@ -751,45 +751,41 @@ namespace Emby.Server.Implementations.Dto /// Task. private void AttachStudios(BaseItemDto dto, BaseItem item) { - var studios = item.Studios.ToList(); - - dto.Studios = new StudioDto[studios.Count]; - - var dictionary = studios.Distinct(StringComparer.OrdinalIgnoreCase).Select(name => - { - try + dto.Studios = item.Studios + .Where(i => !string.IsNullOrWhiteSpace(i)) + .Select(i => new NameIdPair { - return _libraryManager.GetStudio(name); - } - catch (IOException ex) - { - _logger.ErrorException("Error getting studio {0}", ex, name); - return null; - } - }) - .Where(i => i != null) - .DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase) - .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); - - for (var i = 0; i < studios.Count; i++) - { - var studio = studios[i]; + Name = i, + Id = _libraryManager.GetStudioId(i).ToString("N") + }) + .ToArray(); + } - var studioDto = new StudioDto + private void AttachGenreItems(BaseItemDto dto, BaseItem item) + { + dto.GenreItems = item.Genres + .Where(i => !string.IsNullOrWhiteSpace(i)) + .Select(i => new NameIdPair { - Name = studio - }; - - Studio entity; + Name = i, + Id = GetStudioId(i, item) + }) + .ToArray(); + } - if (dictionary.TryGetValue(studio, out entity)) - { - studioDto.Id = entity.Id.ToString("N"); - studioDto.PrimaryImageTag = GetImageCacheTag(entity, ImageType.Primary); - } + private string GetStudioId(string name, BaseItem owner) + { + if (owner is IHasMusicGenres) + { + return _libraryManager.GetGameGenreId(name).ToString("N"); + } - dto.Studios[i] = studioDto; + if (owner is Game || owner is GameSystem) + { + return _libraryManager.GetGameGenreId(name).ToString("N"); } + + return _libraryManager.GetGenreId(name).ToString("N"); } /// @@ -903,6 +899,11 @@ namespace Emby.Server.Implementations.Dto dto.Genres = item.Genres; } + if (fields.Contains(ItemFields.GenreItems)) + { + AttachGenreItems(dto, item); + } + if (options.EnableImages) { dto.ImageTags = new Dictionary(); diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index 3c94f9784..c8151ec86 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -895,6 +895,26 @@ namespace Emby.Server.Implementations.Library return CreateItemByName(Studio.GetPath, name); } + public Guid GetStudioId(string name) + { + return GetItemByNameId(Studio.GetPath, name); + } + + public Guid GetGenreId(string name) + { + return GetItemByNameId(Genre.GetPath, name); + } + + public Guid GetMusicGenreId(string name) + { + return GetItemByNameId(MusicGenre.GetPath, name); + } + + public Guid GetGameGenreId(string name) + { + return GetItemByNameId(GameGenre.GetPath, name); + } + /// /// Gets a Genre /// @@ -974,14 +994,13 @@ namespace Emby.Server.Implementations.Library } } - var path = getPathFn(name); - var forceCaseInsensitiveId = ConfigurationManager.Configuration.EnableNormalizedItemByNameIds; - var id = GetNewItemIdInternal(path, typeof(T), forceCaseInsensitiveId); + var id = GetItemByNameId(getPathFn, name); var item = GetItemById(id) as T; if (item == null) { + var path = getPathFn(name); item = new T { Name = name, @@ -998,6 +1017,14 @@ namespace Emby.Server.Implementations.Library return item; } + private Guid GetItemByNameId(Func getPathFn, string name) + where T : BaseItem, new() + { + var path = getPathFn(name); + var forceCaseInsensitiveId = ConfigurationManager.Configuration.EnableNormalizedItemByNameIds; + return GetNewItemIdInternal(path, typeof(T), forceCaseInsensitiveId); + } + public IEnumerable GetAlbumArtists(IEnumerable items) { var names = items -- cgit v1.2.3 From 9459bf7ffc5a7bda7160bf25108b554117cc40c0 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 18 May 2017 17:16:46 -0400 Subject: 3.2.17.6 --- Emby.Server.Implementations/Dto/DtoService.cs | 4 ---- MediaBrowser.Model/Querying/ItemFields.cs | 2 -- SharedVersion.cs | 2 +- 3 files changed, 1 insertion(+), 7 deletions(-) (limited to 'Emby.Server.Implementations') diff --git a/Emby.Server.Implementations/Dto/DtoService.cs b/Emby.Server.Implementations/Dto/DtoService.cs index fe5642f1d..ec4f552a6 100644 --- a/Emby.Server.Implementations/Dto/DtoService.cs +++ b/Emby.Server.Implementations/Dto/DtoService.cs @@ -897,10 +897,6 @@ namespace Emby.Server.Implementations.Dto if (fields.Contains(ItemFields.Genres)) { dto.Genres = item.Genres; - } - - if (fields.Contains(ItemFields.GenreItems)) - { AttachGenreItems(dto, item); } diff --git a/MediaBrowser.Model/Querying/ItemFields.cs b/MediaBrowser.Model/Querying/ItemFields.cs index 1f2b68b45..ab560875e 100644 --- a/MediaBrowser.Model/Querying/ItemFields.cs +++ b/MediaBrowser.Model/Querying/ItemFields.cs @@ -82,8 +82,6 @@ /// Genres, - GenreItems, - /// /// The home page URL /// diff --git a/SharedVersion.cs b/SharedVersion.cs index 89c95c423..2d9c47409 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,3 +1,3 @@ using System.Reflection; -[assembly: AssemblyVersion("3.2.17.5")] +[assembly: AssemblyVersion("3.2.17.6")] -- cgit v1.2.3