Jbe.NewsReader.Domain.Feed.UpdateItems C# (CSharp) Метод

UpdateItems() публичный Метод

public UpdateItems ( IReadOnlyList newFeedItems, bool excludeMarkAsRead = false, bool cloneItemsBeforeInsert = false ) : void
newFeedItems IReadOnlyList
excludeMarkAsRead bool
cloneItemsBeforeInsert bool
Результат void
        public void UpdateItems(IReadOnlyList<FeedItem> newFeedItems, bool excludeMarkAsRead = false, bool cloneItemsBeforeInsert = false)
        {
            foreach (var item in newFeedItems)
            {
                var foundItem = items.FirstOrDefault(x => x.Uri == item.Uri);
                if (foundItem != null)
                {
                    foundItem.ApplyValuesFrom(item, excludeMarkAsRead);
                }
                else
                {
                    int i;
                    for (i = 0; i < items.Count; i++)
                    {
                        if (item.Date > items[i].Date)
                        {
                            break;
                        }
                    }
                    var itemToInsert = cloneItemsBeforeInsert ? item.Clone() : item;
                    items.Insert(i, itemToInsert);
                }
            }
            if (DataManager != null)
            {
                TrimItemsList();
            }
            IsLoading = false;
        }

Usage Example

Пример #1
0
        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]);
            }
        }
All Usage Examples Of Jbe.NewsReader.Domain.Feed::UpdateItems