Mark all read after close news panel

This commit is contained in:
Jaex 2017-06-12 02:49:17 +03:00
parent 91c5d50ea3
commit ac40d70195
4 changed files with 48 additions and 13 deletions

View file

@ -38,7 +38,8 @@ namespace ShareX
{
public partial class NewsListControl : UserControl
{
private NewsManager newsManager;
public NewsManager NewsManager { get; private set; }
private ToolTip tooltip;
public NewsListControl()
@ -56,14 +57,16 @@ public NewsListControl()
TaskEx.Run(() =>
{
newsManager = new NewsManager();
newsManager.UpdateNews();
NewsManager = new NewsManager();
NewsManager.LastReadDate = Program.Settings.NewsLastReadDate;
NewsManager.UpdateNews();
NewsManager.UpdateUnread();
},
() =>
{
if (newsManager != null && newsManager.NewsItems != null)
if (NewsManager != null && NewsManager.NewsItems != null)
{
foreach (NewsItem item in newsManager.NewsItems)
foreach (NewsItem item in NewsManager.NewsItems)
{
if (item != null)
{
@ -74,6 +77,15 @@ public NewsListControl()
});
}
public void MarkRead()
{
if (NewsManager != null && NewsManager.NewsItems != null && NewsManager.NewsItems.Count > 0)
{
Program.Settings.NewsLastReadDate = NewsManager.LastReadDate = NewsManager.NewsItems.OrderByDescending(x => x.DateTime).First().DateTime;
NewsManager.UpdateUnread();
}
}
private void TlpMain_Layout(object sender, LayoutEventArgs e)
{
TaskEx.RunDelayed(() =>
@ -107,7 +119,8 @@ private void TlpMain_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
e.Graphics.FillRectangle(brush, e.CellBounds);
}
if (newsManager.NewsItems.IsValidIndex(e.Row) && newsManager.NewsItems[e.Row].IsUnread(newsManager.LastReadDate) && e.Column == 0)
if (NewsManager != null && NewsManager.NewsItems != null & NewsManager.NewsItems.IsValidIndex(e.Row) &&
NewsManager.NewsItems[e.Row].IsUnread && e.Column == 0)
{
e.Graphics.FillRectangle(Brushes.LimeGreen, new Rectangle(e.CellBounds.X, e.CellBounds.Y, 5, e.CellBounds.Height));
}

View file

@ -927,6 +927,12 @@ private void RunPuushTasks()
}
}
private void HideNews()
{
pNews.Visible = false;
ucNews.MarkRead();
}
private void PrepareCaptureMenuAsync(ToolStripMenuItem tsmiWindow, EventHandler handlerWindow, ToolStripMenuItem tsmiMonitor, EventHandler handlerMonitor)
{
tsmiWindow.DropDownItems.Clear();
@ -1266,7 +1272,7 @@ private void pbPatreonHide_Click(object sender, EventArgs e)
private void btnCloseNews_Click(object sender, EventArgs e)
{
pNews.Visible = false;
HideNews();
}
#region Menu events
@ -1553,7 +1559,14 @@ private void tsmiTestURLSharing_Click(object sender, EventArgs e)
private void tsbNews_Click(object sender, EventArgs e)
{
pNews.Visible = !pNews.Visible;
if (!pNews.Visible)
{
pNews.Visible = true;
}
else
{
HideNews();
}
}
private void tsbDonate_Click(object sender, EventArgs e)

View file

@ -37,9 +37,7 @@ public class NewsItem
public string Text { get; set; }
public string URL { get; set; }
public bool IsUnread(DateTime lastReadDate)
{
return DateTime > lastReadDate;
}
[JsonIgnore]
public bool IsUnread { get; set; }
}
}

View file

@ -38,7 +38,7 @@ public class NewsManager
{
public List<NewsItem> NewsItems { get; private set; } = new List<NewsItem>();
public DateTime LastReadDate { get; set; }
public bool IsUnread => NewsItems != null && NewsItems.Any(x => x.IsUnread(LastReadDate));
public bool IsUnread => NewsItems != null && NewsItems.Any(x => x.IsUnread);
public void UpdateNews()
{
@ -52,6 +52,17 @@ public void UpdateNews()
}
}
public void UpdateUnread()
{
if (NewsItems != null)
{
foreach (NewsItem newsItem in NewsItems)
{
newsItem.IsUnread = newsItem.DateTime > LastReadDate;
}
}
}
private List<NewsItem> GetNews()
{
using (WebClient wc = new WebClient())