diff --git a/ShareX/Controls/NewsListControl.cs b/ShareX/Controls/NewsListControl.cs index 764d27508..ee2cb7230 100644 --- a/ShareX/Controls/NewsListControl.cs +++ b/ShareX/Controls/NewsListControl.cs @@ -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)); } diff --git a/ShareX/Forms/MainForm.cs b/ShareX/Forms/MainForm.cs index 7bec4254c..fd9879159 100644 --- a/ShareX/Forms/MainForm.cs +++ b/ShareX/Forms/MainForm.cs @@ -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) diff --git a/ShareX/NewsItem.cs b/ShareX/NewsItem.cs index f2ba59d83..25df1022e 100644 --- a/ShareX/NewsItem.cs +++ b/ShareX/NewsItem.cs @@ -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; } } } \ No newline at end of file diff --git a/ShareX/NewsManager.cs b/ShareX/NewsManager.cs index 752479e0e..54b8e6397 100644 --- a/ShareX/NewsManager.cs +++ b/ShareX/NewsManager.cs @@ -38,7 +38,7 @@ public class NewsManager { public List NewsItems { get; private set; } = new List(); 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 GetNews() { using (WebClient wc = new WebClient())