Esempio n. 1
0
 public FeedItem(FeedItem feedItem)
 {
     this.authors = feedItem.authors;
     this.categories = feedItem.categories;
     this.commentsUri = feedItem.commentsUri;
     this.content = feedItem.content;
     this.contentType = feedItem.contentType;
     this.contributors = feedItem.contributors;
     this.copyright = feedItem.copyright;
     this.enclosures = feedItem.enclosures;
     this.guid = feedItem.guid;
     this.moduleItems = feedItem.moduleItems;
     this.published = feedItem.published;
     this.source = feedItem.source;
     this.summary = feedItem.summary;
     this.summaryType = feedItem.summaryType;
     this.title = feedItem.title;
     this.updated = feedItem.updated;
     this.webUris = feedItem.webUris;
 }
Esempio n. 2
0
        private void readEntry(XmlReader subReader)
        {
            subReader.MoveToContent();
            FeedItem feedItem = new FeedItem();

            while (subReader.Read())
            {
                if (subReader.NodeType == XmlNodeType.Element)
                {
                    switch (subReader.Name)
                    {
                        case "title":
                            subReader.MoveToContent();
                            feedItem.Title = subReader.ReadString();
                            break;
                        case "id":
                            subReader.MoveToContent();
                            FeedGuid guid = new FeedGuid(subReader.ReadString());
                            if(!Uri.IsWellFormedUriString(guid.Id, UriKind.Absolute))
                                guid.PermaLink = false;
                            feedItem.Guid = guid;
                            break;
                        case "content":
                            bool contentRead = false;
                            while (subReader.MoveToNextAttribute())
                            {
                                if (subReader.Name == "type")
                                {
                                    if (subReader.Value == "xhtml")
                                    {
                                        subReader.MoveToContent();
                                        feedItem.Content = subReader.ReadInnerXml();
                                        feedItem.ContentType = TextType.Xhtml;
                                        contentRead = true;
                                    }
                                    else if (subReader.Value == "html")
                                    {
                                        feedItem.ContentType = TextType.Html;
                                    }
                                }
                            }
                            if (!contentRead)
                            {
                                subReader.MoveToContent();
                                feedItem.Content = subReader.ReadString();
                            }
                            break;
                        case "summary":
                            bool summaryRead = false;
                            while (subReader.MoveToNextAttribute())
                            {
                                if (subReader.Name == "type")
                                {
                                    if (subReader.Value == "xhtml")
                                    {
                                        subReader.MoveToContent();
                                        feedItem.Summary = subReader.ReadInnerXml();
                                        feedItem.SummaryType = TextType.Xhtml;
                                        summaryRead = true;
                                    }
                                    else if (subReader.Value == "html")
                                    {
                                        feedItem.SummaryType = TextType.Html;
                                    }
                                }
                            }
                            if (!summaryRead)
                            {
                                subReader.MoveToContent();
                                feedItem.Summary = subReader.ReadString();
                            }
                            break;
                        case "modified":
                        case "updated":
                            subReader.MoveToContent();
                            feedItem.Updated = DTHelper.ParseDateTime(subReader.ReadString());
                            break;
                        case "published":
                        case "created":
                            subReader.MoveToContent();
                            feedItem.Published = DTHelper.ParseDateTime(subReader.ReadString());
                            break;
                        case "author":
                            subReader.MoveToContent();
                            feedItem.Authors.Add(readPerson(subReader.ReadSubtree()));
                            break;
                        case "contributor":
                            subReader.MoveToContent();
                            feedItem.Contributors.Add(readPerson(subReader.ReadSubtree()));
                            break;
                        case "rights":
                            subReader.MoveToContent();
                            feedItem.Copyright = subReader.ReadString();
                            break;
                        case "category":
                            Category category = new Category();
                            while (subReader.MoveToNextAttribute())
                            {
                                switch (subReader.Name)
                                {
                                    case "term": category.Term = subReader.Value; break;
                                    case "scheme": category.Scheme = subReader.Value; break;
                                    case "label": category.Label = subReader.Value; break;
                                }
                            }
                            feedItem.Categories.Add(category);
                            break;
                        case "link":
                            Link link = new Link();
                            while (subReader.MoveToNextAttribute())
                            {
                                switch (subReader.Name)
                                {
                                    case "href": link.href = subReader.Value; break;
                                    case "hreflang": link.hreflang = subReader.Value; break;
                                    case "length": link.length = subReader.Value; break;
                                    case "rel": link.rel = subReader.Value; break;
                                    case "title": link.title = subReader.Value; break;
                                    case "type": link.type = subReader.Value; break;
                                }
                            }
                            //In case someone formats a link as <link>href</link>
                            //we can tolerate that as well.
                            if (String.IsNullOrEmpty(link.href))
                            {
                              subReader.MoveToContent();
                              link.href = subReader.ReadString();
                            }
                            normalizeFeedItemLink(feedItem, link);
                            break;
                        default:
                            if (readModules && subReader.Prefix != String.Empty)
                              readModuleItem(subReader, feedItem);
                            break;
                    }
                }
            }

            Feed.Items.Add(feedItem);
        }
Esempio n. 3
0
 /// <summary>link elements -> normal structure on FeedItem</summary>
 private static void normalizeFeedItemLink(FeedItem feedItem, Link link)
 {
     switch (link.rel)
     {
         case "related": break;
         case "via":
             Source source = new Source();
             source.Uri = link.href;
             source.Title = link.title;
             feedItem.Source = source;
             break;
         case "enclosure":
             int length = 0;
             Enclosure enclosure = new Enclosure();
             enclosure.Uri = link.href;
             enclosure.Title = link.title;
             enclosure.Type = link.type;
             if (Int32.TryParse(link.length, out length))
                 enclosure.Length = length;
             feedItem.Enclosures.Add(enclosure);
             break;
         case "self": break; // No link on itself (?)
         case "":
         case "alternate":
             feedItem.WebUris.Add(new FeedUri(link.href, link.title));
             break;
     }
 }
Esempio n. 4
0
        private void readItem(XmlReader subReader)
        {
            subReader.MoveToContent();
            m_CurrentFeedItem = new FeedItem();

            while (subReader.Read())
            {
                if (subReader.NodeType == XmlNodeType.Element)
                {
                      m_CurrentNode = subReader.Name;
                      switch (m_CurrentNode)
                        {
                            case "title":
                                subReader.MoveToContent();
                                m_CurrentFeedItem.Title = subReader.ReadString();
                                break;
                            case "description":
                                subReader.MoveToContent();
                                try
                                {
                                    // One feed had a hex character / & that couldnt be read with XmlReader.
                                  m_CurrentFeedItem.Content = subReader.ReadString();
                                }
                                catch(Exception ex)
                                {
                                  System.Diagnostics.Debug.WriteLine("Error reading the description of a feed item.  Ignored usually: "+ex.Message);
                                }
                                break;
                            case "link":
                                subReader.MoveToContent();
                                FeedUri uri = new FeedUri(subReader.ReadString());
                                m_CurrentFeedItem.WebUris.Add(uri);
                                break;
                            case "author":
                                subReader.MoveToContent();
                                m_CurrentFeedItem.Authors.Add(readPerson(subReader.ReadString()));
                                break;
                            case "category":
                                Category category = new Category();
                                while (subReader.MoveToNextAttribute())
                                {
                                    if (subReader.Name == "domain")
                                        category.Scheme = subReader.Value;
                                }
                                subReader.MoveToContent();
                                category.Label = category.Term = subReader.ReadString();
                                m_CurrentFeedItem.Categories.Add(category);
                                break;
                            case "comments":
                                subReader.MoveToContent();
                                m_CurrentFeedItem.CommentsUri = subReader.ReadString();
                                break;
                            case "enclosure":
                                Enclosure enclosure = new Enclosure();
                                while (subReader.MoveToNextAttribute())
                                {
                                    switch (subReader.Name)
                                    {
                                        case "url": enclosure.Uri = subReader.Value; break;
                                        case "length":
                                            int length = 0;
                                            if (Int32.TryParse(subReader.Value, out length))
                                                enclosure.Length = length;
                                            break;
                                        case "type": enclosure.Type = subReader.Value; break;
                                    }
                                }
                                m_CurrentFeedItem.Enclosures.Add(enclosure);
                                break;
                            case "guid":
                                FeedGuid guid = new FeedGuid();
                                if (subReader.MoveToFirstAttribute())
                                {
                                    if (subReader.Name == "isPermaLink" && subReader.Value == "false")
                                        guid.PermaLink = false;
                                }
                                subReader.MoveToContent();
                                guid.Id = subReader.ReadString();
                                m_CurrentFeedItem.Guid = guid;
                                break;
                            case "pubDate":
                                subReader.MoveToContent();
                                m_CurrentFeedItem.Published = DTHelper.ParseDateTime(subReader.ReadString());
                                break;
                            case "source":
                                Source source = new Source();
                                if (subReader.MoveToFirstAttribute())
                                {
                                    if (subReader.Name == "url")
                                        source.Uri = subReader.Value;
                                }
                                subReader.MoveToContent();
                                source.Title = subReader.ReadString();
                                m_CurrentFeedItem.Source = source;
                                break;
                            default:
                                if (readModules && subReader.Prefix != String.Empty)
                                  readModuleItem(subReader, m_CurrentFeedItem);
                                break;
                        }

                    }
            }

            Feed.Items.Add(m_CurrentFeedItem);
        }
Esempio n. 5
0
 private new void readModuleItem(XmlReader subReader, FeedItem feedItem)
 {
     IModuleItem moduleItem = feedItem.GetModuleItem(subReader.Prefix);
     if (moduleItem != null)
     {
         moduleItem.Parse(subReader.ReadSubtree());
     }
     else
     {
         IModule module = Feed.GetModule(subReader.Prefix);
         if (module != null)
         {
             IModuleItem mi = module.CreateModuleItem();
             if (mi != null)
             {
                 mi.Parse(subReader.ReadSubtree());
                 feedItem.ModuleItems.Add(subReader.Prefix, mi);
             }
         }
     }
 }
Esempio n. 6
0
        private void readItem(XmlReader subReader)
        {
            subReader.MoveToContent();
            FeedItem feedItem = new FeedItem();

            while (subReader.Read())
            {
                if (subReader.NodeType == XmlNodeType.Element)
                {
                    switch (subReader.Name)
                    {
                        case "title":
                            subReader.MoveToContent();
                            feedItem.Title = subReader.ReadString();
                            break;
                        case "link":
                            subReader.MoveToContent();
                            FeedUri uri = new FeedUri(subReader.ReadString());
                            feedItem.WebUris.Add(uri);
                            break;
                        case "description":
                            subReader.MoveToContent();
                            try
                            {
                                // One feed had a hex character that couldnt be read with XmlReader.
                                // TODO: Build a function TryReadString(XmlReader) for all string elements?...
                                feedItem.Content = subReader.ReadString();
                            }
                            catch { }
                            break;
                        default:
                            if (readModules && subReader.Prefix != String.Empty)
                                readModuleItem(subReader, feedItem);
                            break;
                    }
                }
            }

            Feed.Items.Add(feedItem);
        }