From d638e763d401df19f72af2396dd1c24a33741ac2 Mon Sep 17 00:00:00 2001 From: Max Holleman Date: Wed, 24 May 2023 15:51:03 +0200 Subject: [PATCH] Working on read page & database service --- SharpRSS.sln | 3 ++ SharpRss/Services/DatabaseService.cs | 28 ++++++++++++--- WebSharpRSS/Models/FeedItemData.cs | 5 +++ WebSharpRSS/Models/TreeItemData.cs | 2 +- WebSharpRSS/Pages/Read.razor | 54 ++++++++++++++++++++++++++++ 5 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 WebSharpRSS/Pages/Read.razor diff --git a/SharpRSS.sln b/SharpRSS.sln index 500e9cb..7d57dc9 100644 --- a/SharpRSS.sln +++ b/SharpRSS.sln @@ -31,4 +31,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A31B46E9-37D1-4263-8681-617029BDBE66} + EndGlobalSection EndGlobal diff --git a/SharpRss/Services/DatabaseService.cs b/SharpRss/Services/DatabaseService.cs index 1686972..2e09713 100644 --- a/SharpRss/Services/DatabaseService.cs +++ b/SharpRss/Services/DatabaseService.cs @@ -15,7 +15,7 @@ namespace SharpRss.Services internal DatabaseService() { _sqlConn = new SqliteConnection(_connectionString); - //InitializeDb(); + InitializeDb(); } private readonly SqliteConnection _sqlConn; private readonly string _connectionString = $"Data Source={Path.Combine(Environment.CurrentDirectory, "sharp_rss.sqlite")};"; @@ -24,14 +24,14 @@ namespace SharpRss.Services private readonly string _feedItemTable = "feed_item_data"; // Groups - public async Task> GetGroupsAsync(string? groupName = null) + public async Task> GetGroupsAsync(string? groupId = null) { _sqlConn.Open(); - using SqliteCommand cmd = new SqliteCommand(groupName != null ? $"SELECT * FROM {_groupTable} WHERE name=@name;" : $"SELECT * FROM {_groupTable}", _sqlConn) + using SqliteCommand cmd = new SqliteCommand(groupId != null ? $"SELECT * FROM {_groupTable} WHERE id=@gId;" : $"SELECT * FROM {_groupTable}", _sqlConn) { Parameters = { - new SqliteParameter("name", groupName) + new SqliteParameter("gId", groupId) } }; await using SqliteDataReader reader = await cmd.ExecuteReaderAsync(); @@ -255,6 +255,26 @@ namespace SharpRss.Services _sqlConn.Close(); return result; } + public async Task GetGroupFromFeeditemAsync(FeedItemModel feedItem) + { + GroupModel? result = null; + _sqlConn.Open(); + using SqliteCommand cmd = new SqliteCommand($"SELECT * FROM {_groupTable} WHERE id=(SELECT group_id FROM {_feedTable} WHERE id=@fId)", _sqlConn) + { + Parameters = + { + new SqliteParameter ("fId", feedItem.Id) + } + }; + using SqliteDataReader reader = await cmd.ExecuteReaderAsync(); + HashSet? groups = null; + if (reader.Read()) + groups = await GetGroupsAsync(reader["group_id"].ToString()); + if (groups != null && groups.Any()) + result = groups.FirstOrDefault(); + _sqlConn.Close(); + return result; + } private async void InitializeDb() { diff --git a/WebSharpRSS/Models/FeedItemData.cs b/WebSharpRSS/Models/FeedItemData.cs index 7b30ed7..318c110 100644 --- a/WebSharpRSS/Models/FeedItemData.cs +++ b/WebSharpRSS/Models/FeedItemData.cs @@ -5,7 +5,12 @@ namespace WebSharpRSS.Models { public class FeedItemData : FeedItemModel { + public FeedItemData() + { + FaviconUrl = string.Format(Caretaker.Settings["Paths"].GetString("FaviconResolveUrl"), Link.Remove(Link.IndexOf("http", StringComparison.Ordinal), Link.IndexOf("://", StringComparison.Ordinal) + 3)); + } public static FeedItemData? FromModel(FeedItemModel model) => Utilities.ConvertFrom(model); public string HexColor { get; set; } + public string FaviconUrl { get; set; } } } diff --git a/WebSharpRSS/Models/TreeItemData.cs b/WebSharpRSS/Models/TreeItemData.cs index c0bb89b..f2e0a70 100644 --- a/WebSharpRSS/Models/TreeItemData.cs +++ b/WebSharpRSS/Models/TreeItemData.cs @@ -20,7 +20,7 @@ namespace WebSharpRSS.Models { FeedModel = feedModel; Title = feedModel.Title; - FaviconUrl = string.Format(Caretaker.Settings["Paths"].GetString("FaviconResolveUrl"), feedModel.Url.Remove(feedModel.Url.IndexOf("http", StringComparison.Ordinal), feedModel.Url.IndexOf("://", StringComparison.Ordinal) + 3)); ; + FaviconUrl = string.Format(Caretaker.Settings["Paths"].GetString("FaviconResolveUrl"), feedModel.Url.Remove(feedModel.Url.IndexOf("http", StringComparison.Ordinal), feedModel.Url.IndexOf("://", StringComparison.Ordinal) + 3)); } public readonly GroupModel? GroupModel; public readonly FeedModel? FeedModel; diff --git a/WebSharpRSS/Pages/Read.razor b/WebSharpRSS/Pages/Read.razor new file mode 100644 index 0000000..f621fdb --- /dev/null +++ b/WebSharpRSS/Pages/Read.razor @@ -0,0 +1,54 @@ +@page "/read/{Id}" +@using WebSharpRSS.Models; + + + @if (isLoading) + { +
+ + Loading... +
+ } + else if (failed) + { + Loading failed! + } + else + { + foreach (var feedItemData in items) + { + + + +
+ @*@if (feedItemData.Icon != null) + { + + } + @if (feedItemData.FaviconUrl != null) + { + + }*@ + @feedItemData.Title +
+ @feedItemData.Description + @feedItemData.PublishingDate.ToString() +
+
+
+ } + } +
+ +@code { + [Parameter] + public string Id { get; set; } + HashSet items = new HashSet(); + bool isLoading = true; + bool failed = false; + + protected override void OnInitialized() + { + + } +} \ No newline at end of file