public IEnumerable <DataContainers.PlayerDetails> GetPlayers(uint teamId) { string url = new StringBuilder("file=players&version=2.0&teamID=") .Append(teamId).ToString(); XDocument doc = XDocument.Load(ChppAccessor.GetDataReader(url, DataFlags.Dynamic)); XElement elTeam = doc.Root.AssertElement("Team"); Team compTeam = MatchParserHelper.GetTeam(elTeam, string.Empty); if (teamId != compTeam.ID) { throw new Exception("received wrong team info"); } IList <PlayerDetails> players = new List <PlayerDetails>(); foreach (XElement el in elTeam.AssertElement("PlayerList").Elements("Player")) { int id = int.Parse(el.AssertElement("PlayerID").Value); string givenName = el.AssertElement("FirstName").Value; string nickName = el.AssertElement("NickName").Value; string surName = el.AssertElement("LastName").Value; players.Add(new PlayerDetails(id, givenName, nickName, surName)); //yield return new PlayerDetails(id, givenName, nickName, surName); // this was very slow, why? } return(players); }
public TeamDetails GetTeamDetails(uint teamId) { string url = new StringBuilder("file=teamdetails&version=2.6&teamID=") .Append(teamId).ToString(); XDocument doc = XDocument.Load(ChppAccessor.GetDataReader(url, DataFlags.Dynamic)); XElement elUser = doc.Root.AssertElement("User"); int userId = int.Parse(elUser.AssertElement("UserID").Value); string userName = elUser.AssertElement("Loginname").Value; DateTime userJoinDate = DateTime.Parse(elUser.AssertElement("ActivationDate").Value); // not <SignupDate> here User user = new User(userId, userName) { JoinDate = userJoinDate }; Team team = MatchParserHelper.GetTeam(doc.Root.AssertElement("Team"), string.Empty); return(new TeamDetails(team.ID, team.Name) { Owner = user }); }
public TransferHistory GetTransfers(uint teamId) { Team team = null; DateTime from = DateTime.MaxValue; DateTime to = DateTime.MinValue; List <Transfer> transfers = new List <Transfer>(); uint numberOfPages = 0; uint curPage = 1; do { string url = new StringBuilder("file=transfersteam&version=1.2") .Append("&teamID=").Append(teamId) .Append("&pageIndex=") .Append(curPage).ToString(); XDocument doc = XDocument.Load(ChppAccessor.GetDataReader(url, DataFlags.Dynamic)); team = MatchParserHelper.GetTeam(doc.Root.AssertElement("Team"), string.Empty); XElement elTransfers = doc.Root.AssertElement("Transfers"); numberOfPages = uint.Parse(elTransfers.AssertElement("Pages").Value); DateTime startDate = DateTime.Parse(elTransfers.AssertElement("StartDate").Value); DateTime endDate = DateTime.Parse(elTransfers.AssertElement("EndDate").Value); if (startDate < from && startDate != DateTime.MinValue) { from = startDate; } // ORIGINAL IMPLEMENTATION OF NEXT LINE: //if (endDate > to && endDate != DateTime.MaxValue) to = endDate; // REASON FOR CHANGE: // DateTime.MaxValue contains additional nanosecond ticks, so it does not equal DateTime(9999,12,31,23,59,59) // For simplicity, we deduct one day from this max value and assert that the returned value is smaller than this if (endDate > to && endDate < DateTime.MaxValue.AddDays(-1)) { to = endDate; } foreach (XElement elTransfer in elTransfers.Elements("Transfer")) { int id = int.Parse(elTransfer.AssertElement("TransferID").Value); DateTime date = DateTime.Parse(elTransfer.AssertElement("Deadline").Value); Player player = MatchParserHelper.GetPlayer(elTransfer.AssertElement("Player")); Team buyer = MatchParserHelper.GetTeam(elTransfer.AssertElement("Buyer"), "Buyer"); Team seller = MatchParserHelper.GetTeam(elTransfer.AssertElement("Seller"), "Seller"); Money price = new Money(double.Parse(elTransfer.AssertElement("Price").Value), Currency.SEK); transfers.Add(new Transfer(id, date, player, buyer, seller, price)); } } while (curPage++ < numberOfPages); return(new TransferHistory(team, from, to) { Transfers = transfers }); }
public MatchArchive GetMatches(uint teamId, DateTime startDate, DateTime endDate) { List <Match> matches = new List <Match>(); DateTime curMonthStart = startDate; Team team = null; // 15 minute grid endDate = endDate.AddSeconds(-endDate.Second); endDate = endDate.AddMinutes(-(endDate.Minute % 15)); while (curMonthStart < endDate) { DateTime curMonthEnd = new DateTime(curMonthStart.Year, curMonthStart.Month, 1).AddMonths(1).AddSeconds(-1); if (curMonthEnd > endDate) { curMonthEnd = endDate; } string url = new StringBuilder("file=matchesarchive&version=1.1") .Append("&teamID=").Append(teamId) .Append("&FirstMatchDate=").Append(curMonthStart.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)) .Append("&LastMatchDate=").Append(curMonthEnd.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)).ToString(); XDocument doc = XDocument.Load(ChppAccessor.GetDataReader(url, DataFlags.Static)); XElement elTeam = doc.Root.AssertElement("Team"); Team compTeam = MatchParserHelper.GetTeam(elTeam, string.Empty); if (teamId != compTeam.ID) { throw new Exception("received wrong team info"); } team = compTeam; // assert dates foreach (XElement el in doc.Descendants("Match")) { matches.Add(MatchParserHelper.GetMatch(el)); } curMonthStart = curMonthEnd.AddSeconds(1); } // TODO: team may be null here (if endDate < startDate) MatchArchive ar = new MatchArchive(team, startDate, endDate); ar.Matches = matches; return(ar); }
private Lineup GetLineup(int matchId, int teamId) { string url = new StringBuilder("file=matchlineup&version=1.6&matchID=").Append(matchId) .Append("&teamID=").Append(teamId).ToString(); XDocument doc = XDocument.Load(ChppAccessor.GetDataReader(url, DataFlags.Static)); XElement elTeam = doc.Root.AssertElement("Team"); Team compTeam = MatchParserHelper.GetTeam(elTeam, string.Empty); if (teamId != compTeam.ID) { throw new Exception("received wrong team info"); } XElement elLineup = elTeam.AssertElement("Lineup"); Lineup lineup = new Lineup(); foreach (XElement elPlayer in elLineup.Elements("Player")) { Lineup.LineupRole role; XElement elRoleId = elPlayer.Element("RoleID"); if (elRoleId == null || string.IsNullOrEmpty(elRoleId.Value)) { role = Lineup.LineupRole.ReplacedPlayerN; } else { role = (Lineup.LineupRole) int.Parse(elPlayer.AssertElement("RoleID").Value); } double? stars = null; XElement elRatingStars = elPlayer.Element("RatingStars"); if (elRatingStars != null && !string.IsNullOrEmpty(elRatingStars.Value)) { stars = double.Parse(elRatingStars.Value, CultureInfo.InvariantCulture); } Player player = MatchParserHelper.GetPlayer(elPlayer); lineup.LineupItems.Add(new Lineup.LineupItem() { Player = player, Role = role, RatingStars = stars }); } return(lineup); }