diff --git a/DotNetSolutionTools.App/ViewModels/MainWindowViewModel.cs b/DotNetSolutionTools.App/ViewModels/MainWindowViewModel.cs index 3b42ada..8e545e1 100644 --- a/DotNetSolutionTools.App/ViewModels/MainWindowViewModel.cs +++ b/DotNetSolutionTools.App/ViewModels/MainWindowViewModel.cs @@ -1,5 +1,7 @@ using System.Collections.ObjectModel; using System.Text.Json; +using Avalonia.Media; +using Avalonia.Media.Immutable; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using DotNetSolutionTools.App.Models; @@ -28,14 +30,41 @@ public partial class MainWindowViewModel : ObservableObject [ObservableProperty] private string _resultsLabel = "Ready"; + [ObservableProperty] + private IImmutableSolidColorBrush _resultsLabelColor = new ImmutableSolidColorBrush(Colors.Black); + + public MainWindowViewModel() + { + LoadSavedState().ConfigureAwait(false); + } + + private void SetBeginCommandState() + { + OperationResults.Clear(); + ResultsLabel = "Running..."; + ResultsLabelColor = new ImmutableSolidColorBrush(Colors.Black); + } + + private void SetCommandSuccessState(string message) + { + ResultsLabel = message; + ResultsLabelColor = new ImmutableSolidColorBrush(Colors.Green); + } + + private void SetCommandFailureState(string message, Exception e) + { + ResultsLabel = message; + ResultsLabelColor = new ImmutableSolidColorBrush(Colors.DarkRed); + OperationResults?.Add(e.Message); + OperationResults?.Add(e.ToString()); + } + [RelayCommand] private async Task ExecuteParityChecker(CancellationToken token) { - OperationResults.Clear(); - ResultsLabel = string.Empty; + SetBeginCommandState(); try { - ResultsLabel = "Running..."; await Task.Run( () => { @@ -45,27 +74,23 @@ public partial class MainWindowViewModel : ObservableObject ); foreach (var result in results) OperationResults.Add(result); - ResultsLabel = $"{results.Count} Projects in folder missing from solution"; + SetCommandSuccessState($"{results.Count} Projects in folder missing from solution"); }, token ); } catch (Exception e) { - ResultsLabel = "Failed to compare solution and csharp projects"; - OperationResults?.Add(e.Message); - OperationResults?.Add(e.ToString()); + SetCommandFailureState("Failed to compare solution and csharp projects", e); } } [RelayCommand] private async Task FormatCsProjFile(CancellationToken token) { - OperationResults.Clear(); - ResultsLabel = string.Empty; + SetBeginCommandState(); try { - ResultsLabel = "Running..."; await Task.Run( () => { @@ -73,24 +98,20 @@ public partial class MainWindowViewModel : ObservableObject }, token ); - ResultsLabel = "Successfully formatted csproj file"; + SetCommandSuccessState("Successfully formatted csproj file"); } catch (Exception e) { - ResultsLabel = "Failed to format csproj file"; - OperationResults?.Add(e.Message); - OperationResults?.Add(e.ToString()); + SetCommandFailureState("Failed to format csproj file", e); } } [RelayCommand] private async Task FormatAllCsprojFilesInSolutionFile(CancellationToken token) { - OperationResults.Clear(); - ResultsLabel = string.Empty; + SetBeginCommandState(); try { - ResultsLabel = "Running..."; await Task.Run( () => { @@ -103,23 +124,20 @@ public partial class MainWindowViewModel : ObservableObject }, token ); - ResultsLabel = "Successfully formatted all csproj files in solution file"; + SetCommandSuccessState("Successfully formatted all csproj files in solution file"); } catch (Exception e) { - ResultsLabel = "Failed to format all csproj files in solution file"; - OperationResults?.Add(e.Message); - OperationResults?.Add(e.ToString()); + SetCommandFailureState("Failed to format all csproj files in solution file", e); } } [RelayCommand] private async Task FormatAllCsprojFilesInSolutionFolder(CancellationToken token) { - OperationResults.Clear(); + SetBeginCommandState(); try { - ResultsLabel = "Running..."; await Task.Run( () => { @@ -131,76 +149,64 @@ public partial class MainWindowViewModel : ObservableObject }, token ); - ResultsLabel = "Successfully formatted all csproj files in folder"; + SetCommandSuccessState("Successfully formatted all csproj files in folder"); } catch (Exception e) { - ResultsLabel = "Failed to format all csproj files in solution folder"; - OperationResults?.Add(e.Message); - OperationResults?.Add(e.ToString()); + SetCommandFailureState("Failed to format all csproj files in folder", e); } } [RelayCommand] private async Task CheckForMissingImplicitUsingsInSolutionFile(CancellationToken token) { - OperationResults.Clear(); - ResultsLabel = string.Empty; + SetBeginCommandState(); try { - ResultsLabel = "Running..."; await Task.Run( () => { var results = ImplicitUsings.FindCSharpProjectsMissingImplicitUsings(SolutionFilePath); results.ForEach(s => OperationResults.Add(s)); - ResultsLabel = $"{results.Count} Projects missing ImplicitUsings"; + SetCommandSuccessState($"{results.Count} Projects missing ImplicitUsings"); }, token ); } catch (Exception e) { - ResultsLabel = "Failed to check for missing implicit usings in solution file"; - OperationResults?.Add(e.Message); - OperationResults?.Add(e.ToString()); + SetCommandFailureState("Failed to check for missing implicit usings in solution file", e); } } [RelayCommand] private async Task CheckForMissingTreatWarningsAsErrorsInSolutionFile(CancellationToken token) { - OperationResults.Clear(); - ResultsLabel = string.Empty; + SetBeginCommandState(); try { - ResultsLabel = "Running..."; await Task.Run( () => { var results = WarningsAsErrors.FindCSharpProjectsMissingTreatWarningsAsErrors(SolutionFilePath); results.ForEach(s => OperationResults.Add(s)); - ResultsLabel = $"{results.Count} Projects missing TreatWarningsAsErrors"; + SetCommandSuccessState($"{results.Count} Projects missing TreatWarningsAsErrors"); }, token ); } catch (Exception e) { - ResultsLabel = "Error"; - OperationResults?.Add(e.Message); - OperationResults?.Add(e.ToString()); + SetCommandFailureState("Failed to check for missing treat warnings as errors in solution file", e); } } [RelayCommand] private async Task DeleteBinAndObjFoldersInFolder(CancellationToken token) { - OperationResults.Clear(); - ResultsLabel = string.Empty; + SetBeginCommandState(); try { - ResultsLabel = "Running..."; await Task.Run( () => { @@ -208,24 +214,20 @@ public partial class MainWindowViewModel : ObservableObject }, token ); - ResultsLabel = "Successfully deleted bin and obj folders"; + SetCommandSuccessState("Successfully deleted bin and obj folders"); } catch (Exception e) { - ResultsLabel = "Failed to delete bin and obj folders"; - OperationResults?.Add(e.Message); - OperationResults?.Add(e.ToString()); + SetCommandFailureState("Failed to delete bin and obj folders", e); } } [RelayCommand] private async Task UpdateAllProjectsToNet80(CancellationToken token) { - OperationResults.Clear(); - ResultsLabel = string.Empty; + SetBeginCommandState(); try { - ResultsLabel = "Running..."; await Task.Run( async () => { @@ -233,24 +235,20 @@ public partial class MainWindowViewModel : ObservableObject }, token ); - ResultsLabel = "Successfully updated all projects in solution to .NET 8"; + SetCommandSuccessState("Successfully updated all projects in solution to .NET 8"); } catch (Exception e) { - ResultsLabel = "Failed to update all projects in solution to .NET 8"; - OperationResults?.Add(e.Message); - OperationResults?.Add(e.ToString()); + SetCommandFailureState("Failed to update all projects in solution to .NET 8", e); } } [RelayCommand] private async Task UpdateProjectToNet80(CancellationToken token) { - OperationResults.Clear(); - ResultsLabel = string.Empty; + SetBeginCommandState(); try { - ResultsLabel = "Running..."; await Task.Run( async () => { @@ -258,12 +256,11 @@ public partial class MainWindowViewModel : ObservableObject }, token ); - ResultsLabel = "Successfully updated project to .NET 8"; + SetCommandSuccessState("Successfully updated project to .NET 8"); } catch (Exception e) { - ResultsLabel = "Failed to update project to .NET 8"; - OperationResults?.Add(e.Message); + SetCommandFailureState("Failed to update project to .NET 8", e); } } @@ -376,9 +373,4 @@ public partial class MainWindowViewModel : ObservableObject // ignored } } - - public MainWindowViewModel() - { - LoadSavedState().ConfigureAwait(false); - } } diff --git a/DotNetSolutionTools.App/Views/MainWindow.axaml b/DotNetSolutionTools.App/Views/MainWindow.axaml index d5b0699..1e8ef57 100644 --- a/DotNetSolutionTools.App/Views/MainWindow.axaml +++ b/DotNetSolutionTools.App/Views/MainWindow.axaml @@ -117,7 +117,7 @@ - +