Skip to content

Commit d80f13d

Browse files
committed
Auto refresh Preview Window
1 parent ffdc7c3 commit d80f13d

File tree

8 files changed

+139
-24
lines changed

8 files changed

+139
-24
lines changed

NoteWidgetAddIn/Properties/Settings.Designer.cs

Lines changed: 13 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

NoteWidgetAddIn/Properties/Settings.settings

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,8 @@
2929
<Setting Name="Markdown_Preview_Top" Type="System.Double" Scope="User">
3030
<Value Profile="(Default)">10</Value>
3131
</Setting>
32+
<Setting Name="Markdown_PreviewRefresh_Interval" Type="System.Int32" Scope="User">
33+
<Value Profile="(Default)">1</Value>
34+
</Setting>
3235
</Settings>
3336
</SettingsFile>

NoteWidgetAddIn/RibbonCommand/Advanced/AdvancedSettingsDialog.Designer.cs

Lines changed: 74 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

NoteWidgetAddIn/RibbonCommand/Advanced/AdvancedSettingsDialog.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,6 @@
33

44
using System;
55
using System.Collections;
6-
using System.Collections.Generic;
7-
using System.ComponentModel;
8-
using System.Data;
9-
using System.Drawing;
10-
using System.Linq;
11-
using System.Text;
12-
using System.Threading.Tasks;
136
using System.Windows.Forms;
147
using NLog;
158
using NoteWidgetAddIn.Markdown;
@@ -40,6 +33,7 @@ private void BtnSave_Click(object sender, EventArgs e)
4033
settings.Markdown_Preview_Singleton = cbSameWindowPreview.Checked;
4134
settings.Markdown_ColorScheme = cmbColorScheme.SelectedValue.ToString();
4235
settings.Markdown_HighlightTheme = cmbHighlightTheme.SelectedValue.ToString();
36+
settings.Markdown_PreviewRefresh_Interval = (int)udRefreshInterval.Value;
4337
settings.Save();
4438
HtmlTemplate.BuildDefaultTemplates();
4539
}
@@ -60,6 +54,7 @@ private void RestoreSettings()
6054
{
6155
var settings = Properties.Settings.Default;
6256
cbSameWindowPreview.Checked = settings.Markdown_Preview_Singleton;
57+
udRefreshInterval.Value = settings.Markdown_PreviewRefresh_Interval;
6358
//
6459
var schemes = (ColorScheme[])Enum.GetValues(typeof(ColorScheme));
6560
cmbColorScheme.DisplayMember = "Text";

NoteWidgetAddIn/RibbonCommand/Markdown/PreviewMarkdownCommand.cs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,18 @@ public PreviewWindowHolder(string pageID, string pageLastModifiedTime, WebBrowse
2929
}
3030
#endregion
3131

32-
private static Dictionary<int, PreviewWindowHolder> windowContainer = new Dictionary<int, PreviewWindowHolder>();
32+
private static Dictionary<int, PreviewWindowHolder> _windowContainer = new Dictionary<int, PreviewWindowHolder>();
3333
public override async Task ExecuteAsync(params object[] args)
3434
{
35-
await PreviewCurrentNotePage();
35+
await PreviewCurrentNotePage(false);
3636
}
3737

38-
private async Task PreviewCurrentNotePage()
38+
private async Task PreviewCurrentNotePage(bool isRefresh)
3939
{
4040
var settings = Properties.Settings.Default;
4141
if (TryGetCurrentNotePage(out var notePage))
4242
{
43-
var existedHolder = windowContainer.Select(c => c.Value).FirstOrDefault(c => c.PageID == notePage.PageID);
43+
var existedHolder = _windowContainer.Select(c => c.Value).FirstOrDefault(c => c.PageID == notePage.PageID);
4444
if (existedHolder != null)
4545
{
4646
if (existedHolder.PageLastModifiedTime == notePage.LastModifiedTime)
@@ -55,9 +55,9 @@ private async Task PreviewCurrentNotePage()
5555
existedHolder.PreviewWindow.RefreshBrowser();
5656
});
5757
}
58-
else if (settings.Markdown_Preview_Singleton && windowContainer.Count > 0)
58+
else if (settings.Markdown_Preview_Singleton && _windowContainer.Count > 0)
5959
{
60-
var holder = windowContainer.First().Value;
60+
var holder = _windowContainer.First().Value;
6161
holder.PageID = notePage.PageID;
6262
holder.PageLastModifiedTime = notePage.LastModifiedTime;
6363
var htmlContent = GetHtmlContent(notePage);
@@ -78,28 +78,37 @@ await WpfAddInApplication.Current.BeginInvoke(() =>
7878
var helper = new System.Windows.Interop.WindowInteropHelper(window);
7979
helper.Owner = OwnerWin32Window.Handle;
8080

81+
var interval = settings.Markdown_PreviewRefresh_Interval;
82+
window.InitTimer(new TimeSpan(0, 0, interval), () =>
83+
{
84+
Task.Run(async () =>
85+
{
86+
await PreviewCurrentNotePage(isRefresh: true);
87+
});
88+
});
89+
8190
window.KeyDown += (s, e) =>
8291
{
8392
//Refresh
8493
if (e.Key == System.Windows.Input.Key.F5)
8594
{
8695
Task.Run(async () =>
8796
{
88-
await PreviewCurrentNotePage();
97+
await PreviewCurrentNotePage(isRefresh: true);
8998
});
9099
}
91100
};
92101

93102
window.Closed += (s, e) =>
94103
{
95104
var key = window.GetHashCode();
96-
if (windowContainer.ContainsKey(key))
105+
if (_windowContainer.ContainsKey(key))
97106
{
98-
windowContainer.Remove(key);
107+
_windowContainer.Remove(key);
99108
}
100109
};
101110

102-
windowContainer.Add(window.GetHashCode(), new PreviewWindowHolder(notePage.PageID, notePage.LastModifiedTime, window));
111+
_windowContainer.Add(window.GetHashCode(), new PreviewWindowHolder(notePage.PageID, notePage.LastModifiedTime, window));
103112
window.Show();
104113
});
105114
}

NoteWidgetAddIn/RibbonCommand/Markdown/WebBrowserWindow.xaml.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using System.Reflection;
1010
using System.Threading.Tasks;
1111
using System.Windows;
12+
using System.Windows.Threading;
1213
using Microsoft.Web.WebView2.Core;
1314
using NLog;
1415

@@ -20,6 +21,9 @@ namespace NoteWidgetAddIn.RibbonCommand.Markdown
2021
public partial class WebBrowserWindow : Window
2122
{
2223
private static readonly ILogger _logger = LogManager.GetCurrentClassLogger();
24+
25+
private DispatcherTimer _timer;
26+
private bool _timerInitialized = false;
2327
public WebBrowserWindow()
2428
{
2529
InitializeComponent();
@@ -29,8 +33,25 @@ public WebBrowserWindow()
2933
webBrowser.NavigationCompleted += WebBrowser_NavigationCompleted;
3034
}
3135

36+
public void InitTimer(TimeSpan interval, Action callback)
37+
{
38+
if (_timerInitialized)
39+
{
40+
throw new InvalidOperationException("Timer has been initialized already.");
41+
}
42+
_timer = new DispatcherTimer();
43+
_timer.Interval = interval;
44+
_timer.Tick += (s, e) =>
45+
{
46+
callback();
47+
};
48+
_timer.Start();
49+
_timerInitialized = true;
50+
}
51+
3252
private void WebBrowserWindow_Closed(object sender, EventArgs e)
3353
{
54+
_timer.Stop();
3455
SaveWindowPropertiesIfRequired();
3556
}
3657

NoteWidgetAddIn/app.config

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@
3535
<setting name="Markdown_Preview_Top" serializeAs="String">
3636
<value>10</value>
3737
</setting>
38+
<setting name="Markdown_PreviewRefresh_Interval" serializeAs="String">
39+
<value>1</value>
40+
</setting>
3841
</NoteWidgetAddIn.Properties.Settings>
3942
<NoteWidget.AddIn.Properties.Settings>
4043
<setting name="Markdown_ColorScheme" serializeAs="String">

README.MD

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ A full featured Markdown viwer with syntax highlighting, export enhancement for
1717
- Process, sequence, Gantt diagram etc.
1818
- Capturing picture in onenote page and display in Markdown viewer
1919
- Preview Window Refresh (Press `F5`. 24/6/2022)
20+
- Auto refresh Preview Window (24/6/2022)
21+
- Auto refresh Preview Window every 1 second by default
22+
- Set interval to a large number in Settings Window to disable auto refresh, let's say set interval to 999999999.
23+
2024
## Markdown CheatSheet
2125
- Common mark
2226
- Extended mark

0 commit comments

Comments
 (0)