2023-05-15 15:53:08 +02:00
|
|
|
|
using CodeHollow.FeedReader;
|
2023-05-12 15:48:14 +02:00
|
|
|
|
|
|
|
|
|
namespace SharpRss.Models
|
|
|
|
|
{
|
2023-05-15 15:53:08 +02:00
|
|
|
|
public class FeedModel
|
2023-05-12 15:48:14 +02:00
|
|
|
|
{
|
2023-05-12 23:58:49 +02:00
|
|
|
|
public FeedModel(string rssUrl)
|
|
|
|
|
{
|
|
|
|
|
_rssUrl = rssUrl;
|
2023-05-15 15:53:08 +02:00
|
|
|
|
_fetchTask = FetchAsync();
|
2023-05-12 23:58:49 +02:00
|
|
|
|
}
|
2023-05-15 15:53:08 +02:00
|
|
|
|
private Task _fetchTask;
|
2023-05-12 23:58:49 +02:00
|
|
|
|
|
2023-05-15 15:53:08 +02:00
|
|
|
|
private async Task FetchAsync()
|
2023-05-12 23:58:49 +02:00
|
|
|
|
{
|
|
|
|
|
IsReady = false;
|
2023-05-15 15:53:08 +02:00
|
|
|
|
_feed = await FeedCache.GetFeed(_rssUrl);
|
2023-05-12 23:58:49 +02:00
|
|
|
|
IsReady = true;
|
2023-05-15 15:53:08 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Feed? _feed;
|
|
|
|
|
public Feed Base {
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (_feed == null)
|
|
|
|
|
{
|
|
|
|
|
if (_fetchTask.IsFaulted)
|
|
|
|
|
{ IsFaulted = _fetchTask.IsFaulted; return new Feed(); }
|
|
|
|
|
if (!(_fetchTask.Status == TaskStatus.Running || _fetchTask.Status == TaskStatus.WaitingForActivation))
|
|
|
|
|
_fetchTask.Start();
|
|
|
|
|
_fetchTask.Wait();
|
|
|
|
|
}
|
|
|
|
|
return _feed ?? new Feed();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public bool IsFaulted { get; private set; }
|
|
|
|
|
public bool IsReady { get; private set; }
|
|
|
|
|
private readonly string _rssUrl;
|
2023-05-12 15:48:14 +02:00
|
|
|
|
}
|
|
|
|
|
}
|