public void TestParseRss() { foreach (string file in System.IO.Directory.GetFiles (rss_directory)) { if (file.EndsWith (".rss.gz")) { using (var stream = System.IO.File.OpenRead (file)) { using (var gzip_stream = new GZipInputStream (stream)) { using (var txt_stream = new System.IO.StreamReader (gzip_stream)) { try { var parser = new RssParser ("http://foo.com/", txt_stream.ReadToEnd ()); var feed = parser.CreateFeed (); var items = parser.GetFeedItems (feed).ToList (); Assert.IsTrue (items.Count > 0); } catch (Exception e) { Assert.Fail (String.Format ("Failed to parse {0}, exception:\n{1}", file, e.ToString ())); } } } } } } }
private void OnDownloadDataReceived(object sender, Migo.Net.DownloadStringCompletedEventArgs args) { bool notify_on_save = true; lock (SyncRoot) { if (cancelled) return; wc.DownloadStringCompleted -= OnDownloadDataReceived; FeedDownloadError error; WebException we = args.Error as WebException; if (we == null) { try { DateTime last_built_at = feed.LastBuildDate; RssParser parser = new RssParser (feed.Url, args.Result); parser.UpdateFeed (feed); feed.SetItems (parser.GetFeedItems (feed)); error = FeedDownloadError.None; notify_on_save = feed.LastBuildDate > last_built_at; } catch (FormatException e) { Log.Warning (e); error = FeedDownloadError.InvalidFeedFormat; } } else { error = FeedDownloadError.DownloadFailed; HttpWebResponse resp = we.Response as HttpWebResponse; if (resp != null) { switch (resp.StatusCode) { case HttpStatusCode.NotFound: case HttpStatusCode.Gone: error = FeedDownloadError.DoesNotExist; break; case HttpStatusCode.NotModified: notify_on_save = false; error = FeedDownloadError.None; break; case HttpStatusCode.Unauthorized: error = FeedDownloadError.UnsupportedAuth; break; default: error = FeedDownloadError.DownloadFailed; break; } } } feed.LastDownloadError = error; feed.LastDownloadTime = DateTime.Now; feed.Save (notify_on_save); EmitCompletionEvents (error); completed = true; } }
private void OnDownloadDataReceived(object sender, Migo.Net.DownloadStringCompletedEventArgs args) { bool notify_on_save = true; lock (SyncRoot) { if (cancelled) { return; } wc.DownloadStringCompleted -= OnDownloadDataReceived; FeedDownloadError error; WebException we = args.Error as WebException; if (we == null) { try { DateTime last_built_at = feed.LastBuildDate; RssParser parser = new RssParser(feed.Url, args.Result); parser.UpdateFeed(feed); feed.SetItems(parser.GetFeedItems(feed)); error = FeedDownloadError.None; notify_on_save = feed.LastBuildDate > last_built_at; } catch (FormatException e) { Log.Warning(e); error = FeedDownloadError.InvalidFeedFormat; } } else { error = FeedDownloadError.DownloadFailed; HttpWebResponse resp = we.Response as HttpWebResponse; if (resp != null) { switch (resp.StatusCode) { case HttpStatusCode.NotFound: case HttpStatusCode.Gone: error = FeedDownloadError.DoesNotExist; break; case HttpStatusCode.NotModified: notify_on_save = false; error = FeedDownloadError.None; break; case HttpStatusCode.Unauthorized: error = FeedDownloadError.UnsupportedAuth; break; default: error = FeedDownloadError.DownloadFailed; break; } } } feed.LastDownloadError = error; feed.LastDownloadTime = DateTime.Now; feed.Save(notify_on_save); EmitCompletionEvents(error); completed = true; } }