Files
ReLibreHardwareMonitor/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs
T
BlacktempelandPhyxionNL 9e831e07b2 Update for DiskInfoToolkit Version 2.0.0. (#2298)
* Update for DiskInfoToolkit Version 2.0.0.

* PR comments

* PR comments.

* Apply suggestion from @PhyxionNL

---------

Co-authored-by: PhyxionNL <7643972+PhyxionNL@users.noreply.github.com>
2026-04-06 19:26:02 +02:00

104 lines
3.1 KiB
C#

// 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.
// Partial Copyright (C) Michael Möller <mmoeller@openhardwaremonitor.org> and Contributors.
// All Rights Reserved.
using System.Collections.Generic;
using System.Linq;
using DiskInfoToolkit;
using StorageDeviceDIT = DiskInfoToolkit.StorageDevice;
using StorageDIT = DiskInfoToolkit.Storage;
namespace LibreHardwareMonitor.Hardware.Storage;
internal class StorageGroup : IGroup, IHardwareChanged
{
private readonly List<StorageDevice> _hardware = new();
private readonly ISettings _settings;
public event HardwareEventHandler HardwareAdded;
public event HardwareEventHandler HardwareRemoved;
public StorageGroup(ISettings settings)
{
if (Software.OperatingSystem.IsUnix)
return;
_settings = settings;
AddHardware(settings);
}
public IReadOnlyList<IHardware> Hardware => _hardware;
private void AddHardware(ISettings settings)
{
StorageDIT.DevicesChanged -= OnStoragesChanged;
//Get all disks
var disks = StorageDIT.GetDisks();
//Transform storage device to hardware
_hardware.AddRange(disks.Select(s => new StorageDevice(s, GetID(s), settings)));
StorageDIT.DevicesChanged += OnStoragesChanged;
}
private void OnStoragesChanged(object sender, StorageDevicesChangedEventArgs e)
{
foreach (var added in e.Added)
{
var storageDevice = new StorageDevice(added, GetID(added), _settings);
_hardware.Add(storageDevice);
HardwareAdded?.Invoke(storageDevice);
}
foreach (var removed in e.Removed)
{
var storageDevice = _hardware.Find(sd => sd.Storage == removed);
if (storageDevice != null)
{
_hardware.Remove(storageDevice);
HardwareRemoved?.Invoke(storageDevice);
}
}
}
private string GetID(StorageDeviceDIT disk)
{
switch (disk.TransportKind)
{
case StorageTransportKind.Ata:
return "ata";
case StorageTransportKind.Scsi:
return "scsi";
case StorageTransportKind.Nvme:
return "nvme";
case StorageTransportKind.Usb:
return "usb";
case StorageTransportKind.Sd:
return "sd";
case StorageTransportKind.Mmc:
return "mmc";
case StorageTransportKind.Raid:
return "raid";
case StorageTransportKind.Sas:
return "sas";
case StorageTransportKind.Ahci:
return "ahci";
case StorageTransportKind.Virtual:
return "virtual";
case StorageTransportKind.Unknown:
default:
return "disk";
}
}
public void Close() { }
public string GetReport() => null;
}