diff --git a/src/Microsoft.Fx.Portability/ApiPortClient.cs b/src/Microsoft.Fx.Portability/ApiPortClient.cs index 1efefe81b..1aaa4d577 100644 --- a/src/Microsoft.Fx.Portability/ApiPortClient.cs +++ b/src/Microsoft.Fx.Portability/ApiPortClient.cs @@ -95,29 +95,33 @@ private AnalyzeRequest GenerateRequest(IApiPortOptions options, IDependencyInfo /// Set of APIs/assemblies that are not portable/missing. private async Task GetResultFromService(AnalyzeRequest request, IDependencyInfo dependencyFinder) { - _progressReport.StartTask(LocalizedStrings.SendingDataToService); - var fullResponse = await _apiPortService.SendAnalysisAsync(request); - _progressReport.FinishTask(); + var fullResponse = await RetrieveResultAsync(request); CheckEndpointStatus(fullResponse.Headers.Status); - _progressReport.StartParallelTask(LocalizedStrings.ComputingReport, LocalizedStrings.ProcessedItems); - - var response = fullResponse.Response; - - var result = _reportGenerator.ComputeReport( - response.Targets, - response.SubmissionId, - dependencyFinder?.Dependencies, - response.MissingDependencies, - dependencyFinder?.UnresolvedAssemblies, - response.UnresolvedUserAssemblies, - dependencyFinder?.AssembliesWithErrors - ); - - _progressReport.FinishTask(); + using (_progressReport.StartParallelTask(LocalizedStrings.ComputingReport, LocalizedStrings.ProcessedItems)) + { + var response = fullResponse.Response; + var hasDependencyFinder = dependencyFinder != null; + + return _reportGenerator.ComputeReport( + response.Targets, + response.SubmissionId, + hasDependencyFinder ? dependencyFinder.Dependencies : null, //allDependencies + response.MissingDependencies, + hasDependencyFinder ? dependencyFinder.UnresolvedAssemblies : null, //unresolvedAssemblies + response.UnresolvedUserAssemblies, + hasDependencyFinder ? dependencyFinder.AssembliesWithErrors : null //assembliesWithErrors + ); + } + } - return result; + private async Task> RetrieveResultAsync(AnalyzeRequest request) + { + using (_progressReport.StartTask(LocalizedStrings.SendingDataToService)) + { + return await _apiPortService.SendAnalysisAsync(request); + } } /// @@ -126,13 +130,14 @@ private async Task GetResultFromService(AnalyzeRequest request, /// An array of bytes corresponding to the report. private async Task GetResultFromService(AnalyzeRequest request, ResultFormat format) { - _progressReport.StartTask(LocalizedStrings.SendingDataToService); - var response = await _apiPortService.SendAnalysisAsync(request, format); - _progressReport.FinishTask(); + using (_progressReport.StartTask(LocalizedStrings.SendingDataToService)) + { + var response = await _apiPortService.SendAnalysisAsync(request, format); - CheckEndpointStatus(response.Headers.Status); + CheckEndpointStatus(response.Headers.Status); - return response.Response; + return response.Response; + } } /// @@ -149,15 +154,14 @@ private void CheckEndpointStatus(EndpointStatus status) public async Task> ListTargets() { - _progressReport.StartTask(LocalizedStrings.RetrievingTargets); - - var targets = await _apiPortService.GetTargetsAsync(); - - _progressReport.FinishTask(); + using (_progressReport.StartTask(LocalizedStrings.RetrievingTargets)) + { + var targets = await _apiPortService.GetTargetsAsync(); - CheckEndpointStatus(targets.Headers.Status); + CheckEndpointStatus(targets.Headers.Status); - return targets.Response; + return targets.Response; + } } } } diff --git a/src/Microsoft.Fx.Portability/IProgressReporter.cs b/src/Microsoft.Fx.Portability/IProgressReporter.cs index 465cf7f61..6c09f0b2e 100644 --- a/src/Microsoft.Fx.Portability/IProgressReporter.cs +++ b/src/Microsoft.Fx.Portability/IProgressReporter.cs @@ -7,12 +7,9 @@ namespace Microsoft.Fx.Portability { public interface IProgressReporter { - void AbortTask(); - void FinishTask(); - void ReportIssue(string issueFormat, params object[] items); - void ReportUnitComplete(); - void StartParallelTask(string taskName, string details); - void StartTask(string taskName); + void ReportIssue(string issue); + IProgressTask StartParallelTask(string taskName, string details); + IProgressTask StartTask(string taskName); IReadOnlyCollection Issues { get; } } } \ No newline at end of file diff --git a/src/Microsoft.Fx.Portability/IProgressTask.cs b/src/Microsoft.Fx.Portability/IProgressTask.cs new file mode 100644 index 000000000..f8900945a --- /dev/null +++ b/src/Microsoft.Fx.Portability/IProgressTask.cs @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System; + +namespace Microsoft.Fx.Portability +{ + public interface IProgressTask : IDisposable + { + void ReportUnitComplete(); + void Abort(); + } +} \ No newline at end of file diff --git a/src/Microsoft.Fx.Portability/Reporting/ReportFileWriter.cs b/src/Microsoft.Fx.Portability/Reporting/ReportFileWriter.cs index 95d68a209..5f9ff9a02 100644 --- a/src/Microsoft.Fx.Portability/Reporting/ReportFileWriter.cs +++ b/src/Microsoft.Fx.Portability/Reporting/ReportFileWriter.cs @@ -84,7 +84,7 @@ private string GetFileName(string directory, string fileName, ResultFormat forma if (!string.IsNullOrEmpty(originalExtension) && !originalExtension.Equals(extension, StringComparison.CurrentCultureIgnoreCase)) { - _progressReporter.ReportIssue(LocalizedStrings.ChangingFileExtension, fileName, originalExtension, extension); + _progressReporter.ReportIssue(string.Format(LocalizedStrings.ChangingFileExtension, fileName, originalExtension, extension)); } var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); @@ -99,7 +99,7 @@ private string GetFileName(string directory, string fileName, ResultFormat forma // This file exists already but since we don't care about uniqueness, we'll overwrite it. if (!isUnique) { - _progressReporter.ReportIssue(LocalizedStrings.OverwriteFile, uniqueName); + _progressReporter.ReportIssue(string.Format(LocalizedStrings.OverwriteFile, uniqueName)); return uniqueName; }