Ejemplo n.º 1
0
 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 ()));
                         }
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        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;
            }
        }