public static void MapFrom(this ArenaSessionModel target, ArenaSessionModel source) { target.InjectFrom(source); // target.Games.IsNotifying = false; target.Games.Clear(); target.Games.AddRange(source.Games); // target.Games.IsNotifying = true; // target.Games.Refresh(); }
public static void MapFrom(this ArenaSessionModel target, ArenaSession source) { target.InjectFrom(source); // target.Games.IsNotifying = false; target.Games.Clear(); target.Games.AddRange(source.Games.Select(g => g.ToModel())); // target.Games.IsNotifying = true; // target.Games.Refresh(); }
public static ArenaSessionModel ToModel(this ArenaSession arena, int arenaSessionRecurse = 0) { if (arena == null) { return null; } ArenaSessionModel model = null; model = new ArenaSessionModel(); model.InjectFrom(arena); model.Games.AddRange(arena.Games.Select(x => x.ToModel(arenaSessionRecurse, model))); return model; }
public static ArenaSessionModel ToModel(this ArenaSession arena, int arenaSessionRecurse = 0) { if (arena == null) { return(null); } ArenaSessionModel model = null; model = new ArenaSessionModel(); model.InjectFrom(arena); model.Games.AddRange(arena.Games.Select(x => x.ToModel(arenaSessionRecurse, model))); return(model); }
public static GameResultModel ToModel(this GameResult game, int arenaSessionRecurse = 0, ArenaSessionModel arenaSessionModel = null) { if (game == null) { return null; } GameResultModel model = null; model = new GameResultModel(); model.InjectFrom(game); if (arenaSessionRecurse <= 1) { arenaSessionRecurse++; model.ArenaSession = arenaSessionModel ?? game.ArenaSession.ToModel(arenaSessionRecurse); } return model; }
public async Task AssignGameToArena(GameResultModel gameModel, ArenaSessionModel arenaModel) { using (var context = this.dbContext()) { // var lastGame = context.Games.Where(x => x.ArenaSessionId == arenaModel.Id).OrderByDescending(x => x.ArenaGameNo).FirstOrDefault(); var arena = context.ArenaSessions.Query().First(x => x.Id == arenaModel.Id); var game = context.Games.Query().First(x => x.Id == gameModel.Id); // game.ArenaGameNo = lastGame == null ? 1 : lastGame.ArenaGameNo + 1; AddGameToArena(game, arena); SetEndDateIfNeeded(arena); arena.Modified = DateTime.Now; game.Modified = DateTime.Now; await context.SaveChangesAsync(); gameModel.InjectFrom(game); arenaModel.InjectFrom(arena); gameModel.ArenaSession = arenaModel; arenaModel.Games.Add(gameModel); } }
public async Task UpdateArenaSession(ArenaSessionModel arenaModel) { using (var context = this.dbContext()) { var arena = context.ArenaSessions.Query().FirstOrDefault(x => x.Id == arenaModel.Id); if (arena == null) { throw new ArgumentException("arena does not exist", "arenaModel"); } if (!Equals(arenaModel.Hero, arena.Hero)) { arena.Hero = context.Heroes.Find(arenaModel.Hero.Id); } if (arenaModel.Image1 != null) { var img = context.ArenaDeckImages.Find(arenaModel.Image1.Id); if (img == null) { img = arenaModel.Image1; context.ArenaDeckImages.Add(img); } context.Entry(img).CurrentValues.SetValues(arenaModel.Image1); arena.Image1 = img; } if (arenaModel.Image2 != null) { var img = context.ArenaDeckImages.Find(arenaModel.Image2.Id); if (img == null) { img = arenaModel.Image2; context.ArenaDeckImages.Add(img); } context.Entry(img).CurrentValues.SetValues(arenaModel.Image2); arena.Image2 = img; } context.Entry(arena).CurrentValues.SetValues(arenaModel); SetEndDateIfNeeded(arena); arena.Modified = DateTime.Now; await context.SaveChangesAsync(); arena = context.ArenaSessions.Query().First(x => x.Id == arena.Id); var latestId = context.ArenaSessions.OrderByDescending(x => x.StartDate).Select(x => x.Id).FirstOrDefault(); arenaModel.InjectFrom(arena); this.events.PublishOnBackgroundThread(new ArenaSessionUpdated(arenaModel.Id, latestId == arena.Id)); } }
public async Task<ArenaSessionModel> AddArenaSession(ArenaSessionModel arenaModel) { using (var context = this.dbContext()) { var arena = new ArenaSession(); arena.InjectFrom(arenaModel); if (arenaModel.Hero != null) { arena.Hero = context.Heroes.Find(arenaModel.Hero.Id); } if (arenaModel.Image1 != null) { var img = context.ArenaDeckImages.Find(arenaModel.Image1.Id); if (img == null) { img = arenaModel.Image1; context.ArenaDeckImages.Add(img); } context.Entry(img).CurrentValues.SetValues(arenaModel.Image1); arena.Image1 = img; } if (arenaModel.Image2 != null) { var img = context.ArenaDeckImages.Find(arenaModel.Image2.Id); if (img == null) { img = arenaModel.Image2; context.ArenaDeckImages.Add(img); } context.Entry(img).CurrentValues.SetValues(arenaModel.Image2); arena.Image2 = img; } context.ArenaSessions.Add(arena); await context.SaveChangesAsync(); arenaModel.InjectFrom(arena); } this.events.PublishOnBackgroundThread(new ArenaSessionAdded(arenaModel)); return arenaModel; }
public async Task MergeArenas(ArenaSessionModel source, ArenaSessionModel target) { if (source == null || target == null || source.Hero == null || target.Hero == null || source.Hero.Id != target.Hero.Id) { Log.Error("Error merging arenas, null parameters or heroes are not the same."); return; } using (var context = this.dbContext()) { var sourceArena = context.ArenaSessions.Query().FirstOrDefault(x => x.Id == source.Id); var targetArena = context.ArenaSessions.Query().FirstOrDefault(x => x.Id == target.Id); if (sourceArena == null || targetArena == null) { Log.Error("Error merging arenas, source or target does not exist"); return; } var updatedGames = new List<GameResult>(); foreach (var sourceGame in sourceArena.Games) { AddGameToArena(sourceGame, targetArena); updatedGames.Add(sourceGame); } for (int i = sourceArena.Games.Count - 1; i >= 0; i--) { sourceArena.Games.Remove(sourceArena.Games[i]); } context.ArenaSessions.Remove(sourceArena); SetEndDateIfNeeded(targetArena); await context.SaveChangesAsync(); target.MapFrom(targetArena); this.events.PublishOnBackgroundThread(new ArenaSessionDeleted(source)); this.events.PublishOnBackgroundThread(new ArenaSessionUpdated(targetArena.Id)); foreach (var game in updatedGames) { this.events.PublishOnBackgroundThread(new GameResultUpdated(game.Id, game.ArenaSessionId)); } } }
public ArenaSessionDeleted(ArenaSessionModel arenaSession) { ArenaSession = arenaSession; }
protected bool Equals(ArenaSessionModel other) { return this.Id.Equals(other.Id); }
public static GameResultModel ToModel(this GameResult game, int arenaSessionRecurse = 0, ArenaSessionModel arenaSessionModel = null) { if (game == null) { return(null); } GameResultModel model = null; model = new GameResultModel(); model.InjectFrom(game); if (arenaSessionRecurse <= 1) { arenaSessionRecurse++; model.ArenaSession = arenaSessionModel ?? game.ArenaSession.ToModel(arenaSessionRecurse); } return(model); }
public ArenaSessionAdded(ArenaSessionModel arenaSession) { this.ArenaSession = arenaSession; }
public async Task Save() { var arena = new ArenaSessionModel(); arena.Hero = Hero; arena.StartDate = Started; arena.Losses = Losses; arena.Wins = Wins; arena.Server = SelectedServer.Name; await gameManager.AddArenaSession(arena); events.PublishOnBackgroundThread(new SendNotification("Arena successfully saved.")); Reset(); IsOpen = false; ArenaFlyout.Load(arena); }
public async Task Retire(ArenaSessionModel arenaModel) { using (var context = this.dbContext()) { var arena = context.ArenaSessions.Query().First(x => x.Id == arenaModel.Id); arena.Retired = true; if (arena.EndDate == null) { arena.EndDate = DateTime.Now; } arena.Modified = DateTime.Now; await context.SaveChangesAsync(); arenaModel.InjectFrom(arena); } }
public async Task MoveGameToArena(GameResultModel gameModel, ArenaSessionModel arenaModel) { using (var context = this.dbContext()) { var sourceArena = context.ArenaSessions.Query().First(x => x.Id == gameModel.ArenaSessionId); var targetarena = context.ArenaSessions.Query().First(x => x.Id == arenaModel.Id); var game = context.Games.Query().First(x => x.Id == gameModel.Id); if (sourceArena.Games.Contains(game)) { sourceArena.Games.Remove(game); if (game.Victory) { sourceArena.Wins--; } else { sourceArena.Losses--; } } if (!(Equals(targetarena.Hero, game.Hero))) { game.Hero = targetarena.Hero; } AddGameToArena(game, targetarena); SetEndDateIfNeeded(targetarena); context.SaveChanges(); var latestId = context.ArenaSessions.OrderByDescending(x => x.StartDate).Select(x => x.Id).FirstOrDefault(); this.events.PublishOnBackgroundThread(new ArenaSessionUpdated(sourceArena.Id, latestId == sourceArena.Id)); this.events.PublishOnBackgroundThread(new ArenaSessionUpdated(targetarena.Id, latestId == targetarena.Id)); this.events.PublishOnBackgroundThread(new GameResultUpdated(gameModel.Id, game.ArenaSessionId)); } }
protected bool Equals(ArenaSessionModel other) { return(Id.Equals(other.Id)); }