public async Task <IActionResult> EditServerSelectedMaps(int serverId)
        {
            if (!await RightsHandler.HasRightsToThisPavlovServer(HttpContext.User,
                                                                 await _userservice.getUserFromCp(HttpContext.User), serverId, _service, _pavlovServerService))
            {
                return(Forbid());
            }
            var serverSelectedMap = new List <ServerSelectedMap>();
            var server            = await _pavlovServerService.FindOne(serverId);

            serverSelectedMap = (await _serverSelectedMapService.FindAllFrom(server)).ToList();

            var tmp = await _mapsService.FindAll();

            if (server.Shack)
            {
                tmp = tmp.Where(x => x.Shack && x.ShackSshServerId == server.SshServer.Id).ToArray();
            }
            else
            {
                tmp = tmp.Where(x => !x.Shack).ToArray();
            }
            var viewModel = new SelectedServerMapsViewModel
            {
                AllMaps      = tmp.ToList(),
                SelectedMaps = serverSelectedMap,
                ServerId     = serverId
            };

            return(View("ServerMaps", viewModel));
        }
        public async Task <bool> SaveServerSelectedMap(int serverId, string mapId, string gameMode, bool move = true, [CanBeNull] string oldMode = "")
        {
            if (!await RightsHandler.HasRightsToThisPavlovServer(HttpContext.User,
                                                                 await _userservice.getUserFromCp(HttpContext.User), serverId, _service, _pavlovServerService))
            {
                return(false);
            }
            var realMap = await _mapsService.FindOne(mapId);

            var pavlovServer = await _pavlovServerService.FindOne(serverId);

            var mapsSelected = await _serverSelectedMapService.FindAllFrom(pavlovServer);

            if (mapsSelected != null)
            {
                var toUpdate = mapsSelected.FirstOrDefault(x => x.Map?.Id == realMap.Id && x.GameMode == gameMode);
                if (toUpdate == null)
                {
                    var newMap = new ServerSelectedMap
                    {
                        Map          = realMap,
                        PavlovServer = pavlovServer,
                        GameMode     = gameMode
                    };
                    await _serverSelectedMapService.Insert(newMap);

                    if (!move) // means that it just changed GameMode
                    {
                        //i need to know to old Game Mode
                        var oldMap = mapsSelected.FirstOrDefault(x => x.Map?.Id == realMap.Id && x.GameMode == oldMode);
                        if (oldMap != null)
                        {
                            await _serverSelectedMapService.Delete(oldMap.Id);
                        }
                    }
                }
                else
                {
                    //Can never go here?
                    toUpdate.GameMode = gameMode;
                    await _serverSelectedMapService.Update(toUpdate);
                }
            }
            else
            {
                var newMap = new ServerSelectedMap
                {
                    GameMode     = gameMode,
                    Map          = realMap,
                    PavlovServer = pavlovServer
                };
                await _serverSelectedMapService.Insert(newMap);
            }

            return(true);
        }