Broken, rework DbAccess to only get and set db data.

This commit is contained in:
Max 2023-06-24 00:15:54 +02:00
parent 11f8425b3f
commit dfc9db7944
7 changed files with 40 additions and 16 deletions

View File

@ -13,8 +13,8 @@ namespace SharpRss.Core.Cache
internal static class TempCache
{
private static Dictionary<string, CategoryModel> _categoryCache = new Dictionary<string, CategoryModel>();
private static Dictionary<string, SyndicationModel> _syndicationCache = new Dictionary<string, SyndicationModel>();
public static Dictionary<string, CategoryModel> CategoryCache { get; private set; } = new Dictionary<string, CategoryModel>();
public static Dictionary<string, SyndicationModel> SyndicationCache { get; private set; } = new Dictionary<string, SyndicationModel>();
public static async Task UpdateCache(CacheFetch cf)
{
@ -22,16 +22,16 @@ namespace SharpRss.Core.Cache
{
case CacheFetch.Category:
var cats = await DbAccess.GetCategoriesAsync();
_categoryCache = cats.ToDictionary(x => x.Id);
CategoryCache = cats.ToDictionary(x => x.Id);
break;
case CacheFetch.Syndication:
var syndications = await DbAccess.GetSyndicationsAsync();
_syndicationCache = syndications.ToDictionary(x => x.EncodedUrl);
SyndicationCache = syndications.ToDictionary(x => x.EncodedUrl);
break;
}
}
public static CategoryModel? GetCategory(string catId) => _categoryCache.TryGetValue(catId, out CategoryModel catModel) ? catModel : null;
public static SyndicationModel? GetSyndication(string encodedUrl) => _syndicationCache.TryGetValue(encodedUrl, out SyndicationModel synModel) ? synModel : null;
public static CategoryModel? GetCategory(string catId) => CategoryCache.TryGetValue(catId, out CategoryModel catModel) ? catModel : null;
public static SyndicationModel? GetSyndication(string encodedUrl) => SyndicationCache.TryGetValue(encodedUrl, out SyndicationModel synModel) ? synModel : null;
}
}

View File

@ -12,6 +12,7 @@ using SharpRss.Models;
namespace SharpRss
{
//TODO: Need rework to only get from db syndication service will handle extra data.
internal static class DbAccess
{
private static readonly string ConnectionString = $"Data Source={Path.Combine(Environment.CurrentDirectory, "sharp_rss.sqlite")};";
@ -47,7 +48,8 @@ namespace SharpRss
Icon = reader["icon"].ToString(),
LastUpdated = DateTimeOffset.FromUnixTimeMilliseconds(long.Parse(reader["last_updated"].ToString()))
};
categoryModel.SyndicationCount = await dbc.ExecuteScalarAsync<int>($"SELECT COUNT(*) FROM syndication WHERE category_id=@CatId", new { CatId = categoryModel.Id });
categoryModel.Syndications = await GetSyndicationsAsync(new []{ categoryModel.Id });
//categoryModel.SyndicationCount = await dbc.ExecuteScalarAsync<int>($"SELECT COUNT(*) FROM syndication WHERE category_id=@CatId", new { CatId = categoryModel.Id });
categories.Add(categoryModel);
}
return categories;

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using ToolQit;
using ToolQit.Extensions;
@ -26,6 +27,6 @@ namespace SharpRss.Models
}
public string Icon { get; set; } = string.Empty;
public DateTimeOffset LastUpdated { get; set; } = DateTimeOffset.Now;
public int SyndicationCount { get; set; }
public HashSet<SyndicationModel> Syndications { get; set; } = new HashSet<SyndicationModel>();
}
}

View File

@ -16,7 +16,9 @@ namespace WebSharpRSS.Models
CategoryModel = categoryModel;
Title = categoryModel.Name;
Icon = categoryModel.Icon == string.Empty ? Icons.Material.Filled.RssFeed : categoryModel.Icon;
HasChildren = CategoryModel.SyndicationCount > 0;
HasChildren = CategoryModel.Syndications.Count > 0;
if (HasChildren)
CategoryModel.Syndications.Select(x => x.ItemCount).ToList().ForEach(i => TotalItems += i);
}
public TreeItemData(SyndicationModel syndicationModel)

View File

@ -1,8 +1,21 @@
@using WebSharpRSS.Models
@using ToolQit.Extensions
<MudDialog>
<DialogContent>
<ItemView FeedItem="Data"/>
<div style="justify-self: start;" class="d-flex align-center">
@if (Data?.SyndicationParent.ImageUrl != null)
{
<MudImage Src="@Data.SyndicationParent.ImageUrl" ObjectFit="ObjectFit.Contain" Width="32" Height="32"/>
}
<div class="d-inline px-3 align-center" style="font-size: 30px;">
@((MarkupString)(Data?.Title ?? "This item doesn't contains a title!"))
</div>
</div>
<MudDivider DividerType="DividerType.FullWidth" Light="false" Class="my-2"/>
<div style="font-size: 20px">
@((MarkupString)((Data?.Content == null || Data.Content.IsNullEmptyWhiteSpace() ? Data?.Description : Data.Content) ?? "This item doesn't contain any content!"))
</div>
</DialogContent>
</MudDialog>

View File

@ -14,7 +14,7 @@
<MudTreeViewItem @bind-Expanded="@context.IsExpanded" Value="@context" Items="@context.Children" CanExpand="@context.HasChildren" @onclick="ItemClicked">
<Content>
<div style="display: grid; grid-template-columns: 1fr auto; align-items: center; width: 100%">
<div style="justify-self: start;" class="d-flex align-center">
<div class="d-flex align-center">
<MudTreeViewItemToggleButton ExpandedChanged="@(() => ExpandedChanged(context))" Loading="@context.Loading" Visible="@context.HasChildren" LoadingIconColor="Color.Info" />
@if (context.FaviconUrl == null && context.Icon != null)
{
@ -26,6 +26,7 @@
}
<MudText Class="ml-2">@context.Title</MudText>
</div>
<MudText Class="d-inline-flex align-self-end" Color="Color.Secondary" Typo="Typo.overline">@context.TotalItems</MudText>
</div>
</Content>
</MudTreeViewItem>

View File

@ -14,20 +14,25 @@
<div style="justify-self: start;" class="d-flex align-center">
@if (feedItemData.SyndicationParent.Category != null && !feedItemData.SyndicationParent.Category.Icon.IsNullEmptyWhiteSpace())
{
<MudIcon Icon="@feedItemData.SyndicationParent.Category.Icon" Style="@($"color:{feedItemData.SyndicationParent.Category.HexColor}")"/>
<MudTooltip Text="@feedItemData.SyndicationParent.Category.Name">
<MudIcon Icon="@feedItemData.SyndicationParent.Category.Icon" Class="mr-1" Style="@($"color:{feedItemData.SyndicationParent.Category.HexColor}")"/>
</MudTooltip>
}
@if (feedItemData.SyndicationParent.ImageUrl != null)
{
<MudImage Src="@feedItemData.SyndicationParent.ImageUrl" ObjectFit="ObjectFit.Contain" Width="32" Height="32"/>
<MudTooltip Text="@feedItemData.SyndicationParent.Title">
<MudImage Src="@feedItemData.SyndicationParent.ImageUrl" ObjectFit="ObjectFit.Contain" Width="20" Height="20"/>
</MudTooltip>
}
<div class="d-inline pa-2 align-center" style="font-size: 16px;">
<div class="d-inline ma-2 align-center" style="font-size: 20px; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 1; line-clamp: 1; -webkit-box-orient: vertical;">
@if (feedItemData.Title != null)
{
@((MarkupString)feedItemData.Title)
}
</div>
<MudText Typo="Typo.subtitle2" Color="Color.Secondary"> - @feedItemData.SyndicationParent.Title</MudText>
</div>
<div>
<div style="overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; line-clamp:2; -webkit-box-orient: vertical;">
@if (feedItemData.Description != null && !feedItemData.Description.IsNullEmptyWhiteSpace())
{
@((MarkupString)feedItemData.Description)