Skip to content

Commit 7bdc118

Browse files
committed
add Auto-Update Application option
1 parent 70cb179 commit 7bdc118

File tree

2 files changed

+83
-111
lines changed

2 files changed

+83
-111
lines changed

OpenHardwareMonitor/UI/MainForm.Designer.cs

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

OpenHardwareMonitor/UI/MainForm.cs

Lines changed: 73 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ namespace OpenHardwareMonitor.UI;
1818
public sealed partial class MainForm : Form
1919
{
2020
private readonly UserOption _autoStart;
21+
private readonly UserOption _autoUpdate;
2122
private readonly Computer _computer;
2223
private readonly SensorGadget _gadget;
2324
private readonly Logger _logger;
@@ -48,20 +49,21 @@ public sealed partial class MainForm : Form
4849

4950
private int _delayCount;
5051
private bool _selectionDragging;
52+
private DateTime _nextUpdateCheckTime;
5153

5254
public MainForm()
5355
{
5456
InitializeComponent();
5557

56-
this.sensor.WidthChanged += delegate { TreeView_ColumnWidthChanged(this.sensor); };
57-
this.value.WidthChanged += delegate { TreeView_ColumnWidthChanged(this.value); };
58-
this.min.WidthChanged += delegate { TreeView_ColumnWidthChanged(this.min); };
59-
this.max.WidthChanged += delegate { TreeView_ColumnWidthChanged(this.max); };
58+
sensor.WidthChanged += delegate { TreeView_ColumnWidthChanged(this.sensor); };
59+
value.WidthChanged += delegate { TreeView_ColumnWidthChanged(this.value); };
60+
min.WidthChanged += delegate { TreeView_ColumnWidthChanged(this.min); };
61+
max.WidthChanged += delegate { TreeView_ColumnWidthChanged(this.max); };
6062

6163
_settings = new PersistentSettings();
6264
_settings.Load();
6365

64-
this.MinimumSize = new Size(400, 200);
66+
MinimumSize = new Size(400, 200);
6567
Text = Updater.ApplicationTitle;
6668
Icon = Icon.ExtractAssociatedIcon(Updater.CurrentFileLocation);
6769
portableModeMenuItem.Checked = _settings.IsPortable;
@@ -115,7 +117,7 @@ public MainForm()
115117

116118
_systemTray = new SystemTray(_computer, _settings);
117119
_systemTray.HideShowCommand += HideShowClick;
118-
_systemTray.ExitCommand += ExitClick;
120+
_systemTray.ExitCommand += CloseApplication;
119121

120122
if (OperatingSystemHelper.IsUnix)
121123
{
@@ -173,6 +175,11 @@ public MainForm()
173175

174176
_minimizeOnClose = new UserOption("minCloseMenuItem", false, minCloseMenuItem, _settings);
175177

178+
_autoUpdate = new UserOption("autoUpdateAppMenuItem", false, autoUpdateAppMenuItem, _settings);
179+
_autoUpdate.Changed += delegate {
180+
_nextUpdateCheckTime = _autoUpdate.Value ? DateTime.Now.AddSeconds(3) : DateTime.MinValue;
181+
};
182+
176183
_autoStart = new UserOption(null, _startupManager.Startup, startupMenuItem, _settings);
177184
_autoStart.Changed += delegate
178185
{
@@ -233,7 +240,6 @@ public MainForm()
233240
// Prevent Menu From Closing When UnClicking Hardware Items
234241
menuItemFileHardware.DropDown.Closing += StopFileHardwareMenuFromClosing;
235242

236-
237243
_showGadget.Changed += delegate
238244
{
239245
if (_gadget != null)
@@ -292,48 +298,22 @@ public MainForm()
292298

293299
_loggingInterval.Changed += (_, _) =>
294300
{
295-
switch (_loggingInterval.Value)
301+
_logger.LoggingInterval = _loggingInterval.Value switch
296302
{
297-
case 0:
298-
_logger.LoggingInterval = new TimeSpan(0, 0, 1);
299-
break;
300-
case 1:
301-
_logger.LoggingInterval = new TimeSpan(0, 0, 2);
302-
break;
303-
case 2:
304-
_logger.LoggingInterval = new TimeSpan(0, 0, 5);
305-
break;
306-
case 3:
307-
_logger.LoggingInterval = new TimeSpan(0, 0, 10);
308-
break;
309-
case 4:
310-
_logger.LoggingInterval = new TimeSpan(0, 0, 30);
311-
break;
312-
case 5:
313-
_logger.LoggingInterval = new TimeSpan(0, 1, 0);
314-
break;
315-
case 6:
316-
_logger.LoggingInterval = new TimeSpan(0, 2, 0);
317-
break;
318-
case 7:
319-
_logger.LoggingInterval = new TimeSpan(0, 5, 0);
320-
break;
321-
case 8:
322-
_logger.LoggingInterval = new TimeSpan(0, 10, 0);
323-
break;
324-
case 9:
325-
_logger.LoggingInterval = new TimeSpan(0, 30, 0);
326-
break;
327-
case 10:
328-
_logger.LoggingInterval = new TimeSpan(1, 0, 0);
329-
break;
330-
case 11:
331-
_logger.LoggingInterval = new TimeSpan(2, 0, 0);
332-
break;
333-
case 12:
334-
_logger.LoggingInterval = new TimeSpan(6, 0, 0);
335-
break;
336-
}
303+
0 => new TimeSpan(0, 0, 1),
304+
1 => new TimeSpan(0, 0, 2),
305+
2 => new TimeSpan(0, 0, 5),
306+
3 => new TimeSpan(0, 0, 10),
307+
4 => new TimeSpan(0, 0, 30),
308+
5 => new TimeSpan(0, 1, 0),
309+
6 => new TimeSpan(0, 2, 0),
310+
7 => new TimeSpan(0, 5, 0),
311+
8 => new TimeSpan(0, 10, 0),
312+
9 => new TimeSpan(0, 30, 0),
313+
10 => new TimeSpan(1, 0, 0),
314+
11 => new TimeSpan(2, 0, 0),
315+
_ => new TimeSpan(6, 0, 0),
316+
};
337317
};
338318

339319
_updateInterval = new UserRadioGroup("updateIntervalMenuItem",
@@ -351,27 +331,15 @@ public MainForm()
351331

352332
_updateInterval.Changed += (_, _) =>
353333
{
354-
switch (_updateInterval.Value)
334+
timer.Interval = _updateInterval.Value switch
355335
{
356-
case 0:
357-
timer.Interval = 250;
358-
break;
359-
case 1:
360-
timer.Interval = 500;
361-
break;
362-
case 2:
363-
timer.Interval = 1000;
364-
break;
365-
case 3:
366-
timer.Interval = 2000;
367-
break;
368-
case 4:
369-
timer.Interval = 5000;
370-
break;
371-
case 5:
372-
timer.Interval = 10000;
373-
break;
374-
}
336+
0 => 250,
337+
1 => 500,
338+
2 => 1000,
339+
3 => 2000,
340+
4 => 5000,
341+
_ => 10000,
342+
};
375343
};
376344

377345
_throttleAtaUpdate = new UserOption("throttleAtaUpdateMenuItem", false, throttleAtaUpdateMenuItem, _settings);
@@ -451,17 +419,18 @@ public MainForm()
451419
Show();
452420
}
453421

454-
// Create a handle, otherwise calling Close() does not fire FormClosed
455-
422+
Updater.Subscribe(
423+
(message, isError) => {
424+
MessageBox.Show(message, Updater.ApplicationName, MessageBoxButtons.OK, isError ? MessageBoxIcon.Warning : MessageBoxIcon.Information);
425+
},
426+
(message) => {
427+
return MessageBox.Show(message, Updater.ApplicationName, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK;
428+
},
429+
() => CloseApplication(null, EventArgs.Empty)
430+
);
431+
FormClosed += CloseApplication;
456432
// Make sure the settings are saved when the user logs off
457-
Microsoft.Win32.SystemEvents.SessionEnded += delegate
458-
{
459-
_computer.Close();
460-
SaveConfiguration();
461-
if (_runWebServer.Value)
462-
Server.Quit();
463-
};
464-
433+
Microsoft.Win32.SystemEvents.SessionEnded += (_, _) => CloseApplication(null, EventArgs.Empty);
465434
Microsoft.Win32.SystemEvents.PowerModeChanged += PowerModeChanged;
466435
}
467436

@@ -586,11 +555,6 @@ private void NodeTextBoxText_EditorShowing(object sender, CancelEventArgs e)
586555
e.Cancel = !(treeView.CurrentNode != null && (treeView.CurrentNode.Tag is SensorNode || treeView.CurrentNode.Tag is HardwareNode));
587556
}
588557

589-
private void ExitClick(object sender, EventArgs e)
590-
{
591-
CloseApplication();
592-
}
593-
594558
private void Timer_Tick(object sender, EventArgs e)
595559
{
596560
treeView.Invalidate();
@@ -602,6 +566,12 @@ private void Timer_Tick(object sender, EventArgs e)
602566
backgroundUpdater.RunWorkerAsync();
603567

604568
RestoreCollapsedNodeState(treeView);
569+
570+
if (_nextUpdateCheckTime != DateTime.MinValue && _nextUpdateCheckTime < DateTime.Now)
571+
{
572+
_ = Updater.CheckForUpdatesAsync(Updater.CheckUpdatesMode.AutoUpdate);
573+
_nextUpdateCheckTime = _autoUpdate.Value ? DateTime.Now.AddHours(24) : DateTime.MinValue;
574+
}
605575
}
606576

607577
private void SaveConfiguration()
@@ -647,18 +617,6 @@ private void MainForm_Load(object sender, EventArgs e)
647617

648618
RestoreCollapsedNodeState(treeView);
649619
treeView.Width += 1; //just to apply column auto-resize
650-
651-
Updater.Subscribe(
652-
(message, isError) => {
653-
MessageBox.Show(message, Updater.ApplicationName, MessageBoxButtons.OK, isError ? MessageBoxIcon.Warning : MessageBoxIcon.Information);
654-
},
655-
(message) => {
656-
return MessageBox.Show(message, Updater.ApplicationName, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK;
657-
},
658-
Application.Exit
659-
);
660-
661-
FormClosed += MainForm_FormClosed;
662620
}
663621

664622
private void RestoreCollapsedNodeState(TreeViewAdv treeViewAdv)
@@ -674,28 +632,33 @@ private void RestoreCollapsedNodeState(TreeViewAdv treeViewAdv)
674632
}
675633
}
676634

677-
private void CloseApplication()
635+
private void CloseApplication(object sender, EventArgs e)
678636
{
679-
FormClosed -= MainForm_FormClosed;
637+
FormClosed -= CloseApplication;
638+
if (InvokeRequired)
639+
{
640+
Invoke(new EventHandler(CloseApplication), sender, e);
641+
return;
642+
}
680643

681644
Visible = false;
682-
_systemTray.IsMainIconEnabled = false;
645+
646+
backgroundUpdater?.Dispose();
683647
timer.Enabled = false;
684-
_computer.Close();
685-
SaveConfiguration();
648+
timer?.Dispose();
649+
650+
_systemTray.IsMainIconEnabled = false;
651+
_systemTray?.Dispose();
652+
686653
if (_runWebServer.Value)
687-
Server.Quit();
654+
Server?.Quit();
688655

689-
_systemTray.Dispose();
690-
timer.Dispose();
691-
backgroundUpdater.Dispose();
656+
_computer?.Close();
692657

693-
Application.Exit();
694-
}
658+
SaveConfiguration();
695659

696-
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
697-
{
698-
CloseApplication();
660+
Close();
661+
Application.Exit();
699662
}
700663

701664
private void menuItemSite_Click(object sender, EventArgs e)
@@ -705,7 +668,7 @@ private void menuItemSite_Click(object sender, EventArgs e)
705668

706669
private void menuItemCheckUpdates_Click(object sender, EventArgs e)
707670
{
708-
Updater.CheckForUpdates(false);
671+
Updater.CheckForUpdates(Updater.CheckUpdatesMode.AllMessages);
709672
}
710673

711674
private void AboutMenuItem_Click(object sender, EventArgs e)

0 commit comments

Comments
 (0)