diff --git a/SharpRss/Models/CategoryModel.cs b/SharpRss/Models/CategoryModel.cs
deleted file mode 100644
index 91c7f85..0000000
--- a/SharpRss/Models/CategoryModel.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-
-namespace SharpRss.Models
-{
- ///
- /// To store and load data from file/database
- ///
- public class CategoryModel
- {
- public CategoryModel()
- {
- HexColor = $"#{_random.Next(0x1000000):X6}";
- CategoryId = Guid.NewGuid().ToString();
- }
- private readonly Random _random = new Random();
-
- public static CategoryModel Create(string categoryName, string hexColor, string id)
- {
- CategoryModel catModel = new CategoryModel()
- {
- Name = categoryName,
- HexColor = hexColor,
- CategoryId = id
- };
- return catModel;
- }
-
- public string Name { get; set; }
- public string HexColor { get; set; }
- public string PathIcon { get; set; }
- public string CategoryId { get; private set; }
- }
-}
diff --git a/SharpRss/Models/FeedItemModel.cs b/SharpRss/Models/FeedItemModel.cs
index f775acf..5a812fc 100644
--- a/SharpRss/Models/FeedItemModel.cs
+++ b/SharpRss/Models/FeedItemModel.cs
@@ -11,14 +11,13 @@ namespace SharpRss.Models
///
public DateTime LastUpdated { get; set; }
///
- /// The feed in which the item is part.
+ /// The feed in which the item is part of.
///
public string FeedId { get; set; }
///
/// If the item is read.
///
- public string Read { get; set; }
-
+ public bool Read { get; set; }
public string Type { get; set; }
public string Title { get; set; }
public string Description { get; set; }
diff --git a/SharpRss/Models/FeedModel.cs b/SharpRss/Models/FeedModel.cs
index 9dd33e3..c1e52e3 100644
--- a/SharpRss/Models/FeedModel.cs
+++ b/SharpRss/Models/FeedModel.cs
@@ -5,37 +5,14 @@ namespace SharpRss.Models
{
public class FeedModel
{
- private FeedModel()
- {
-
- }
- public FeedModel(string rssFeedUrl, CategoryModel? category = null)
- {
- if (category != null)
- CategoryId = category.CategoryId;
- FeedId = Guid.NewGuid().ToString();
- FeedUrl = rssFeedUrl;
- }
- public string FeedId { get; private set; }
- public string CategoryId { get; set; } = "";
-
- public string FeedType { get; set; }
+ public string FeedId { get; set; }
+ public string CategoryId { get; set; }
+ public string FeedType { get; set; }
public string FeedUrl { get; set; }
public string Description { get; set; }
public string Language { get; set; }
public string Copyright { get; set; }
public DateTime LastUpdated { get; set; }
public string ImageUrl { get; set; }
-
- public static FeedModel Create(string url, string feedId, string categoryId)
- {
- FeedModel feedModel = new FeedModel()
- {
- FeedUrl = url,
- FeedId = feedId,
- CategoryId = categoryId
- };
- return feedModel;
- }
}
}
diff --git a/SharpRss/Models/GroupModel.cs b/SharpRss/Models/GroupModel.cs
new file mode 100644
index 0000000..bc99b14
--- /dev/null
+++ b/SharpRss/Models/GroupModel.cs
@@ -0,0 +1,22 @@
+using System;
+
+namespace SharpRss.Models
+{
+ ///
+ /// To store and load data from file/database
+ ///
+ public class GroupModel
+ {
+ /*public GroupModel()
+ {
+ HexColor = $"#{_random.Next(0x1000000):X6}";
+ Id = Guid.NewGuid().ToString();
+ }
+ private readonly Random _random = new Random();*/
+
+ public string Name { get; set; }
+ public string HexColor { get; set; }
+ public string Icon { get; set; }
+ public string Id { get; private set; }
+ }
+}
diff --git a/SharpRss/Services/DatabaseService.cs b/SharpRss/Services/DatabaseService.cs
index 6238130..42f0e85 100644
--- a/SharpRss/Services/DatabaseService.cs
+++ b/SharpRss/Services/DatabaseService.cs
@@ -2,7 +2,6 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using System.Text;
using System.Threading.Tasks;
using Dapper;
using Microsoft.Data.Sqlite;
@@ -13,22 +12,30 @@ namespace SharpRss.Services
{
internal class DatabaseService : IDisposable
{
- private string _connectionString => $"Data Source={Path.Combine(Environment.CurrentDirectory, "sharp_rss.db")};";
internal DatabaseService()
{
_sqlConn = new SqliteConnection(_connectionString);
InitializeDb();
}
private readonly SqliteConnection _sqlConn;
+ private readonly string _connectionString = $"Data Source={Path.Combine(Environment.CurrentDirectory, "sharp_rss.sqlite")};";
+ private readonly string _groupTable = "group_data";
+ private readonly string _feedTable = "feed_data";
+ private readonly string _feedItemTable = "feed_item_data";
- public async Task AddCategoriesAsync(HashSet categories)
+ public async Task RemoveGroupFromFeedsAsync(string groupId)
+ {
+ await _sqlConn.QueryAsync("UPDATE feed_data SET group_id=NULL WHERE group_id=@GroupId", new { GroupId = groupId });
+ }
+
+ public async Task AddCategoriesAsync(HashSet categories)
{
bool result = true;
_sqlConn.Open();
foreach (var categoryModel in categories)
{
await _sqlConn.QueryAsync("INSERT INTO category_data (name, hex_color, path_icon, category_id) VALUES(@catName, @hexColor, @pathIcon, @categoryId) ON CONFLICT(name) DO UPDATE SET hex_color=@hexColor, path_icon=@pathIcon",
- new { catName = categoryModel.Name, hexColor = categoryModel.HexColor, pathIcon = categoryModel.PathIcon, categoryId = categoryModel.CategoryId });
+ new { catName = categoryModel.Name, hexColor = categoryModel.HexColor, pathIcon = categoryModel.Icon, categoryId = categoryModel.Id });
}
_sqlConn.Close();
return result;
@@ -46,15 +53,18 @@ namespace SharpRss.Services
return result;
}
- public async Task> GetCategoriesAsync()
+ public async Task> GetCategoriesAsync()
{
- HashSet categories = new HashSet();
+ HashSet categories = new HashSet();
_sqlConn.Open();
SqliteCommand cmd = _sqlConn.CreateCommand();
cmd.CommandText = "SELECT * FROM category_data";
await using SqliteDataReader reader = await cmd.ExecuteReaderAsync();
while (reader.Read())
- categories.Add(CategoryModel.Create(reader["name"].ToString(), reader["hex_color"].ToString(), reader["category_id"].ToString()));
+ {
+ //categories.Add(GroupModel.Create(reader["name"].ToString(), reader["hex_color"].ToString(), reader["category_id"].ToString()));
+ }
+
_sqlConn.Close();
return categories;
}
@@ -71,7 +81,9 @@ namespace SharpRss.Services
await using SqliteDataReader reader = await cmd.ExecuteReaderAsync();
while (reader.Read())
- feeds.Add(FeedModel.Create(reader["url"].ToString(), reader["feed_id"].ToString(), reader["category_id"].ToString()));
+ {
+ //feeds.Add(FeedModel.Create(reader["url"].ToString(), reader["feed_id"].ToString(), reader["category_id"].ToString()));
+ }
_sqlConn.Close();
return feeds;
}
@@ -81,14 +93,18 @@ namespace SharpRss.Services
Log.Verbose("Checking database...");
HashSet failed = new HashSet();
_sqlConn.Open();
- // Check category_data table
- var queryResponse = await _sqlConn.QueryAsync("CREATE TABLE IF NOT EXISTS category_data (name STRING NOT NULL, hex_color STRING NOT NULL, path_icon STRING, category_id STRING PRIMARY KEY, CONSTRAINT name UNIQUE (name))");
+ Log.Verbose("Checking table: {Table}", _groupTable);
+ var queryResponse = await _sqlConn.QueryAsync($"CREATE TABLE IF NOT EXISTS {_groupTable} (name STRING NOT NULL, hex_color STRING NOT NULL, icon STRING, id STRING PRIMARY KEY, CONSTRAINT name UNIQUE (name))");
if (queryResponse.Any()) failed.Add("category_data");
- // Check feed_data table
- queryResponse = await _sqlConn.QueryAsync("CREATE TABLE IF NOT EXISTS feed_data (url STRING NOT NULL, feed_id STRING PRIMARY KEY, category_id STRING NOT NULL DEFAULT '', CONSTRAINT url, UNIQUE (url))");
+ Log.Verbose("Checking table: {Table}", _feedTable);
+ queryResponse = await _sqlConn.QueryAsync($"CREATE TABLE IF NOT EXISTS {_feedTable} (url STRING NOT NULL, id STRING PRIMARY KEY, group_id STRING DEFAULT NULL, CONSTRAINT url, UNIQUE (url))");
if (queryResponse.Any()) failed.Add("feed_data");
+ Log.Verbose("Checking table: {Table}", _feedItemTable);
+ queryResponse = await _sqlConn.QueryAsync($"CREATE TABLE IF NOT EXISTS {_feedItemTable} (id STRING PRIMARY KEY, feed_id STRING NOT NULL)");
+ if (queryResponse.Any()) failed.Add("feed_item_data");
+
_sqlConn.Close();
if (failed.Any())
{
diff --git a/SharpRss/Services/RssService.cs b/SharpRss/Services/RssService.cs
index 32cb92b..5c06879 100644
--- a/SharpRss/Services/RssService.cs
+++ b/SharpRss/Services/RssService.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
@@ -18,7 +19,7 @@ namespace SharpRss.Services
}
private readonly DatabaseService _dbService = new DatabaseService();
- private async void SetupTestCategoriesAndFeedsAsync()
+ /*private async void SetupTestCategoriesAndFeedsAsync()
{
await _dbService.AddCategoriesAsync(new HashSet()
{
@@ -34,56 +35,58 @@ namespace SharpRss.Services
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);
+ /*return await FeedCache.GetFeed(rssUrl);*/
+ return new Feed();
}
public async Task> GetAllUnsortedAsync()
{
HashSet