using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using CodeHollow.FeedReader; using SharpRss.Models; using ToolQit.Extensions; namespace SharpRss.Services { /// /// Managing RSS feeds and categories. /// public class RssService : IDisposable { public RssService() { //SetupTestCategoriesAndFeedsAsync(); } private readonly DatabaseService _dbService = new DatabaseService(); private async void SetupTestCategoriesAndFeedsAsync() { await _dbService.AddCategoriesAsync(new HashSet() { new CategoryModel() { Name = "All" }, new CategoryModel() { Name = "RSS" }, new CategoryModel() { Name = "Tech" }, new CategoryModel() { Name = "News" } }); await _dbService.AddFeedsAsync(new HashSet() { new FeedModel("http://fedoramagazine.org/feed/"), new FeedModel("https://www.nasa.gov/rss/dyn/breaking_news.rss"), new FeedModel("https://journals.plos.org/plosone/feed/atom"), new FeedModel("https://itsfoss.com/feed") }); } public async Task GetFeedAsync(string rssUrl) { return await FeedCache.GetFeed(rssUrl); } public async Task> GetAllUnsortedAsync() { HashSet items = new HashSet(); var categories = await _dbService.GetCategoriesAsync(); var feeds = await _dbService.GetFeedsAsync(string.Empty); items.UnionWith(categories); items.UnionWith(feeds); return items; } public async Task> GetCategoriesAsync() { var result = await _dbService.GetCategoriesAsync(); return result.OrderBy(x => x.Name).ToHashSet(); } public async Task> GetFeedsAsync(CategoryModel? categoryModel = null) { HashSet feeds; if (categoryModel != null) feeds = await _dbService.GetFeedsAsync(categoryModel.CategoryId); else feeds = await _dbService.GetFeedsAsync(); return feeds; } public async void AddCategoryAsync(string name, string? icon, string hexColor) { CategoryModel categoryModel = new CategoryModel() { Name = name }; if (icon != null) categoryModel.PathIcon = icon; if (!hexColor.IsNullEmptyWhiteSpace()) categoryModel.HexColor = hexColor; await _dbService.AddCategoriesAsync(new HashSet() { categoryModel }); } public async void AddFeedAsync(string rssUrl, CategoryModel? category = null) { FeedModel feedModel = new FeedModel(rssUrl, category); await _dbService.AddFeedsAsync(new HashSet() { feedModel }); } public void Dispose() { _dbService.Dispose(); } } }