private void ImportOpponentDeck(GameStats stats) { if(stats == null) return; Core.MainWindow.DeckFlyout.SetDeck(stats.GetOpponentDeck()); Core.MainWindow.FlyoutDeck.Header = "Opponent"; Core.MainWindow.FlyoutDeck.IsOpen = true; BtnOverallShowOpponentDeck.Content = BtnOpponentDeckTextHide; BtnShowOpponentDeck.Content = BtnOpponentDeckTextHide; }
public static async Task<PostResult> PostGameResultAsync(GameStats game, Deck deck) { if(!IsValidGame(game)) return PostResult.Failed; if(!deck.HasHearthStatsId) { Logger.WriteLine("can not upload game, deck has no hearthstats id", "HearthStatsAPI"); return PostResult.Failed; } long versionId; if(!long.TryParse(deck.HearthStatsDeckVersionId, out versionId)) { Logger.WriteLine("error: invalid HearthStatsDeckVersionId", "HearthStatsAPI"); return PostResult.Failed; } Logger.WriteLine("uploading match: " + game, "HearthStatsAPI"); var url = BaseUrl + "/matches?auth_token=" + _authToken; dynamic gameObj = new ExpandoObject(); gameObj.mode = game.GameMode.ToString(); gameObj.@class = string.IsNullOrEmpty(game.PlayerHero) ? deck.Class : game.PlayerHero; gameObj.result = game.Result.ToString(); gameObj.coin = game.Coin.ToString().ToLower(); gameObj.numturns = game.Turns; gameObj.duration = (int)(game.EndTime - game.StartTime).TotalSeconds; gameObj.deck_id = deck.HearthStatsIdForUploading; gameObj.deck_version_id = versionId; if(!string.IsNullOrEmpty(game.OpponentHero)) gameObj.oppclass = game.OpponentHero; if(!string.IsNullOrEmpty(game.OpponentName)) gameObj.oppname = game.OpponentName; if(!string.IsNullOrEmpty(game.Note)) gameObj.notes = game.Note; if(game.GameMode == GameMode.Ranked && game.HasRank) gameObj.ranklvl = game.Rank.ToString(); var opponentCards = game.GetOpponentDeck().Cards; if(opponentCards.Where(Database.IsActualCard).Any()) gameObj.oppcards = opponentCards.Where(Database.IsActualCard).Select(c => new {id = c.Id, count = c.Count}).ToArray(); gameObj.created_at = game.StartTime.ToUniversalTime().ToString("s"); var data = JsonConvert.SerializeObject(gameObj); try { var response = await PostAsync(url, data); var json = JsonConvert.DeserializeObject(response); if(json.status.ToString() == "200") { game.HearthStatsId = json.data.id; Logger.WriteLine("assigned id to match: " + game.HearthStatsId, "HearthStatsAPI"); return PostResult.WasSuccess; } if(json.status.ToString() == "fail" && json.message.ToString().Contains("Deck could not be found")) { //deck does not exist on hearthstats deck.ResetHearthstatsIds(); DeckList.Save(); deck.DeckStats.Games.ForEach(g => g.ResetHearthstatsIds()); DeckStatsList.Save(); } return PostResult.Failed; } catch(Exception e) { Logger.WriteLine(e.ToString(), "HearthStatsAPI"); return PostResult.Failed; } }