public ObservableCollection <SourceModel> GetActiveSources() { Initialize(); return(SourceManager.GetActiveSources()); }
public Task ActualizeAllArticlesAsync() { return(ExecuteSafe(async() => { await Initialize(); if (!await _permissionsService.CanDownload()) { return; } var queue = new ConcurrentQueue <FeedModel>(); foreach (var activeSource in SourceManager.GetActiveSources()) { foreach (var activeFeed in activeSource.ActiveFeeds) { queue.Enqueue(activeFeed); } } var setting = await _settingsRepository.GetSettingByKeyAsync(SettingKey.ConcurrentThreads); var threadNumber = setting is IntSettingModel ? ((IntSettingModel)setting).IntValue : 5; var threads = new List <Task>(); if (await _permissionsService.CanDownloadFeeds()) { _progressService.Start(ProgressType.Feed, queue.Count); for (int i = 0; i < threadNumber; i++) { threads.Add(DoFeedQueue(queue)); } await Task.WhenAll(threads.ToArray()); _progressService.Stop(ProgressType.Feed); threads.Clear(); } if (await _permissionsService.CanDownloadArticles()) { var stack = new ConcurrentStack <ArticleModel>(); foreach (var activeSource in SourceManager.GetActiveSources()) { foreach (var activeFeed in activeSource.ActiveFeeds) { var news = activeFeed.AllArticles.Where(a => a.LoadingState < LoadingState.Loaded).ToArray(); if (news.Length > 0) { stack.PushRange(news); } } } //reverse stack so stack = new ConcurrentStack <ArticleModel>(stack.Reverse()); _progressService.Start(ProgressType.Article, stack.Count); for (int i = 0; i < threadNumber; i++) { threads.Add(DoArticleStack(stack)); } await Task.WhenAll(threads.ToArray()); _progressService.Stop(ProgressType.Article); threads.Clear(); } })); }