internal FileIssueWrapperInput(IIssueFilingSource vm, Guid ecId, Action switchToServerLogin, Func <IssueInformation> issueInformationProvider, FileBugRequestSource requestSource) { VM = vm ?? throw new ArgumentNullException(nameof(vm)); EcId = ecId; SwitchToServerLogin = switchToServerLogin ?? throw new ArgumentNullException(nameof(switchToServerLogin)); IssueInformationProvider = issueInformationProvider ?? throw new ArgumentNullException(nameof(issueInformationProvider)); RequestSource = requestSource; }
/// <summary> /// Handles control-related issue filing /// </summary> internal static void FileIssueFromControl(FileIssueWrapperInput input) { IIssueFilingSource vm = input.VM; if (vm.IssueLink != null) { // Bug already filed, open it in a new window try { System.Diagnostics.Process.Start(vm.IssueLink.OriginalString); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) { ex.ReportException(); // Happens when bug is deleted, message describes that work item doesn't exist / possible permission issue MessageDialog.Show(ex.InnerException?.Message); vm.IssueDisplayText = null; } #pragma warning restore CA1031 // Do not catch general exception types } else { // File a new bug var telemetryEvent = TelemetryEventFactory.ForIssueFilingRequest(input.RequestSource); Logger.PublishTelemetryEvent(telemetryEvent); if (IssueReporter.IsConnected) { IssueInformation issueInformation = null; try { issueInformation = input.IssueInformationProvider(); FileIssueAction.AttachIssueData(issueInformation, input.EcId, vm.Element.BoundingRectangle, vm.Element.UniqueId); IIssueResult issueResult = FileIssueAction.FileIssueAsync(issueInformation); if (issueResult != null) { vm.IssueDisplayText = issueResult.DisplayText; vm.IssueLink = issueResult.IssueLink; } } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) { ex.ReportException(); } #pragma warning restore CA1031 // Do not catch general exception types finally { if (issueInformation != null && File.Exists(issueInformation.TestFileName)) { File.Delete(issueInformation.TestFileName); } } } else { bool?accepted = MessageDialog.Show(Properties.Resources.FileIssuesChooseLocation); if (accepted.HasValue && accepted.Value) { input.SwitchToServerLogin(); } } } }