private static RssItem SelectNewvestRssRssItem(RssFeed feed, DateTime buildDate) { return feed.Channels.OfType<RssChannel>() .SelectMany(chanel => chanel.Items.OfType<RssItem>()) .Where(item => IsNewerThanCurrent(item, buildDate)) .OrderByDescending(selected => selected.PubDate) .FirstOrDefault(); }
/// <summary>Reads the specified RSS feed</summary> /// <param name="Request">The specified way to connect to the web server</param> /// <param name="oldFeed">The cached version of the feed</param> /// <returns>The current contents of the feed</returns> /// <remarks>Will not download the feed if it has not been modified</remarks> public static RssFeed Read(HttpWebRequest Request, RssFeed oldFeed) { return read(oldFeed.url, Request, oldFeed); }
private static RssFeed read(string url, HttpWebRequest request, RssFeed oldFeed) { // ***** Marked for substantial improvement RssFeed feed = new RssFeed(); RssElement element = null; Stream stream = null; Uri uri = new Uri(url); feed.url = url; switch (uri.Scheme) { case "file": feed.lastModified = File.GetLastWriteTime(url); if ((oldFeed != null) && (feed.LastModified == oldFeed.LastModified)) { oldFeed.cached = true; return oldFeed; } stream = new FileStream(url, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); break; case "https": goto case "http"; case "http": if (request == null) request = (HttpWebRequest)WebRequest.Create(uri); if (oldFeed != null) { request.IfModifiedSince = oldFeed.LastModified; request.Headers.Add("If-None-Match", oldFeed.ETag); } try { HttpWebResponse response = (HttpWebResponse)request.GetResponse(); feed.lastModified = response.LastModified; feed.etag = response.Headers["ETag"]; try { if (response.ContentEncoding != "") feed.encoding = Encoding.GetEncoding(response.ContentEncoding); } catch {} stream = response.GetResponseStream(); } catch (WebException we) { if (oldFeed != null) { oldFeed.cached = true; return oldFeed; } else throw we; // bad } break; } if (stream != null) { RssReader reader = null; try { reader = new RssReader(stream); do { element = reader.Read(); if (element is RssChannel) feed.Channels.Add((RssChannel)element); } while (element != null); feed.rssVersion = reader.Version; } finally { feed.exceptions = reader.Exceptions; reader.Close(); } } else throw new ApplicationException("Not a valid Url"); return feed; }
/// <summary>Determines whether the RssFeedCollection contains a specific element.</summary> /// <param name="rssFeed">The RssFeed to locate in the RssFeedCollection.</param> /// <returns>true if the RssFeedCollection contains the specified value; otherwise, false.</returns> public bool Contains(RssFeed rssFeed) { return List.Contains(rssFeed); }
/// <summary>Reads the specified RSS feed</summary> /// <param name="oldFeed">The cached version of the feed</param> /// <returns>The current contents of the feed</returns> /// <remarks>Will not download the feed if it has not been modified</remarks> public static RssFeed Read(RssFeed oldFeed) { return read(oldFeed.url, null, oldFeed); }
/// <summary>Adds a specified feed to this collection.</summary> /// <param name="feed">The feed to add.</param> /// <returns>The zero-based index of the added feed.</returns> public int Add(RssFeed feed) { return List.Add(feed); }
/// <summary>Removes a specified category from this collection.</summary> /// <param name="feed">The category to remove.</param> public void Remove(RssFeed feed) { List.Remove(feed); }
/// <summary>Inserts a feed into this collection at a specified index.</summary> /// <param name="index">The zero-based index of the collection at which to insert the feed.</param> /// <param name="feed">The feed to insert into this collection.</param> public void Insert(int index, RssFeed feed) { List.Insert(index, feed); }
/// <summary>Searches for the specified RssFeed and returns the zero-based index of the first occurrence within the entire RssFeedCollection.</summary> /// <param name="rssFeed">The RssFeed to locate in the RssFeedCollection.</param> /// <returns>The zero-based index of the first occurrence of RssFeed within the entire RssFeedCollection, if found; otherwise, -1.</returns> public int IndexOf(RssFeed rssFeed) { return List.IndexOf(rssFeed); }
/// <summary>Copies the entire RssFeedCollection to a compatible one-dimensional <see cref="Array"/>, starting at the specified index of the target array.</summary> /// <param name="array">The one-dimensional RssFeed Array that is the destination of the elements copied from RssFeedCollection. The Array must have zero-based indexing.</param> /// <param name="index">The zero-based index in array at which copying begins.</param> /// <exception cref="ArgumentNullException">array is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="ArgumentOutOfRangeException">index is less than zero.</exception> /// <exception cref="ArgumentException">array is multidimensional. -or- index is equal to or greater than the length of array.-or-The number of elements in the source RssFeedCollection is greater than the available space from index to the end of the destination array.</exception> public void CopyTo(RssFeed[] array, int index) { List.CopyTo(array, index); }