private void RefreshFeed() { if (sources.Count > 0) { IEnumerable<FeedItem> newFeed = null; string[] sourcesCopy; lock (syncRoot) { sourcesCopy = sources.ToArray(); } foreach (var source in sources) { if (newFeed == null) newFeed = GetFeed(source); else newFeed = newFeed.Concat(GetFeed(source)); } lock (syncRoot) { feed = newFeed.ToList(); feed.SortByPublishDate(); } } lock (syncRoot) { lastUpdated = DateTime.Now; } FeedRefreshed?.Invoke(this, new EventArgs()); bool filterSet; lock (syncRoot) { filterSet = filterSources != null && filterSources.Length > 0; } if (filterSet) Task.Factory.StartNew(FilterBySource); else FilteredFeedRefreshed?.Invoke(this, new EventArgs()); }
public void AddSource(string source) { IEnumerable<FeedItem> newFeed; try { newFeed = GetFeed(source); } catch (Exception e) { throw new Exception("Unable to add source: " + e.Message, e); } lock (syncRoot) { sources.Add(source); feed = feed.Concat(newFeed).ToList(); feed.SortByPublishDate(); } }