Example #1
0
        public async Task <ICollection <AvatarLayer> > GetUserWardrobeAsync()
        {
            var activeUserId = GetActiveUserId();
            var siteId       = GetCurrentSiteId();
            var layers       = await _avatarLayerRepository.GetAllWithColorsAsync(
                siteId, activeUserId);

            if (layers.Count > 0)
            {
                var userAvatar = await _avatarElementRepository.GetUserAvatarAsync(activeUserId);

                var bundleItems = new List <AvatarItem>();
                if (userAvatar.Count == 0)
                {
                    bundleItems = (await _avatarBundleRepository.GetRandomDefaultBundleAsync(siteId)).ToList();
                }
                var filePath = _pathResolver.ResolveContentPath($"site{siteId}/avatars/");
                foreach (var layer in layers)
                {
                    layer.AvatarItems = await _avatarItemRepository
                                        .GetUserItemsByLayerAsync(activeUserId, layer.Id);

                    layer.Icon = _pathResolver.ResolveContentPath(layer.Icon);

                    if (userAvatar.Count > 0)
                    {
                        var layerSelection = userAvatar.Where(_ =>
                                                              _.AvatarItem.AvatarLayerId == layer.Id).SingleOrDefault();
                        if (layerSelection != null)
                        {
                            layer.SelectedItem  = layerSelection.AvatarItemId;
                            layer.SelectedColor = layerSelection.AvatarColorId;
                            layer.FilePath      = _pathResolver.ResolveContentPath(layerSelection.Filename);
                        }
                        else if (layer.AvatarColors.Count > 0)
                        {
                            layer.SelectedColor = layer.AvatarColors
                                                  .ElementAt(new Random().Next(0, layer.AvatarColors.Count)).Id;
                        }
                    }
                    else
                    {
                        if (layer.AvatarColors.Count > 0)
                        {
                            layer.SelectedColor = layer.AvatarColors
                                                  .ElementAt(new Random().Next(0, layer.AvatarColors.Count)).Id;
                        }

                        if (bundleItems.Count > 0)
                        {
                            var layerSelection = bundleItems.Where(_ =>
                                                                   _.AvatarLayerId == layer.Id).SingleOrDefault();
                            if (layerSelection != null)
                            {
                                layer.SelectedItem = layerSelection.Id;
                            }
                        }

                        if (!layer.SelectedItem.HasValue && !layer.CanBeEmpty)
                        {
                            layer.SelectedItem = layer.AvatarItems.First().Id;
                        }

                        if (layer.SelectedItem.HasValue)
                        {
                            var fileName = "item";
                            if (layer.SelectedColor.HasValue)
                            {
                                fileName += $"_{layer.SelectedColor}";
                            }
                            fileName      += ".png";
                            layer.FilePath = Path.Combine(filePath, $"layer{layer.Id}", $"item{layer.SelectedItem}", fileName);
                        }
                    }
                }
            }
            return(layers.Where(_ => _.AvatarItems.Count > 0).ToList());
        }
Example #2
0
        public async Task <ICollection <AvatarItem> > GetUsersItemsByLayerAsync(int layerId)
        {
            var userId = GetClaimId(ClaimType.UserId);

            return(await _avatarItemRepository.GetUserItemsByLayerAsync(userId, layerId));
        }