private void Read(string xml, Channel c, RssViewModel m) { xml = xml.Replace(RemoveLastBuildDate, String.Empty); var b = Encoding.UTF8.GetBytes(xml); var settings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment, IgnoreWhitespace = true, IgnoreComments = true }; var feed = SyndicationFeed.Load(XmlReader.Create(new MemoryStream(b), settings)); if (feed == null) return; c.Title = feed.Title.Text; c.Image = feed.ImageUrl.OriginalString; var articles = feed.Items.Select(item => new Article { PubDate = item.PublishDate.DateTime, AddDate = DateTime.Now, //The reason for the 8,060-byte limit Description = item.Summary.Text.Length < 1000 ? item.Summary.Text : item.Summary.Text.Substring(0, 1000), Link = item.Links[0].Uri.OriginalString, Title = item.Title.Text, }).Select(art => m.AddArticle(art, c)).ToArray(); m.DeleteArticle(c.Articles.Where(x => !x.IsStared).Except(articles).ToArray(), c); c.LastUpdate = DateTime.Now; }
private void Read(Stream stream, Channel c, RssViewModel m) { var feedFormatter = new Atom10FeedFormatter(); var rssFormater = new Rss20FeedFormatter(); XmlReader atomReader = XmlReader.Create(stream); SyndicationFeedFormatter f = null; if (feedFormatter.CanRead(atomReader)) { feedFormatter.ReadFrom(atomReader); atomReader.Close(); f = feedFormatter; } else if (rssFormater.CanRead(atomReader)) { rssFormater.ReadFrom(atomReader); atomReader.Close(); f = rssFormater; } if (f == null) return; SyndicationFeed feed = f.Feed; c.Title = feed.Title.Text; Article[] articles = feed.Items.Select(item => new Article { PubDate = item.PublishDate.DateTime, Description = item.Summary.Text, Link = item.Links[0].Uri.OriginalString, Title = item.Title.Text, }).Select(art => m.AddArticle(art, c)).ToArray(); m.DeleteArticle(c.Articles.Where(x => !x.IsStared).Except(articles).ToArray(), c); c.LastUpdate = DateTime.Now; }