Ejemplo n.º 1
0
        private async Task <IActionResult> ForgeVersion(string minecraftVersionId, string forgeVersionId, string action, VersionsPostViewModel model)
        {
            var minecraftVersion = await _context.MinecraftVersions.FindAsync(minecraftVersionId);

            if (minecraftVersion == null)
            {
                return(NotFound());
            }
            if (!Util.IsCorrectUuid(forgeVersionId))
            {
                return(NotFound());
            }
            switch (action)
            {
            case "Edit":
            {
                var forgeVersion = await _context.ForgeVersions.FindAsync(forgeVersionId);

                if (forgeVersion == null)
                {
                    return(NotFound());
                }
                forgeVersion.Version     = model.ForgeEditViewModel.Version;
                forgeVersion.IsRecommend = model.ForgeEditViewModel.IsRecommend;
                // File check
                if (model.ForgeEditViewModel.ForgeZipFile != null)
                {
                    var file = _storageSetting.GetForgeStorageSetting().GetForgeZipFile(minecraftVersion, forgeVersion);
                    using (var target = file.OpenWrite())
                    {
                        await model.ForgeEditViewModel.ForgeZipFile.CopyToAsync(target);
                    }
                }
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Versions), "Admin", new RouteValueDictionary
                    {
                        { "id", minecraftVersionId },
                        { "subaction", "" },
                        { "subsubaction", "" },
                        { "message", "success_save" }
                    }));
            }
            }


            return(NotFound());
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Versions(string id, string subaction, string subsubaction, VersionsPostViewModel model)
        {
            switch (id)
            {
            case "New":
            {
                if (await _context.MinecraftVersions.AnyAsync(v => v.Version == model.NewVersionViewModel.Version))
                {
                    return(BadRequest());
                }
                var maxRank = await _context.MinecraftVersions
                              .AsNoTracking()
                              .OrderByDescending(v => v.Rank)
                              .Select(v => v.Rank + 1)
                              .FirstOrDefaultAsync();

                var now   = DateTime.UtcNow;
                var entry = await _context.MinecraftVersions.AddAsync(new MinecraftVersion
                    {
                        Version            = model.NewVersionViewModel.Version,
                        DockerImageVersion = model.NewVersionViewModel.DockerImageVersion,
                        ForgeVersions      = new List <ForgeVersion>(),
                        CreatedAt          = now,
                        UpdatedAt          = now,
                        Rank = maxRank
                    });

                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Versions), "Admin", new RouteValueDictionary
                    {
                        { "id", entry.Entity.Id },
                        { "subaction", "" },
                        { "message", "success_create" }
                    }));
            }
            }
            if (!Util.IsCorrectUuid(id))
            {
                return(NotFound());
            }
            var minecraftVersion = await _context.MinecraftVersions.Include(v => v.ForgeVersions).FirstOrDefaultAsync(v => v.Id == id);

            switch (subaction)
            {
            case "New":
            {
                if (_context.ForgeVersions.Any(v => v.Version == model.NewForgeVersionViewModel.Version))
                {
                    return(BadRequest());
                }
                var newForgeList = new List <ForgeVersion>(minecraftVersion.ForgeVersions);
                var forgeVersion = await _context.ForgeVersions.AddAsync(new ForgeVersion
                    {
                        Version     = model.NewForgeVersionViewModel.Version,
                        IsRecommend = model.NewForgeVersionViewModel.IsRecommend
                    });

                newForgeList.Add(forgeVersion.Entity);
                minecraftVersion.ForgeVersions = newForgeList;
                _context.MinecraftVersions.Update(minecraftVersion);
                await _context.SaveChangesAsync();

                var file = _storageSetting.GetForgeStorageSetting().GetForgeZipFile(minecraftVersion, forgeVersion.Entity);
                file.Directory.Create();
                using (var target = file.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite))
                {
                    await model.NewForgeVersionViewModel.ForgeZipFile.CopyToAsync(target);
                }
                return(RedirectToAction(nameof(Versions), "Admin", new RouteValueDictionary
                    {
                        { "id", id },
                        { "subaction", "" },
                        { "message", "success_create_forge" }
                    }));
            }

            case "DockerImageVersion":
            {
                minecraftVersion.DockerImageVersion = model.DockerImageVersionViewModel.Version;
                _context.MinecraftVersions.Update(minecraftVersion);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Versions), "Admin", new RouteValueDictionary
                    {
                        { "id", id },
                        { "subaction", "" },
                        { "message", "success_save" }
                    }));
            }

            default:
            {
                return(await ForgeVersion(id, subaction, subsubaction, model));
            }
            }
        }