Example #1
0
        public async Task <IActionResult> SetupDynamicAvatars()
        {
            int siteId = GetCurrentSiteId();

            string assetPath = Path.Combine(
                Directory.GetParent(_hostingEnvironment.WebRootPath).FullName, "assets");

            if (!Directory.Exists(assetPath))
            {
                AlertDanger = $"Asset directory not found at: {assetPath}";
                return(View("Index"));
            }

            assetPath = Path.Combine(assetPath, "dynamicavatars");
            if (!Directory.Exists(assetPath))
            {
                AlertDanger = $"Asset directory not found at: {assetPath}";
                return(View("Index"));
            }

            IEnumerable <DynamicAvatarLayer> avatarList;
            var jsonPath = Path.Combine(assetPath, "default avatars.json");

            using (StreamReader file = System.IO.File.OpenText(jsonPath))
            {
                var jsonString = await file.ReadToEndAsync();

                avatarList = JsonConvert.DeserializeObject <IEnumerable <DynamicAvatarLayer> >(jsonString);
            }

            foreach (var layer in avatarList)
            {
                var time   = DateTime.Now;
                var userId = GetId(ClaimType.UserId);
                if (layer.DynamicAvatarColors != null)
                {
                    foreach (var color in layer.DynamicAvatarColors)
                    {
                        color.CreatedAt = time;
                        color.CreatedBy = userId;
                    }
                }
                foreach (var item in layer.DynamicAvatarItems)
                {
                    item.CreatedAt = time;
                    item.CreatedBy = userId;
                }
                var addedLayer = await _dynamicAvatarService.AddLayerAsync(layer);

                var layerAssetPath  = Path.Combine(assetPath, addedLayer.Name);
                var destinationRoot = Path.Combine($"site{siteId}", "dynamicavatars", $"layer{addedLayer.Id}");
                var destinationPath = _pathResolver.ResolveContentFilePath(destinationRoot);
                if (!Directory.Exists(destinationPath))
                {
                    Directory.CreateDirectory(destinationPath);
                }

                List <DynamicAvatarElement> elementList = new List <DynamicAvatarElement>();
                foreach (var item in addedLayer.DynamicAvatarItems)
                {
                    var itemRoot = Path.Combine(destinationRoot, $"item{item.Id}");
                    var itemPath = Path.Combine(destinationPath, $"item{item.Id}");
                    if (!Directory.Exists(itemPath))
                    {
                        Directory.CreateDirectory(itemPath);
                    }
                    if (addedLayer.DynamicAvatarColors.Count > 0)
                    {
                        foreach (var color in addedLayer.DynamicAvatarColors)
                        {
                            var element = new DynamicAvatarElement()
                            {
                                DynamicAvatarItemId  = item.Id,
                                DynamicAvatarColorId = color.Id,
                                Filename             = Path.Combine(itemRoot, $"{item.Id}_{color.Id}.png")
                            };
                            elementList.Add(element);
                            System.IO.File.Copy(
                                Path.Combine(layerAssetPath, $"{item.Name} {color.Color}.png"),
                                Path.Combine(itemPath, $"{item.Id}_{color.Id}.png"));
                        }
                    }
                    else
                    {
                        var element = new DynamicAvatarElement()
                        {
                            DynamicAvatarItemId = item.Id,
                            Filename            = Path.Combine(itemRoot, $"{item.Id}.png")
                        };
                        elementList.Add(element);
                        System.IO.File.Copy(Path.Combine(layerAssetPath, $"{item.Name}.png"),
                                            Path.Combine(itemPath, $"{item.Id}.png"));
                    }
                }
                await _dynamicAvatarService.AddElementListAsync(elementList);
            }

            IEnumerable <DynamicAvatarBundle> bundleList;
            var bundleJsonPath = Path.Combine(assetPath, "default bundles.json");

            using (StreamReader file = System.IO.File.OpenText(bundleJsonPath))
            {
                var jsonString = await file.ReadToEndAsync();

                bundleList = JsonConvert.DeserializeObject <IEnumerable <DynamicAvatarBundle> >(jsonString);
            }

            foreach (var bundle in bundleList)
            {
                List <int> items = bundle.DynamicAvatarItems.Select(_ => _.Id).ToList();
                bundle.DynamicAvatarItems = null;
                var newBundle = await _dynamicAvatarService.AddBundleAsync(bundle);

                foreach (var item in items)
                {
                    await _dynamicAvatarService.AddBundleItemAsync(newBundle.Id, item);
                }
            }
            ShowAlertSuccess("Default dynamic avatars have been successfully added.");
            return(View("Index"));
        }