Пример #1
0
        public void TestMessageTypesRoundTrip()
        {
            OfferMessage offerMessage = new OfferMessage();
            offerMessage.AddTag(new Tag(TagType.group, "ooooby"));
            offerMessage.AddTag(new Tag(TagType.loc, "wellington"));
            offerMessage.RawText = "OFFER mulch available now in l:Cardboard box in town: for #free http://bit.ly/message0Info #mulch #ooooby";
            offerMessage.MessageText = "mulch available now in l:Cardboard box in town: for #free";

            string serialized = JSON.Serialize(offerMessage);
            OfferMessage deserializedOffer = JSON.Deserialize<OfferMessage>(serialized);
             Assert.AreEqual(offerMessage, deserializedOffer, "Expected to deserialize to the same object");

            WantedMessage wantedMessage = new WantedMessage();
            wantedMessage.AddTag(new Tag(TagType.group, "ooooby"));
            wantedMessage.AddTag(new Tag(TagType.loc, "wellington"));
            wantedMessage.RawText = "WANTED mulch in l:Cardboard box in town: for #free http://bit.ly/message0Info #mulch #ooooby";
            wantedMessage.MessageText = "mulch in l:Cardboard box in town: for #free";

            serialized = JSON.Serialize(wantedMessage);
            WantedMessage deserializedWanted = JSON.Deserialize<WantedMessage>(serialized);
            AssertMessagesIsTheSame(wantedMessage, deserializedWanted);
            //Assert.AreEqual(wantedMessage, deserializedWanted, "Expected to deserialize to the same object");
        }
Пример #2
0
        public IMessage Parse(IRawMessage rawMessage)
        {
            string sourceText = rawMessage.Text;

            IEnumerable<ITag> tags = ParseTags(sourceText, rawMessage);

            BaseMarketMessage msg;
            switch (GetMessageType(sourceText, tags))
            {
                case MessageType.need:
                case MessageType.needed:
                case MessageType.want:
                case MessageType.wanted:
                    msg = new WantedMessage();
                    break;

                case MessageType.offer:
                case MessageType.available:
                default:
                    msg = new OfferMessage();
                    break;
            }

            msg.CreatedBy = rawMessage.CreatedBy;
            msg.Timestamp = rawMessage.Timestamp;
            msg.MessagePointer = rawMessage.Pointer;
            msg.RawText = rawMessage.Text;
            bool containsGroup = false;
            foreach (ITag tag in tags)
            {
                if (tag.Type == TagType.msg_type) continue; //skip tags of this Type
                if(tag.Type==TagType.group) containsGroup = true;
                msg.AddTag(tag);
            }

            if (!containsGroup)
            {
                ITag possibleGroup = CheckForAtSymbolGroup(sourceText);
                if(possibleGroup != null)
                {
                    //remove the @chchneeds tag from the messages
                    sourceText=sourceText.Replace("@" + possibleGroup.Text, "");
                    msg.AddTag(possibleGroup);
                }
            }

            if (msg.HasValidTags())
            {
                // for efficiency don't even both trying to parse the google address
                // unless it at least has some valid tags
                ILocation location = ParseLocation(sourceText);
                if (location != null)
                {
                    msg.Location = location;
                    foreach (ITag s in location.Tags)
                    {
                        msg.AddTag(s);
                    }
                }
            }
            msg.MessageText = sourceText;
            msg.MoreInfoURL = GetMoreInfoUrl(sourceText);

            string untilText;
            DateTime until;
            if (ParseUntil(sourceText, out untilText, out until))
            {
                msg.SetEndBy(untilText, until);
            }
            msg.AddThumbnail(GetImageUrl(sourceText));
            return msg;
        }