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 public partial class NewsListControl : UserControl
{ {
private NewsManager newsManager; public NewsManager NewsManager { get; private set; }
private ToolTip tooltip; private ToolTip tooltip;
public NewsListControl() public NewsListControl()
@ -56,14 +57,16 @@ public NewsListControl()
TaskEx.Run(() => TaskEx.Run(() =>
{ {
newsManager = new NewsManager(); NewsManager = new NewsManager();
newsManager.UpdateNews(); 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) 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) private void TlpMain_Layout(object sender, LayoutEventArgs e)
{ {
TaskEx.RunDelayed(() => TaskEx.RunDelayed(() =>
@ -107,7 +119,8 @@ private void TlpMain_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
e.Graphics.FillRectangle(brush, e.CellBounds); 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)); 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) private void PrepareCaptureMenuAsync(ToolStripMenuItem tsmiWindow, EventHandler handlerWindow, ToolStripMenuItem tsmiMonitor, EventHandler handlerMonitor)
{ {
tsmiWindow.DropDownItems.Clear(); tsmiWindow.DropDownItems.Clear();
@ -1266,7 +1272,7 @@ private void pbPatreonHide_Click(object sender, EventArgs e)
private void btnCloseNews_Click(object sender, EventArgs e) private void btnCloseNews_Click(object sender, EventArgs e)
{ {
pNews.Visible = false; HideNews();
} }
#region Menu events #region Menu events
@ -1553,7 +1559,14 @@ private void tsmiTestURLSharing_Click(object sender, EventArgs e)
private void tsbNews_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) private void tsbDonate_Click(object sender, EventArgs e)

View file

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

View file

@ -38,7 +38,7 @@ public class NewsManager
{ {
public List<NewsItem> NewsItems { get; private set; } = new List<NewsItem>(); public List<NewsItem> NewsItems { get; private set; } = new List<NewsItem>();
public DateTime LastReadDate { get; set; } 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() 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() private List<NewsItem> GetNews()
{ {
using (WebClient wc = new WebClient()) using (WebClient wc = new WebClient())