/// <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); }
/// <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); }
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; }