private void FeedsList_SelectionChanged(object sender, SelectionChangedEventArgs e) { FeedItemsList.ItemsSource = null; this.Cursor = Cursors.Wait; var feed = FeedsList.SelectedItem as RssFeed; using (var reader = new RssXmlReader(feed.Url)) { try { var list = new List <CleanedSyndicationItem>(); var doc = SyndicationFeed.Load(reader); foreach (var item in doc.Items) { list.Add(new CleanedSyndicationItem(item)); } FeedItemsList.ItemsSource = list; } catch (Exception ex) { FeedItemsList.ItemsSource = new List <SyndicationItem>() { new SyndicationItem(ex.Message, null, null) }; } } this.Cursor = Cursors.Arrow; }
/// <summary> /// Supports RSS 1, 2 and ATOM 1.0 feed standards /// </summary> /// <param name="url"></param> /// <param name="timeout"></param> /// <returns></returns> internal SyndicationFeed GetFeed(Uri url, int timeout, NetworkCredential credentials) { SyndicationFeed feed = null; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.UserAgent = Configuration.UserAgent; request.Timeout = timeout; if (credentials != null) { request.Credentials = credentials; request.PreAuthenticate = true; } try { using (WebResponse response = request.GetResponse()) { XmlSanitizingStream stream = new XmlSanitizingStream(response.GetResponseStream()); var xml = stream.ReadToEnd(); using (RssXmlReader reader = new RssXmlReader(Flush(xml))) { if (Atom03FeedFormatter.CanReadFrom(reader)) { var aff = new Atom03FeedFormatter(); aff.ReadFrom(reader); feed = aff.Feed; } else if (Rss10FeedFormatter.CanReadFrom(reader)) { // RSS 1.0 var rff = new Rss10FeedFormatter(); rff.ReadFrom(reader); feed = rff.Feed; } else { // RSS 2.0 or Atom 1.0 try { feed = CustomSyndicationFeed.Load(reader); } catch (XmlException ex) { logger.Error(ex); throw; } } } } } catch (WebException ex) { logger.Error(ex); } catch (SocketException ex) { logger.Error(ex); } catch (IOException ex) { logger.Error(ex); } return(feed); }