public void LoadOpml_Details() { var filter = new Dictionary <Uri, RssFeed> { { new Uri("https://blogs.msdn.microsoft.com/dotnet/feed/"), new RssFeed() }, }; var ctx = new SynchronizationContext(); var dest = new RssOpml(ctx, IO).Load(GetExamplesWith("Sample.opml"), filter).ToList(); Assert.That(dest.Count, Is.EqualTo(1)); var root = dest[0] as RssCategory; Assert.That(root.Title, Is.EqualTo("Subscriptions")); Assert.That(root.Children.Count, Is.EqualTo(3)); var s0 = root.Children[0] as RssEntry; Assert.That(s0.Parent, Is.EqualTo(root), s0.Title); Assert.That(s0.Title, Is.EqualTo("The GitHub Blog")); Assert.That(s0.Uri, Is.EqualTo(new Uri("https://github.com/blog.atom"))); Assert.That(s0.Link, Is.EqualTo(new Uri("https://github.com/blog"))); var s1 = root.Children[1] as RssCategory; Assert.That(s1.Parent, Is.EqualTo(root), s1.Title); Assert.That(s1.Title, Is.EqualTo("キューブ・ソフト")); Assert.That(s1.Children.Count, Is.EqualTo(1)); var s10 = s1.Children[0] as RssEntry; Assert.That(s10.Parent, Is.EqualTo(s1), s10.Title); Assert.That(s10.Title, Is.EqualTo("CubeSoft Blog")); Assert.That(s10.Uri, Is.EqualTo(new Uri("https://blog.cube-soft.jp/?feed=rss2"))); Assert.That(s10.Link, Is.EqualTo(new Uri("https://blog.cube-soft.jp/"))); var s2 = root.Children[2] as RssCategory; Assert.That(s2.Parent, Is.EqualTo(root), s2.Title); Assert.That(s2.Title, Is.EqualTo("Microsoft")); Assert.That(s2.Children.Count, Is.EqualTo(2)); var s20 = s2.Children[0] as RssEntry; Assert.That(s20.Parent, Is.EqualTo(s2), s20.Title); Assert.That(s20.Title, Is.EqualTo("The Official Microsoft Blog")); Assert.That(s20.Uri, Is.EqualTo(new Uri("https://blogs.microsoft.com/feed/"))); Assert.That(s20.Link, Is.EqualTo(new Uri("https://blogs.microsoft.com/"))); var s21 = s2.Children[1] as RssEntry; Assert.That(s21.Parent, Is.EqualTo(s2), s21.Title); Assert.That(s21.Title, Is.EqualTo("Windows Blog")); Assert.That(s21.Uri, Is.EqualTo(new Uri("https://blogs.windows.com/feed/"))); Assert.That(s21.Link, Is.EqualTo(new Uri("https://blogs.windows.com/"))); }
public static async Task <RssOpml> ParseAsync(Stream stream) { var document = await XDocument.LoadAsync(stream, LoadOptions.None, CancellationToken.None); var root = document.XPathSelectElement("opml"); var opml = new RssOpml(); opml.Deserialize(root); return(opml); }
public int LoadOpml(string filename) { var dest = new RssOpml(new SynchronizationContext(), IO) .Load(GetExamplesWith(filename), new Dictionary <Uri, RssFeed>()) .Flatten(); foreach (var item in dest) { if (item is RssEntry re) { Assert.That(re.Uri, Is.Not.Null); Assert.That(re.Link, Is.Not.Null, re.Uri.ToString()); Assert.That(re.Title, Is.Not.Null.And.Not.Empty, re.Uri.ToString()); } else { Assert.That((item as RssCategory).Title, Is.Not.Null.And.Not.Empty); } } return(dest.Count()); }
public int LoadOpml(string filename) { var dest = new RssOpml(Invoker.Vanilla, IO) .Load(GetSource(filename), new Dictionary <Uri, RssFeed>()) .Flatten(); foreach (var item in dest) { if (item is RssEntry re) { Assert.That(re.Uri, Is.Not.Null); Assert.That(re.Link, Is.Not.Null, re.Uri.ToString()); Assert.That(re.Title, Is.Not.Null.And.Not.Empty, re.Uri.ToString()); } else { Assert.That((item as RssCategory).Title, Is.Not.Null.And.Not.Empty); } } return(dest.Count()); }
public static IEnumerable <RssOutline> GetOutlines(this RssOpml opml) { return(Enumerate(opml.Children)); IEnumerable <RssOutline> Enumerate(IEnumerable <RssOutline> source) { foreach (var child in source) { if (child.HasChildren) { foreach (var grandChild in Enumerate(child.Children)) { yield return(grandChild); } } else if (!string.IsNullOrWhiteSpace(child.XmlUrl)) { yield return(child); } } } }