Hardware Changed Notification (#379)

Thanks to @sebastian-dev
This commit is contained in:
sebastian-dev
2021-02-08 15:04:35 +01:00
committed by GitHub
parent 4b12fed029
commit a4b931f984
3 changed files with 56 additions and 23 deletions
+29 -20
View File
@@ -24,6 +24,9 @@ namespace LibreHardwareMonitor.Hardware
{
public class Computer : IComputer
{
public event HardwareEventHandler HardwareAdded;
public event HardwareEventHandler HardwareRemoved;
private readonly List<IGroup> _groups = new List<IGroup>();
private readonly ISettings _settings;
private bool _controllerEnabled;
@@ -66,8 +69,6 @@ namespace LibreHardwareMonitor.Hardware
public bool IsCpuEnabled
{
get { return _cpuEnabled; }
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
set
{
if (_open && value != _cpuEnabled)
@@ -85,8 +86,6 @@ namespace LibreHardwareMonitor.Hardware
public bool IsControllerEnabled
{
get { return _controllerEnabled; }
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
set
{
if (_open && value != _controllerEnabled)
@@ -116,8 +115,6 @@ namespace LibreHardwareMonitor.Hardware
public bool IsGpuEnabled
{
get { return _gpuEnabled; }
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
set
{
if (_open && value != _gpuEnabled)
@@ -141,8 +138,6 @@ namespace LibreHardwareMonitor.Hardware
public bool IsMemoryEnabled
{
get { return _memoryEnabled; }
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
set
{
if (_open && value != _memoryEnabled)
@@ -160,8 +155,6 @@ namespace LibreHardwareMonitor.Hardware
public bool IsMotherboardEnabled
{
get { return _motherboardEnabled; }
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
set
{
if (_open && value != _motherboardEnabled)
@@ -179,8 +172,6 @@ namespace LibreHardwareMonitor.Hardware
public bool IsNetworkEnabled
{
get { return _networkEnabled; }
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
set
{
if (_open && value != _networkEnabled)
@@ -198,8 +189,6 @@ namespace LibreHardwareMonitor.Hardware
public bool IsStorageEnabled
{
get { return _storageEnabled; }
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
set
{
if (_open && value != _storageEnabled)
@@ -214,10 +203,6 @@ namespace LibreHardwareMonitor.Hardware
}
}
public event HardwareEventHandler HardwareAdded;
public event HardwareEventHandler HardwareRemoved;
public string GetReport()
{
lock (_lock)
@@ -318,8 +303,22 @@ namespace LibreHardwareMonitor.Hardware
}
}
private void HardwareAddedEvent(IHardware hardware)
{
HardwareAdded?.Invoke(hardware);
}
private void HardwareRemovedEvent(IHardware hardware)
{
HardwareRemoved?.Invoke(hardware);
}
private void Add(IGroup group)
{
if (group == null)
return;
lock (_lock)
{
if (_groups.Contains(group))
@@ -327,6 +326,12 @@ namespace LibreHardwareMonitor.Hardware
_groups.Add(group);
if (group is IHardwareChanged hardwareChanged)
{
hardwareChanged.HardwareAdded += HardwareAddedEvent;
hardwareChanged.HardwareRemoved += HardwareRemovedEvent;
}
}
if (HardwareAdded != null)
@@ -345,8 +350,13 @@ namespace LibreHardwareMonitor.Hardware
_groups.Remove(group);
}
if (group is IHardwareChanged hardwareChanged)
{
hardwareChanged.HardwareAdded -= HardwareAddedEvent;
hardwareChanged.HardwareRemoved -= HardwareRemovedEvent;
}
}
if (HardwareRemoved != null)
{
@@ -374,7 +384,6 @@ namespace LibreHardwareMonitor.Hardware
Remove(group);
}
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
public void Open()
{
if (_open)
@@ -0,0 +1,13 @@
// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Copyright (C) LibreHardwareMonitor and Contributors.
// All Rights Reserved.
namespace LibreHardwareMonitor.Hardware
{
internal interface IHardwareChanged
{
event HardwareEventHandler HardwareAdded;
event HardwareEventHandler HardwareRemoved;
}
}
@@ -11,8 +11,11 @@ using System.Text;
namespace LibreHardwareMonitor.Hardware.Network
{
internal class NetworkGroup : IGroup
internal class NetworkGroup : IGroup, IHardwareChanged
{
public event HardwareEventHandler HardwareAdded;
public event HardwareEventHandler HardwareRemoved;
private readonly Dictionary<string, Network> _networks = new Dictionary<string, Network>();
private readonly object _scanLock = new object();
private readonly ISettings _settings;
@@ -78,23 +81,31 @@ namespace LibreHardwareMonitor.Hardware.Network
{
if (foundNetworkInterfaces.ContainsKey(networkInterfacePair.Key))
continue;
removeKeys.Add(networkInterfacePair.Key);
}
foreach (string key in removeKeys)
{
var network = _networks[key];
network.Close();
_networks.Remove(key);
_hardware.Remove(network);
HardwareRemoved?.Invoke(network);
}
// Add new network interfaces.
foreach (KeyValuePair<string, NetworkInterface> networkInterfacePair in foundNetworkInterfaces)
{
if (!_networks.ContainsKey(networkInterfacePair.Key))
{
_networks.Add(networkInterfacePair.Key, new Network(networkInterfacePair.Value, settings));
_hardware.Add(_networks[networkInterfacePair.Key]);
HardwareAdded?.Invoke(_networks[networkInterfacePair.Key]);
}
}
_hardware = _networks.Values.OrderBy(x => x.Name).ToList();
}
}