Ejemplo n.º 1
0
        /// <summary>
        /// Gets the session info dto.
        /// </summary>
        /// <param name="session">The session.</param>
        /// <returns>SessionInfoDto.</returns>
        public static SessionInfoDto GetSessionInfoDto(SessionInfo session)
        {
            var dto = new SessionInfoDto
            {
                Client                  = session.Client,
                DeviceId                = session.DeviceId,
                DeviceName              = session.DeviceName,
                Id                      = session.Id.ToString("N"),
                LastActivityDate        = session.LastActivityDate,
                NowPlayingPositionTicks = session.NowPlayingPositionTicks,
                SupportsRemoteControl   = session.SupportsRemoteControl,
                IsPaused                = session.IsPaused,
                NowViewingContext       = session.NowViewingContext,
                NowViewingItemId        = session.NowViewingItemId,
                NowViewingItemName      = session.NowViewingItemName,
                NowViewingItemType      = session.NowViewingItemType,
                ApplicationVersion      = session.ApplicationVersion
            };

            if (session.NowPlayingItem != null)
            {
                dto.NowPlayingItem = DtoBuilder.GetBaseItemInfo(session.NowPlayingItem);
            }

            if (session.User != null)
            {
                dto.UserId   = session.User.Id.ToString("N");
                dto.UserName = session.User.Name;
            }

            return(dto);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Converts a User to a DTOUser
        /// </summary>
        /// <param name="user">The user.</param>
        /// <returns>DtoUser.</returns>
        /// <exception cref="System.ArgumentNullException">user</exception>
        public async Task <UserDto> GetUserDto(User user)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }

            var dto = new UserDto
            {
                Id               = user.Id.ToString("N"),
                Name             = user.Name,
                HasPassword      = !String.IsNullOrEmpty(user.Password),
                LastActivityDate = user.LastActivityDate,
                LastLoginDate    = user.LastLoginDate,
                Configuration    = user.Configuration
            };

            var image = user.PrimaryImagePath;

            if (!string.IsNullOrEmpty(image))
            {
                dto.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(user, ImageType.Primary, image);

                try
                {
                    await DtoBuilder.AttachPrimaryImageAspectRatio(dto, user, _logger).ConfigureAwait(false);
                }
                catch (Exception ex)
                {
                    // Have to use a catch-all unfortunately because some .net image methods throw plain Exceptions
                    _logger.ErrorException("Error generating PrimaryImageAspectRatio for {0}", ex, user.Name);
                }
            }

            return(dto);
        }
Ejemplo n.º 3
0
        private async Task<ItemsResult> GetInstantMixResult(BaseGetSimilarItems request, IEnumerable<string> genres)
        {
            var user = request.UserId.HasValue ? _userManager.GetUserById(request.UserId.Value) : null;

            var fields = request.GetItemFields().ToList();

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

            var inputItems = user == null
                                 ? _libraryManager.RootFolder.RecursiveChildren
                                 : user.RootFolder.GetRecursiveChildren(user);

            var genresDictionary = genres.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);

            var limit = request.Limit.HasValue ? request.Limit.Value * 2 : 100;

            var items = inputItems
                .OfType<Audio>()
                .Select(i => new Tuple<Audio, int>(i, i.Genres.Count(genresDictionary.ContainsKey)))
                .OrderByDescending(i => i.Item2)
                .ThenBy(i => Guid.NewGuid())
                .Select(i => i.Item1)
                .Take(limit)
                .OrderBy(i => Guid.NewGuid())
                .ToArray();

            var result = new ItemsResult
            {
                TotalRecordCount = items.Length
            };

            var tasks = items.Take(request.Limit ?? items.Length)
                .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user));

            result.Items = await Task.WhenAll(tasks).ConfigureAwait(false);

            return result;
        }