public async Task Save() { using (var busy = Busy.GetTicket()) { GameResultModel gameResult = null; var added = false; if (LastGameId == null) { gameResult = new GameResultModel(); added = true; } else { // gameResult = (await gameRepository.FirstOrDefaultAsync(x => x.Id == this.LastGameId)).ToModel(); gameResult = SelectedGame; } SetGameResult(gameResult); if (ArenaSession != null) { gameResult.ArenaSession = ArenaSession; } if (added) { await gameManager.AddGame(gameResult); } else { await gameManager.UpdateGame(gameResult); } events.PublishOnBackgroundThread(new SendNotification("Game successfully saved.")); LastGameId = gameResult.Id; LoadGameResult(gameResult); } }
private async Task Save() { using (var bsy = Busy.GetTicket()) { var gameResult = new GameResultModel(); ArenaSessionModel arenasession = null; var newArena = false; gameResult.GameMode = GameMode; gameResult.Conceded = Conceded; if (Deck != null) { gameResult.Deck = Deck; } gameResult.GoFirst = GoFirst; gameResult.Hero = Hero; gameResult.OpponentHero = OpponentHero; gameResult.Started = StartTime; gameResult.Stopped = Stopped; gameResult.Turns = Turns; gameResult.Victory = Victory; gameResult.Notes = Notes; gameResult.Server = BindableServerCollection.Instance.DefaultName; if (gameResult.GameMode == GameMode.Arena) { var serverName = gameResult.Server; var latestArena = arenaRepository.Query(a => a.Where(x => x.Server == serverName).OrderByDescending(x => x.StartDate).FirstOrDefault()); if (latestArena == null || latestArena.IsEnded || (gameResult.Hero != null && latestArena.Hero.Key != gameResult.Hero.Key)) { Log.Debug("Creating new arena."); newArena = true; arenasession = new ArenaSessionModel { Hero = gameResult.Hero, StartDate = gameResult.Started }; try { GlobalLocks.NewArenaLock.Reset(); await gameManager.AddArenaSession(arenasession); } finally { GlobalLocks.NewArenaLock.Set(); } } else { arenasession = latestArena.ToModel(); } gameResult.ArenaSession = arenasession; } await gameManager.AddGame(gameResult); // for webapi if (arenasession != null) { if (newArena) { events.PublishOnBackgroundThread(new ArenaSessionStarted(arenasession.StartDate, arenasession.Hero.Key, arenasession.Wins, arenasession.Losses)); } else { if (arenasession.IsEnded && arenasession.EndDate.HasValue) { events.PublishOnBackgroundThread(new ArenaSessionEnded(arenasession.StartDate, arenasession.EndDate.Value, arenasession.Hero.Key, arenasession.Wins, arenasession.Losses)); } } } // notifications //var wonString = gameResult.Victory ? "You won!" : "You lost!"; var title = "New game tracked."; //var hero = gameResult.Hero != null ? gameResult.Hero.ClassName : String.Empty; //var oppHero = gameResult.OpponentHero != null ? gameResult.OpponentHero.ClassName : String.Empty; //var msg = string.Format("Hero: {0}, Opponent: {1}, {2}", hero, oppHero, wonString); //events.PublishOnBackgroundThread(new SendNotification(String.Format("{0} {1}", title, msg))); var vm = IoC.Get <GameResultBalloonViewModel>(); vm.SetGameResult(gameResult); events.PublishOnBackgroundThread(new TrayNotification(title, vm, 10000) { BalloonType = BalloonTypes.GameStartEnd }); // reset Clear(); IsOpen = false; } }