/// <summary> /// Sort the items by date and truncate the number of feed items if it exceeds the /// NumberOfItems property. /// </summary> public virtual void SortAndFilter() { FeedItem[] feedItemArray = new FeedItem[this._feedItems.Count]; this._feedItems.CopyTo(feedItemArray, 0); Array.Sort(feedItemArray); // Little dirty: clear FeedItems and add the first NumberOfItems from the sorted array. this._feedItems.Clear(); int i = 0; while (i < feedItemArray.Length && i < this._numberOfItems) { this._feedItems.Add(feedItemArray[i]); i++; } }
/// <summary> /// Refresh the items of a single feed. It doesn't save the new items! /// </summary> /// <param name="feed"></param> public void RefreshFeedContents(Feed feed) { feed.FeedItems.Clear(); try { XmlDocument doc = GetFeedXml(feed.Url); // Create an XmlNamespaceManager for resolving namespaces. XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/"); XmlNodeList xmlItems = doc.SelectNodes("//channel/item"); foreach (XmlNode xmlItem in xmlItems) { FeedItem feedItem = new FeedItem(); // Truncate title to 100 characters string title = xmlItem.SelectSingleNode("title").InnerText; if (title.Length > 100) { title = title.Substring(0, 100); } feedItem.Title = title; feedItem.Url = xmlItem.SelectSingleNode("link").InnerText; if (xmlItem.SelectSingleNode("pubDate") != null) { feedItem.PubDate = RFC2822Date.Parse(xmlItem.SelectSingleNode("pubDate").InnerText); } else { feedItem.PubDate = DateTime.Now; } if (this._showContents && xmlItem.SelectSingleNode("description") != null) { feedItem.Content = xmlItem.SelectSingleNode("description").InnerText; } if (xmlItem.SelectSingleNode("author", nsmgr) != null) { feedItem.Author = xmlItem.SelectSingleNode("author", nsmgr).InnerText; } else if (xmlItem.SelectSingleNode("dc:creator", nsmgr) != null) { feedItem.Author = xmlItem.SelectSingleNode("dc:creator", nsmgr).InnerText; } feedItem.Feed = feed; feed.FeedItems.Add(feedItem); } feed.SortAndFilter(); } catch (Exception ex) { log.Error("Error refreshing feed contents for: " + feed.Title, ex); throw; } }