예제 #1
0
        public void AddGame(GameManagerNode node)
        {
            var game = new Game()
            {
                Id        = node.Id,
                Title     = node.Name,
                Publisher = node.Publisher,
                Year      = node.ReleaseDate.HasValue ? node.ReleaseDate.Value.Year : 0,
                Players   = node.Players.HasValue ? node.Players.Value : 0,
                Position  = node.Position
            };

            _context.Games.Add(game);
            _context.SaveChanges();

            if (node.Files.Count > 0)
            {
                // Move the files to the correct location and update the BleemSync database to reflect where the files are moved to
                var outputDirectory = Path.Combine(_baseGamesDirectory, game.Id.ToString());

                Directory.CreateDirectory(outputDirectory);

                PostProcessGameFiles(node.Files, outputDirectory);
            }

            _storage.Save();
        }
 public GameManagerNodeTreeItem(GameManagerNode node)
 {
     Id     = node.Id.ToString();
     Name   = node.Name;
     Type   = Enum.GetName(typeof(GameManagerNodeType), node.Type);
     Parent = node.ParentId == null ? "#" : node.ParentId.ToString();
 }
예제 #3
0
        public async Task <ActionResult> AddGame()
        {
            var temporaryFiles = new List <GameManagerFile>();
            var formModel      = await Request.StreamFile(_configuration["TemporaryPath"], temporaryFiles);

            GameUpload gameUpload        = new GameUpload();
            var        bindingSuccessful = await TryUpdateModelAsync(gameUpload, prefix : "", valueProvider : formModel);

            if (!bindingSuccessful)
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
            }

            if (gameUpload.Cover != null && gameUpload.Cover != "")
            {
                var file = new GameManagerFile()
                {
                    Name = "cover.png",
                    Path = Path.GetTempFileName()
                };

                var splitted = gameUpload.Cover.Split(",");
                if (splitted.Length > 1)
                {
                    System.IO.File.WriteAllBytes(file.Path, Convert.FromBase64String(splitted[1]));

                    temporaryFiles.Add(file);
                }
            }

            // Add game to the database
            var node = new GameManagerNode()
            {
                Name        = gameUpload.Name,
                SortName    = gameUpload.SortName,
                Description = gameUpload.Description,
                ReleaseDate = gameUpload.ReleaseDate,
                Players     = gameUpload.Players,
                Developer   = gameUpload.Developer,
                Publisher   = gameUpload.Publisher,
                Type        = GameManagerNodeType.Game,
                Files       = temporaryFiles
            };

            _gameManagerNodeRepository.Create(node);
            _storage.Save();

            _gameManagerService.AddGame(node);

            Response.StatusCode = (int)HttpStatusCode.OK;
            return(Json("Game added!"));
        }
        public void UpdateGame(GameManagerNode node)
        {
            var game = _context.Games.Find(node.Id);

            game.Title     = node.Name;
            game.Publisher = node.Publisher;
            game.Year      = node.ReleaseDate.HasValue ? node.ReleaseDate.Value.Year : 0;
            game.Players   = node.Players.HasValue ? node.Players.Value : 0;
            game.Position  = node.Position;

            _context.Games.Update(game);
            _context.SaveChanges();
        }
예제 #5
0
        public void DeleteGame(GameManagerNode node)
        {
            // Delete files first
            var gameDirectory = Path.Combine(_baseGamesDirectory, node.Id.ToString());

            if (Directory.Exists(gameDirectory))
            {
                Directory.Delete(gameDirectory, true);
            }

            var game = _context.Games.Find(node.Id);

            _context.Games.Remove(game);
            _context.SaveChanges();
        }
예제 #6
0
        public IEnumerable <GameManagerNode> GetGames()
        {
            List <GameManagerNode> nodes = new List <GameManagerNode>();

            foreach (var game in _context.Games)
            {
                var node = new GameManagerNode
                {
                    Id          = game.Id,
                    Name        = game.Title,
                    SortName    = game.Title,
                    ReleaseDate = new DateTime(game.Year, 1, 1),
                    Players     = game.Players,
                    Publisher   = game.Publisher,
                    Type        = GameManagerNodeType.Game
                };

                string gameDir = Path.Combine(_baseGamesDirectory, game.Id.ToString());
                // If user for some reason doesn't have the game files, don't return game
                if (Directory.Exists(gameDir))
                {
                    // For files, iterate what we have on disk instead of looking in the database
                    foreach (var path in Directory.GetFiles(gameDir))
                    {
                        node.Files.Add(new GameManagerFile
                        {
                            Name = Path.GetFileName(path),
                            Path = Path.GetFullPath(path),
                            Node = node
                        });
                    }

                    nodes.Add(node);
                }
            }

            return(nodes);
        }
예제 #7
0
 public void UpdateGame(GameManagerNode node)
 {
     UpdateGames(new GameManagerNode[] { node });
 }