Refactor VCP code handling and improve immutability

Refactored `WaitForColorTempAndSaveAsync` to use `IReadOnlyList<Task>` for improved immutability. Removed the `GetMonitorViewModel` method from `MainViewModel.Monitors.cs`.

Simplified VCP code handling in `MainViewModel.Settings.cs` by inlining the logic of `BuildVcpCodesList` and `BuildFormattedVcpCodesList` into the object initialization for `monitorInfo`. This reduces redundancy and improves code readability and maintainability.
This commit is contained in:
Yu Leng
2025-12-08 14:57:05 +08:00
parent b75db43988
commit 5bf0a610e8
2 changed files with 5 additions and 33 deletions

View File

@@ -150,7 +150,7 @@ public partial class MainViewModel
}
}
private async Task WaitForColorTempAndSaveAsync(List<Task> colorTempTasks)
private async Task WaitForColorTempAndSaveAsync(IReadOnlyList<Task> colorTempTasks)
{
try
{
@@ -200,9 +200,6 @@ public partial class MainViewModel
}
}
private MonitorViewModel? GetMonitorViewModel(string monitorId)
=> Monitors.FirstOrDefault(vm => vm.Id == monitorId);
/// <summary>
/// Get set of hidden monitor IDs from settings
/// </summary>

View File

@@ -556,8 +556,10 @@ public partial class MainViewModel
colorTemperatureVcp: vm.ColorTemperature)
{
CapabilitiesRaw = vm.CapabilitiesRaw,
VcpCodes = BuildVcpCodesList(vm),
VcpCodesFormatted = BuildFormattedVcpCodesList(vm),
VcpCodes = vm.VcpCapabilitiesInfo?.GetVcpCodesAsHexStrings() ?? new List<string>(),
VcpCodesFormatted = vm.VcpCapabilitiesInfo?.GetSortedVcpCodes()
.Select(info => FormatVcpCodeForDisplay(info.Code, info))
.ToList() ?? new List<Microsoft.PowerToys.Settings.UI.Library.VcpCodeDisplayInfo>(),
// Infer support flags from VCP capabilities
// VCP 0x12 (18) = Contrast, 0x14 (20) = Color Temperature, 0x60 (96) = Input Source, 0x62 (98) = Volume
@@ -573,33 +575,6 @@ public partial class MainViewModel
return monitorInfo;
}
/// <summary>
/// Build list of VCP codes in hex format
/// </summary>
private List<string> BuildVcpCodesList(MonitorViewModel vm)
{
return vm.VcpCapabilitiesInfo?.GetVcpCodesAsHexStrings() ?? new List<string>();
}
/// <summary>
/// Build list of formatted VCP codes with display info
/// </summary>
private List<Microsoft.PowerToys.Settings.UI.Library.VcpCodeDisplayInfo> BuildFormattedVcpCodesList(MonitorViewModel vm)
{
if (vm.VcpCapabilitiesInfo == null)
{
return new List<Microsoft.PowerToys.Settings.UI.Library.VcpCodeDisplayInfo>();
}
var result = new List<Microsoft.PowerToys.Settings.UI.Library.VcpCodeDisplayInfo>();
foreach (var info in vm.VcpCapabilitiesInfo.GetSortedVcpCodes())
{
result.Add(FormatVcpCodeForDisplay(info.Code, info));
}
return result;
}
/// <summary>
/// Apply preserved user settings from existing monitor settings
/// </summary>