Beispiel #1
0
        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;
        }