diff options
Diffstat (limited to 'Emby.Server.Implementations')
| -rw-r--r-- | Emby.Server.Implementations/Data/SqliteItemRepository.cs | 7 | ||||
| -rw-r--r-- | Emby.Server.Implementations/Dto/DtoService.cs | 63 | ||||
| -rw-r--r-- | Emby.Server.Implementations/Library/LibraryManager.cs | 33 |
3 files changed, 62 insertions, 41 deletions
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..ec4f552a6 100644 --- a/Emby.Server.Implementations/Dto/DtoService.cs +++ b/Emby.Server.Implementations/Dto/DtoService.cs @@ -751,45 +751,41 @@ namespace Emby.Server.Implementations.Dto /// <returns>Task.</returns> 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 - { - return _libraryManager.GetStudio(name); - } - catch (IOException ex) + dto.Studios = item.Studios + .Where(i => !string.IsNullOrWhiteSpace(i)) + .Select(i => new NameIdPair { - _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"); } /// <summary> @@ -901,6 +897,7 @@ namespace Emby.Server.Implementations.Dto if (fields.Contains(ItemFields.Genres)) { dto.Genres = item.Genres; + AttachGenreItems(dto, item); } if (options.EnableImages) 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>(Studio.GetPath, name); } + public Guid GetStudioId(string name) + { + return GetItemByNameId<Studio>(Studio.GetPath, name); + } + + public Guid GetGenreId(string name) + { + return GetItemByNameId<Genre>(Genre.GetPath, name); + } + + public Guid GetMusicGenreId(string name) + { + return GetItemByNameId<MusicGenre>(MusicGenre.GetPath, name); + } + + public Guid GetGameGenreId(string name) + { + return GetItemByNameId<GameGenre>(GameGenre.GetPath, name); + } + /// <summary> /// Gets a Genre /// </summary> @@ -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<T>(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<T>(Func<string, string> getPathFn, string name) + where T : BaseItem, new() + { + var path = getPathFn(name); + var forceCaseInsensitiveId = ConfigurationManager.Configuration.EnableNormalizedItemByNameIds; + return GetNewItemIdInternal(path, typeof(T), forceCaseInsensitiveId); + } + public IEnumerable<MusicArtist> GetAlbumArtists(IEnumerable<IHasAlbumArtist> items) { var names = items |
