private List<Message> buildMessagesList(XmlDocument x, MessageType type) { XmlUtils.UseNode(x); int msgCount = XmlUtils.Int("/response/count"); //int msgCount = Convert.ToInt32(x.SelectNodes("/response/count")); XmlNodeList msgsNodes = x.SelectNodes("/response/message"); if (msgsNodes.Count > 0) { List<Message> msgList = new List<Message>(); foreach (XmlNode msgNode in msgsNodes) { Message message = new Message(); message.Id = Convert.ToInt32(msgNode.SelectSingleNode("mid").InnerText); message.Body = msgNode.SelectSingleNode("body").InnerText; if (type == MessageType.History) { this.HistoryMessagesCount = msgCount; message.UserId = Convert.ToInt32(msgNode.SelectSingleNode("from_id").InnerText); } else { switch(type) { case MessageType.Incoming: this.IncomingMessagesCount = msgCount; break; case MessageType.Outgoing: this.OutgoingMessagesCount = msgCount; break; } message.Title = msgNode.SelectSingleNode("title").InnerText; message.UserId = Convert.ToInt32(msgNode.SelectSingleNode("uid").InnerText); } message.Date = CommonUtils.FromUnixTime(msgNode.SelectSingleNode("date").InnerText); message.State = (MessageState)Convert.ToInt32(msgNode.SelectSingleNode("read_state").InnerText); msgList.Add(message); } return msgList; } return null; }
private List<Message> buildMessagesList(XmlDocument x, MessageType type) { XmlUtils.UseNode(x); int msgCount = XmlUtils.Int("/response/count"); //int msgCount = Convert.ToInt32(x.SelectNodes("/response/count")); XmlNodeList msgsNodes = x.SelectNodes("/response/message"); EntityBuilder builder = new EntityBuilder(); List<Message> mappedMessages = new List<Message>(); foreach (XmlNode node in msgsNodes) { mappedMessages.Add((Message)builder.MapTo(typeof(ApiCore.Messages.Message), node)); } // если количество сообщений больше 0, работаем if (msgsNodes.Count > 0) { // создали новый список, в котором будут храниться сообщения List<Message> msgList = new List<Message>(); // пробегаем по коллекции нод с сообщениями в xml foreach (XmlNode msgNode in msgsNodes) { // используем текущую ноду волшебным XmlUtils ) XmlUtils.UseNode(msgNode); Message message = new Message(); message.Id = XmlUtils.Int("mid"); //раньше было так: Convert.ToInt32(msgNode.SelectSingleNode("mid").InnerText); message.Title = XmlUtils.String("title"); //msgNode.SelectSingleNode("title").InnerText; message.Body = XmlUtils.String("body"); // раньше было так: msgNode.SelectSingleNode("body").InnerText; // если указан тип желаемых сообщений, продолжаем if (type != null) { // если историческое сообщение if (type == MessageType.History) { // зачем то устанавливаем внутри фабрики значение счетчика // TODO: разобраться, нахуйа это надо :D this.HistoryMessagesCount = msgCount; message.UserId = XmlUtils.Int("from_id");//Convert.ToInt32(msgNode.SelectSingleNode("from_id").InnerText); } else { // иначе если входящее или исходящее сообщение. // зачем то устанавливаются внутри фабрики значения о количествве входящих // или исходящих сообщений. // бля, чо я курил когда писал это? switch (type) { case MessageType.Incoming: this.IncomingMessagesCount = msgCount; break; case MessageType.Outgoing: this.OutgoingMessagesCount = msgCount; break; } message.Title = XmlUtils.String("title"); //msgNode.SelectSingleNode("title").InnerText; message.UserId = XmlUtils.Int("uid"); //Convert.ToInt32(msgNode.SelectSingleNode("uid").InnerText); } } // делаем рутиную работу про преобразованию xml в объекты message.Date = CommonUtils.FromUnixTime(XmlUtils.Int("date")); // CommonUtils.FromUnixTime(msgNode.SelectSingleNode("date").InnerText); message.ReadState = (MessageState)XmlUtils.Int("read_state"); //(MessageState)Convert.ToInt32(msgNode.SelectSingleNode("read_state").InnerText); msgList.Add(message); } return msgList; } return null; }