예제 #1
0
        private async Task <ThemeMediaResult> GetThemeSongs(GetThemeSongs request)
        {
            var user = request.UserId.HasValue ? _userManager.GetUserById(request.UserId.Value) : null;

            var item = string.IsNullOrEmpty(request.Id)
                           ? (request.UserId.HasValue
                                  ? user.RootFolder
                                  : (Folder)_libraryManager.RootFolder)
                           : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, request.UserId);

            while (item.ThemeSongIds.Count == 0 && request.InheritFromParent && item.Parent != null)
            {
                item = item.Parent;
            }

            // Get everything
            var fields = Enum.GetNames(typeof(ItemFields))
                         .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true))
                         .ToList();

            var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo);

            var tasks = item.ThemeSongIds.Select(_itemRepo.RetrieveItem)
                        .OrderBy(i => i.SortName)
                        .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, item));

            var items = await Task.WhenAll(tasks).ConfigureAwait(false);

            return(new ThemeMediaResult
            {
                Items = items,
                TotalRecordCount = items.Length,
                OwnerId = DtoBuilder.GetClientItemId(item)
            });
        }
예제 #2
0
        /// <summary>
        /// Gets the search hint result.
        /// </summary>
        /// <param name="hintInfo">The hint info.</param>
        /// <returns>SearchHintResult.</returns>
        private SearchHint GetSearchHintResult(SearchHintInfo hintInfo)
        {
            var item = hintInfo.Item;

            var result = new SearchHint
            {
                Name              = item.Name,
                IndexNumber       = item.IndexNumber,
                ParentIndexNumber = item.ParentIndexNumber,
                ItemId            = DtoBuilder.GetClientItemId(item),
                Type              = item.GetType().Name,
                MediaType         = item.MediaType,
                MatchedTerm       = hintInfo.MatchedTerm,
                DisplayMediaType  = item.DisplayMediaType,
                RunTimeTicks      = item.RunTimeTicks
            };

            if (item.HasImage(ImageType.Primary))
            {
                result.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(item, ImageType.Primary, item.GetImage(ImageType.Primary));
            }

            var episode = item as Episode;

            if (episode != null)
            {
                result.Series = episode.Series.Name;
            }

            var season = item as Season;

            if (season != null)
            {
                result.Series = season.Series.Name;

                result.EpisodeCount = season.RecursiveChildren.OfType <Episode>().Count();
            }

            var series = item as Series;

            if (series != null)
            {
                result.EpisodeCount = series.RecursiveChildren.OfType <Episode>().Count();
            }

            var album = item as MusicAlbum;

            if (album != null)
            {
                var songs = album.RecursiveChildren.OfType <Audio>().ToList();

                result.SongCount = songs.Count;

                result.Artists = songs
                                 .Select(i => i.Artist)
                                 .Where(i => !string.IsNullOrEmpty(i))
                                 .Distinct(StringComparer.OrdinalIgnoreCase)
                                 .ToArray();

                result.AlbumArtist = songs.Select(i => i.AlbumArtist).FirstOrDefault(i => !string.IsNullOrEmpty(i));
            }

            var song = item as Audio;

            if (song != null)
            {
                result.Album       = song.Album;
                result.AlbumArtist = song.AlbumArtist;
                result.Artists     = !string.IsNullOrEmpty(song.Artist) ? new[] { song.Artist } : new string[] { };
            }

            return(result);
        }