From 4af1b27e115264cdc90c7eb1b1dcbfb2cc84da88 Mon Sep 17 00:00:00 2001 From: MishaTY <46088515+MishaTY@users.noreply.github.com> Date: Tue, 5 Jan 2021 11:21:29 -0500 Subject: [PATCH] Show message on what exactly is missing Show message on what exactly is missing --- .../Dependencies/InnoSetupDependency.cs | 5 +++ .../Dependencies/ReposDependency.cs | 21 +++++++++++ .../Dependencies/VisualStudioDependency.cs | 4 +++ .../VisualStudioWorkloadsDependency.cs | 36 +++++++++++++++++++ source/Cosmos.Build.Builder/IDependency.cs | 1 + .../ViewModels/MainWindowViewModel.cs | 4 +-- 6 files changed, 69 insertions(+), 2 deletions(-) diff --git a/source/Cosmos.Build.Builder/Dependencies/InnoSetupDependency.cs b/source/Cosmos.Build.Builder/Dependencies/InnoSetupDependency.cs index c9d70e21c..3580085af 100644 --- a/source/Cosmos.Build.Builder/Dependencies/InnoSetupDependency.cs +++ b/source/Cosmos.Build.Builder/Dependencies/InnoSetupDependency.cs @@ -16,6 +16,11 @@ namespace Cosmos.Build.Builder.Dependencies public string Name => "Inno Setup"; public bool ShouldInstallByDefault => true; + public string OtherDependencysThatAreMissing + { + get { return Name; } + } + private readonly IInnoSetupService _innoSetupService; public InnoSetupDependency(IInnoSetupService innoSetupService) diff --git a/source/Cosmos.Build.Builder/Dependencies/ReposDependency.cs b/source/Cosmos.Build.Builder/Dependencies/ReposDependency.cs index f80aabdd3..043818705 100644 --- a/source/Cosmos.Build.Builder/Dependencies/ReposDependency.cs +++ b/source/Cosmos.Build.Builder/Dependencies/ReposDependency.cs @@ -15,6 +15,27 @@ namespace Cosmos.Build.Builder.Dependencies public string Name => "Repos: IL2CPU, XSharp and Common"; public bool ShouldInstallByDefault => true; + public string OtherDependencysThatAreMissing + { + get + { + string result = ""; + if (!Directory.Exists(Path.GetFullPath(Path.Combine(_cosmosDir, "..", "IL2CPU")))) + { + result += "IL2CPU Repo, "; + } + if (!Directory.Exists(Path.GetFullPath(Path.Combine(_cosmosDir, "..", "XSharp")))) + { + result += "XSharp Repo, "; + } + if (!Directory.Exists(Path.GetFullPath(Path.Combine(_cosmosDir, "..", "Common")))) + { + result += "Common Repo, "; + } + return result; + } + } + private readonly string _cosmosDir; private readonly IEnumerable _repos; diff --git a/source/Cosmos.Build.Builder/Dependencies/VisualStudioDependency.cs b/source/Cosmos.Build.Builder/Dependencies/VisualStudioDependency.cs index 7e6df6d11..f9f6304b7 100644 --- a/source/Cosmos.Build.Builder/Dependencies/VisualStudioDependency.cs +++ b/source/Cosmos.Build.Builder/Dependencies/VisualStudioDependency.cs @@ -11,6 +11,10 @@ namespace Cosmos.Build.Builder.Dependencies private static readonly Version MinimumVsVersion = new Version(15, 9); public bool ShouldInstallByDefault => true; public string Name => $"Visual Studio {MinimumVsVersion.Major}.{MinimumVsVersion.Minor}+"; + public string OtherDependencysThatAreMissing + { + get { return Name+"+"; } + } private readonly ISetupInstance2 _visualStudioInstance; diff --git a/source/Cosmos.Build.Builder/Dependencies/VisualStudioWorkloadsDependency.cs b/source/Cosmos.Build.Builder/Dependencies/VisualStudioWorkloadsDependency.cs index dd9423d86..1b1fb439b 100644 --- a/source/Cosmos.Build.Builder/Dependencies/VisualStudioWorkloadsDependency.cs +++ b/source/Cosmos.Build.Builder/Dependencies/VisualStudioWorkloadsDependency.cs @@ -20,6 +20,30 @@ namespace Cosmos.Build.Builder.Dependencies public bool ShouldInstallByDefault => false; public string Name => "Visual Studio Workloads"; + public string OtherDependencysThatAreMissing + { + get + { + var missingPackages = ((string[])RequiredPackages.Clone()).ToList(); + foreach (var item in RequiredPackages) + { + if (IsPackageInstalled(item)) + { + missingPackages.Remove(item); + } + } + + //Add the missing packages together + string missingPackages_proper = ""; + foreach (var item in missingPackages) + { + missingPackages_proper += GetProperName(item) + ", "; + } + + return missingPackages_proper; + } + } + private readonly ISetupInstance2 _visualStudioInstance; public VisualStudioWorkloadsDependency(ISetupInstance2 visualStudioInstance) @@ -32,7 +56,19 @@ namespace Cosmos.Build.Builder.Dependencies var installedPackages = _visualStudioInstance.GetPackages(); return Task.FromResult(RequiredPackages.All(p => IsPackageInstalled(p))); } + private string GetProperName(string packageId) + { + if (packageId == NetCoreToolsWorkload) + { + return ".NET Core cross-platform development"; + } + else if (packageId == VisualStudioExtensionsWorkload) + { + return "Visual Studio Extension development"; + } + return "Unknown Workload: " + packageId; + } public async Task InstallAsync(CancellationToken cancellationToken) { var vsInstallerPath = Environment.ExpandEnvironmentVariables( diff --git a/source/Cosmos.Build.Builder/IDependency.cs b/source/Cosmos.Build.Builder/IDependency.cs index f53867fb1..3d6549b84 100644 --- a/source/Cosmos.Build.Builder/IDependency.cs +++ b/source/Cosmos.Build.Builder/IDependency.cs @@ -8,6 +8,7 @@ namespace Cosmos.Build.Builder string Name { get; } bool ShouldInstallByDefault { get; } + string OtherDependencysThatAreMissing { get; } Task IsInstalledAsync(CancellationToken cancellationToken); Task InstallAsync(CancellationToken cancellationToken); } diff --git a/source/Cosmos.Build.Builder/ViewModels/MainWindowViewModel.cs b/source/Cosmos.Build.Builder/ViewModels/MainWindowViewModel.cs index a1458532b..fd4d6fd82 100644 --- a/source/Cosmos.Build.Builder/ViewModels/MainWindowViewModel.cs +++ b/source/Cosmos.Build.Builder/ViewModels/MainWindowViewModel.cs @@ -107,7 +107,7 @@ namespace Cosmos.Build.Builder.ViewModels } else { - _logger.LogMessage($"{dependency.Name} not found."); + _logger.LogMessage($"{dependency.Name} not found. Install {dependency.OtherDependencysThatAreMissing}"); if (dependency.ShouldInstallByDefault) { @@ -123,7 +123,7 @@ namespace Cosmos.Build.Builder.ViewModels } else { - MessageBox.Show($"{dependency.Name} is not installed. Please install {dependency.Name}"); + MessageBox.Show($"{dependency.Name} is not installed. Please install {dependency.OtherDependencysThatAreMissing}"); _logger.SetError(); _logger.NewSection("Error"); _logger.LogMessage($"{dependency.Name} not found.");