public UpdateItems ( IReadOnlyList |
||
newFeedItems | IReadOnlyList |
|
excludeMarkAsRead | bool | |
cloneItemsBeforeInsert | bool | |
리턴 | void |
private void UpdateItemsCoreTest(bool cloneItemsBeforeInsert, bool useSerializer) { var feed = new Feed(new Uri("http://www.test.com/rss/feed")); feed.UpdateItems(new[] { new FeedItem(new Uri("http://www.test.com/rss/feed/1"), new DateTimeOffset(2020, 5, 5, 12, 0, 0, new TimeSpan(1, 0, 0)), "name1", "desc", "author"), new FeedItem(new Uri("http://www.test.com/rss/feed/2"), new DateTimeOffset(2020, 5, 7, 12, 0, 0, new TimeSpan(1, 0, 0)), "name2", "desc", "author"), }); feed = !useSerializer ? feed : SerializerHelper.Clone(feed); Assert.AreEqual(2, feed.Items.Count); Assert.IsTrue(new[] { "name2", "name1" }.SequenceEqual(feed.Items.Select(x => x.Name))); var newItems = new[] { new FeedItem(new Uri("http://www.test.com/rss/feed/2"), new DateTimeOffset(2020, 5, 7, 12, 0, 0, new TimeSpan(1, 0, 0)), "name2b", "desc", "author"), new FeedItem(new Uri("http://www.test.com/rss/feed/3"), new DateTimeOffset(2020, 5, 6, 12, 0, 0, new TimeSpan(1, 0, 0)), "name3", "desc", "author"), }; feed.UpdateItems(newItems, cloneItemsBeforeInsert: cloneItemsBeforeInsert); Assert.AreEqual(3, feed.Items.Count); Assert.IsTrue(new[] { "name2b", "name3", "name1" }.SequenceEqual(feed.Items.Select(x => x.Name))); if (cloneItemsBeforeInsert) { Assert.AreNotSame(feed.Items[1], newItems[1]); } else { Assert.AreSame(feed.Items[1], newItems[1]); } }
public void MergeTest() { var feedManagerA = new FeedManager(); feedManagerA.Feeds.Remove(feedManagerA.Feeds.Single()); var feedA1 = new Feed(new Uri("http://www.test.com/rss/feedA1")); var feedA2 = new Feed(new Uri("http://www.test.com/rss/feedA2")); feedManagerA.Feeds.Add(feedA1); feedManagerA.Feeds.Add(feedA2); var item = new FeedItem(new Uri("http://www.test.com/rss/feed"), new DateTimeOffset(2020, 5, 5, 12, 0, 0, new TimeSpan(1, 0, 0)), "name", "desc", "author"); feedA2.UpdateItems(new[] { item }); Assert.IsFalse(feedManagerA.Feeds.Last().Items.Single().MarkAsRead); var feedManagerB = new FeedManager() { ItemLifetime = TimeSpan.FromDays(42), MaxItemsLimit = 43 }; feedManagerB.Feeds.Remove(feedManagerB.Feeds.Single()); var feedB1 = new Feed(new Uri("http://www.test.com/rss/feedB1")); var feedB2 = new Feed(new Uri("http://www.test.com/rss/feedA2")); feedManagerB.Feeds.Add(feedB1); feedManagerB.Feeds.Add(feedB2); feedB2.UpdateItems(new[] { item }, cloneItemsBeforeInsert: true); feedB2.Items.Single().MarkAsRead = true; feedManagerA.Merge(feedManagerB); Assert.AreEqual(42, feedManagerA.ItemLifetime.Value.Days); Assert.AreEqual(43u, feedManagerA.MaxItemsLimit.Value); Assert.IsTrue(new[] { "http://www.test.com/rss/feedB1", "http://www.test.com/rss/feedA2" }.SequenceEqual(feedManagerA.Feeds.Select(x => x.Uri.ToString()))); Assert.IsTrue(feedManagerA.Feeds.Last().Items.Single().MarkAsRead); // Just remove one element => this way the Merge does not create new instances var feedManagerC = new FeedManager(); feedManagerC.Feeds.Remove(feedManagerC.Feeds.Single()); var feedC2 = new Feed(new Uri("http://www.test.com/rss/feedA2")); feedManagerC.Feeds.Add(feedC2); feedC2.UpdateItems(new[] { item }, cloneItemsBeforeInsert: true); feedC2.Items.Single().MarkAsRead = false; var itemA = feedManagerA.Feeds.Last().Items.Single(); feedManagerA.Merge(feedManagerC); Assert.IsTrue(new[] { "http://www.test.com/rss/feedA2" }.SequenceEqual(feedManagerA.Feeds.Select(x => x.Uri.ToString()))); Assert.AreSame(itemA, feedManagerA.Feeds.Last().Items.Single()); Assert.IsFalse(itemA.MarkAsRead); }
private void IsLoadingCoreTest(bool useSerializer) { var feed1 = new Feed(new Uri("http://www.test.com/rss/feed")); var feed2 = new Feed(new Uri("http://www.test.com/rss/feed")); feed1 = !useSerializer ? feed1 : SerializerHelper.Clone(feed1); feed2 = !useSerializer ? feed2 : SerializerHelper.Clone(feed2); var feedManager = new FeedManager(); feedManager.Feeds.Add(feed1); feedManager.Feeds.Add(feed2); Assert.IsTrue(feed1.IsLoading); feed1.LoadError = new InvalidOperationException("test"); Assert.IsFalse(feed1.IsLoading); Assert.IsTrue(feed2.IsLoading); feed2.UpdateItems(new FeedItem[0]); Assert.IsFalse(feed2.IsLoading); }
private async Task LoadFeedAsync(Feed feed) { try { if (feed.Uri.IsAbsoluteUri && (feed.Uri.Scheme == "http" || feed.Uri.Scheme == "https")) { selectionService.SetDefaultSelectedFeedItem(feed, feed.Items.FirstOrDefault()); if (selectionService.SelectedFeed == null) { selectionService.SelectedFeed = feed; } var syndicationFeed = await client.RetrieveFeedAsync(feed.Uri); var items = syndicationFeed.Items.Select(x => new FeedItem(x.Uri, x.Date, x.Name, x.Description, x.Author)).ToArray(); feed.Name = syndicationFeed.Title; feed.UpdateItems(items, excludeMarkAsRead: true); } else { feed.LoadErrorMessage = resourceService.GetString("UrlMustBeginWithHttp"); feed.LoadError = new InvalidOperationException(@"The URL must begin with http:// or https://"); } } catch (Exception ex) { feed.LoadErrorMessage = resourceService.GetString("ErrorLoadRssFeed"); feed.LoadError = ex; } finally { if (selectionService.SelectedFeedItem == null && selectionService.SelectedFeed == feed) { selectionService.SelectedFeedItem = feed.Items.FirstOrDefault(); } } }
private void UnreadItemsCountCoreTest(bool useSerializer) { var feed = new Feed(new Uri("http://www.test.com/rss/feed")); var feedManager = new FeedManager(); feedManager.Feeds.Add(feed); feed.UpdateItems(new[] { new FeedItem(new Uri("http://www.test.com/rss/feed/1"), new DateTimeOffset(2020, 5, 5, 12, 0, 0, new TimeSpan(1, 0, 0)), "name1", "desc", "author"), new FeedItem(new Uri("http://www.test.com/rss/feed/2"), new DateTimeOffset(2020, 5, 5, 12, 0, 0, new TimeSpan(1, 0, 0)), "name2", "desc", "author"), }); feed = !useSerializer ? feed : SerializerHelper.Clone(feed); Assert.AreEqual(2, feed.UnreadItemsCount); feed.Items[0].MarkAsRead = true; Assert.AreEqual(1, feed.UnreadItemsCount); }
private void UpdateFeedItems(Feed feed) { feed.UpdateItems(new[] { new FeedItem(new Uri("http://www.test.com/rss/feed/1"), DateTimeOffset.Now - TimeSpan.FromDays(10), "name1", "desc", "author"), new FeedItem(new Uri("http://www.test.com/rss/feed/2"), DateTimeOffset.Now - TimeSpan.FromDays(5), "name2", "desc", "author"), new FeedItem(new Uri("http://www.test.com/rss/feed/3"), DateTimeOffset.Now - TimeSpan.FromDays(1), "name3", "desc", "author"), }); }