public PlayerShip(WgStatsShip wgStatsShip, WgStatsPlayer player, WgShip wgShip, int relationship) : this(wgShip) { if (wgStatsShip == null || player == null) return; ShipId = wgStatsShip.ShipId; AccountId = wgStatsShip.AccountId; Nickname = player.Nickname; Relation = relationship; Frags = wgStatsShip.Pvp.Frags; Wins = wgStatsShip.Pvp.Wins; Battles = wgStatsShip.Pvp.Battles; DamageDealt = wgStatsShip.Pvp.DamageDealt; XpEarned = wgStatsShip.Pvp.Xp; IsPrivateOrHidden = wgStatsShip.Private != null; }
private async Task <PlayerShip> GetAsync(ReplayVehicle replayVehicle, bool ranked) { var wgShip = WgShips.SingleOrDefault(s => s.ShipId == replayVehicle.ShipId); try { var playerResponse = await _httpClient.GetAsync($"wows/account/list/?application_id={ApplicationId}&search={replayVehicle.Name}"); if (playerResponse.StatusCode == HttpStatusCode.OK) { var playerJson = await playerResponse.Content.ReadAsStringAsync(); var players = await Task.Run(() => JsonConvert.DeserializeObject <WgPlayerSearchResult>(playerJson)); if (players.Status != "error") { var player = players.Data.SingleOrDefault(p => p.Nickname == replayVehicle.Name); if (player != null) { var statsUrl = ranked ? $"wows/seasons/shipstats/?application_id={ApplicationId}&account_id={player.AccountId}&ship_id={replayVehicle.ShipId}&season_id=7" : $"wows/ships/stats/?application_id={ApplicationId}&account_id={player.AccountId}&ship_id={replayVehicle.ShipId}"; var shipStatsResponse = await _httpClient.GetAsync(statsUrl); if (shipStatsResponse.StatusCode == HttpStatusCode.OK) { var shipStatsJson = await shipStatsResponse.Content.ReadAsStringAsync(); shipStatsJson = ranked ? shipStatsJson.Replace("\"" + player.AccountId + "\":", "\"season_wrapper\":") .Replace("\"7\":", "\"season_data\":") : shipStatsJson.Replace("\"" + player.AccountId + "\":", "\"Ships\":"); var shipStats = await Task.Run(() => JsonConvert.DeserializeObject <WgPlayerShipsStatsResult>(shipStatsJson)); if (shipStats?.Status != "error") { if (ranked && shipStats?.Data?.SeasonsWrapper != null && shipStats.Data.SeasonsWrapper.Any()) { var rankedShip = shipStats.Data.SeasonsWrapper.First().Seasons.SeasonData.Ship; var ship = WgStatsShip.FromRanked(rankedShip, player.AccountId, replayVehicle.ShipId); return(new PlayerShip(ship, player, wgShip, replayVehicle.Relation)); } if (shipStats?.Data?.Ships != null && shipStats.Data.Ships.Any()) { var ship = shipStats.Data.Ships.First(); return(new PlayerShip(ship, player, wgShip, replayVehicle.Relation)); } } else { _logger.Error("Error occured while fetching player " + replayVehicle.Name, null); } } } } else { _logger.Error("Error occured while fetching player " + replayVehicle.Name, null); } } } catch (Exception e) { _logger.Error("Error occured while fetching player " + replayVehicle.Name, e); } return(new PlayerShip(wgShip) { Nickname = replayVehicle.Name, Relation = replayVehicle.Relation, IsPrivateOrHidden = true }); }