async Task DoNavigateToEditor(IPullRequestFileNode file) { try { if (!ViewModel.IsCheckedOut) { ShowInfoMessage("Checkout PR branch before opening file in solution."); return; } var fullPath = ViewModel.GetLocalFilePath(file); var activeView = NavigationService.FindActiveView(); if (activeView == null) { ShowErrorInStatusBar("Couldn't find active view"); return; } NavigationService.NavigateToEquivalentPosition(activeView, fullPath); await UsageTracker.IncrementCounter(x => x.NumberOfPRDetailsNavigateToEditor); } catch (Exception e) { ShowErrorInStatusBar("Error navigating to editor", e); } }
public async Task ShouldWriteUpdatedData() { var model = UsageModel.Create(Guid.NewGuid()); //model.Dimensions.AppVersion = AssemblyVersionInformation.Version; model.Dimensions.Lang = CultureInfo.InstalledUICulture.IetfLanguageTag; model.Dimensions.CurrentLang = CultureInfo.CurrentCulture.IetfLanguageTag; model.Measures.NumberOfClones = 1; var service = CreateUsageService(model); var target = new UsageTracker( CreateServiceProvider(), service, CreatePackageSettings(), new JoinableTaskContext(), vsTelemetry: false); await target.IncrementCounter(x => x.NumberOfClones); await service.Received(1).WriteLocalData(Arg.Is <UsageData>(data => data.Reports.Count == 1 && data.Reports[0].Dimensions.Date.Date == DateTimeOffset.Now.Date && //data.Reports[0].Dimensions.AppVersion == AssemblyVersionInformation.Version && data.Reports[0].Dimensions.Lang == CultureInfo.InstalledUICulture.IetfLanguageTag && data.Reports[0].Dimensions.CurrentLang == CultureInfo.CurrentCulture.IetfLanguageTag && data.Reports[0].Measures.NumberOfClones == 2 )); }
public async void Activate(object data = null) { var isgithub = await IsGitHubRepo(); if (!isgithub) { return; } var link = await GenerateLink(LinkType.Blob); if (link == null) { return; } try { Clipboard.SetText(link); var ns = ServiceProvider.TryGetService <IStatusBarNotificationService>(); ns?.ShowMessage(Resources.LinkCopiedToClipboardMessage); await UsageTracker.IncrementCounter(x => x.NumberOfLinkToGitHub); } catch { var ns = ServiceProvider.TryGetService <IStatusBarNotificationService>(); ns?.ShowMessage(Resources.Error_FailedToCopyToClipboard); } }
public async Task ShouldWriteUpdatedData() { var date = DateTimeOffset.Now; var service = CreateUsageService(new UsageModel { Dimensions = new UsageModel.DimensionsModel { AppVersion = AssemblyVersionInformation.Version, Lang = CultureInfo.InstalledUICulture.IetfLanguageTag, CurrentLang = CultureInfo.CurrentCulture.IetfLanguageTag, Date = date }, Measures = new UsageModel.MeasuresModel { NumberOfClones = 1 } }); var target = new UsageTracker( CreateServiceProvider(), service, CreatePackageSettings()); await target.IncrementCounter(x => x.NumberOfClones); await service.Received(1).WriteLocalData(Arg.Is <UsageData>(data => data.Reports.Count == 1 && data.Reports[0].Dimensions.Date.Date == DateTimeOffset.Now.Date && data.Reports[0].Dimensions.AppVersion == AssemblyVersionInformation.Version && data.Reports[0].Dimensions.Lang == CultureInfo.InstalledUICulture.IetfLanguageTag && data.Reports[0].Dimensions.CurrentLang == CultureInfo.CurrentCulture.IetfLanguageTag && data.Reports[0].Measures.NumberOfClones == 2 )); }
public async Task ShouldIncrementCounter() { var model = new UsageModel { NumberOfClones = 4 }; var target = new UsageTracker( CreateServiceProvider(), CreateUsageService(model)); await target.IncrementCounter(x => x.NumberOfClones); Assert.That(5, Is.EqualTo(model.NumberOfClones)); }
public async Task ShouldWriteUpdatedData() { var data = new UsageData { Model = new UsageModel() }; var service = CreateUsageService(data); var target = new UsageTracker( CreateServiceProvider(), service); await target.IncrementCounter(x => x.NumberOfClones); await service.Received(1).WriteLocalData(data); }
public async Task ShouldIncrementCounter() { var model = new UsageModel { NumberOfClones = 4 }; var usageService = CreateUsageService(model); var target = new UsageTracker( CreateServiceProvider(), usageService); await target.IncrementCounter(x => x.NumberOfClones); UsageData result = usageService.ReceivedCalls().First(x => x.GetMethodInfo().Name == "WriteLocalData").GetArguments()[0] as UsageData; Assert.AreEqual(5, result.Model.NumberOfClones); }
public async Task ShouldIncrementCounter() { var model = UsageModel.Create(Guid.NewGuid()); model.Measures.NumberOfClones = 4; var usageService = CreateUsageService(model); var target = new UsageTracker( CreateServiceProvider(), usageService, CreatePackageSettings()); await target.IncrementCounter(x => x.NumberOfClones); UsageData result = usageService.ReceivedCalls().First(x => x.GetMethodInfo().Name == "WriteLocalData").GetArguments()[0] as UsageData; Assert.AreEqual(5, result.Reports[0].Measures.NumberOfClones); }
/// <summary> /// Opens the link in the browser. /// </summary> public async override Task Execute() { var isgithub = await IsGitHubRepo(); if (!isgithub) { return; } var link = await GenerateLink(LinkType.Blob); if (link == null) { return; } var browser = ServiceProvider.TryGetService <IVisualStudioBrowser>(); browser?.OpenUrl(link.ToUri()); await UsageTracker.IncrementCounter(x => x.NumberOfOpenInGitHub); }
async Task DoOpenFile(IPullRequestFileNode file, bool workingDirectory) { try { var fullPath = ViewModel.GetLocalFilePath(file); var fileName = workingDirectory ? fullPath : await ViewModel.ExtractFile(file, true); using (workingDirectory ? null : OpenInProvisionalTab()) { var window = GitHub.VisualStudio.Services.Dte.ItemOperations.OpenFile(fileName); window.Document.ReadOnly = !workingDirectory; var buffer = GetBufferAt(fileName); if (!workingDirectory) { AddBufferTag(buffer, ViewModel.Session, fullPath, null); var textView = NavigationService.FindActiveView(); EnableNavigateToEditor(textView, file); } } if (workingDirectory) { await UsageTracker.IncrementCounter(x => x.NumberOfPRDetailsOpenFileInSolution); } else { await UsageTracker.IncrementCounter(x => x.NumberOfPRDetailsViewFile); } } catch (Exception e) { ShowErrorInStatusBar("Error opening file", e); } }
async Task DoDiffFile(IPullRequestFileNode file, bool workingDirectory) { try { var rightPath = System.IO.Path.Combine(file.DirectoryPath, file.FileName); var leftPath = file.OldPath ?? rightPath; var rightFile = workingDirectory ? ViewModel.GetLocalFilePath(file) : await ViewModel.ExtractFile(file, true); var leftFile = await ViewModel.ExtractFile(file, false); var leftLabel = $"{leftPath};{ViewModel.TargetBranchDisplayName}"; var rightLabel = workingDirectory ? rightPath : $"{rightPath};PR {ViewModel.Model.Number}"; var caption = $"Diff - {file.FileName}"; var options = __VSDIFFSERVICEOPTIONS.VSDIFFOPT_DetectBinaryFiles | __VSDIFFSERVICEOPTIONS.VSDIFFOPT_LeftFileIsTemporary; if (!workingDirectory) { options |= __VSDIFFSERVICEOPTIONS.VSDIFFOPT_RightFileIsTemporary; } IVsWindowFrame frame; using (OpenInProvisionalTab()) { var tooltip = $"{leftLabel}\nvs.\n{rightLabel}"; // Diff window will open in provisional (right hand) tab until document is touched. frame = GitHub.VisualStudio.Services.DifferenceService.OpenComparisonWindow2( leftFile, rightFile, caption, tooltip, leftLabel, rightLabel, string.Empty, string.Empty, (uint)options); } object docView; frame.GetProperty((int)__VSFPROPID.VSFPROPID_DocView, out docView); var diffViewer = ((IVsDifferenceCodeWindow)docView).DifferenceViewer; var session = ViewModel.Session; AddBufferTag(diffViewer.LeftView.TextBuffer, session, leftPath, DiffSide.Left); if (!workingDirectory) { AddBufferTag(diffViewer.RightView.TextBuffer, session, rightPath, DiffSide.Right); EnableNavigateToEditor(diffViewer.LeftView, file); EnableNavigateToEditor(diffViewer.RightView, file); EnableNavigateToEditor(diffViewer.InlineView, file); } if (workingDirectory) { await UsageTracker.IncrementCounter(x => x.NumberOfPRDetailsCompareWithSolution); } else { await UsageTracker.IncrementCounter(x => x.NumberOfPRDetailsViewChanges); } } catch (Exception e) { ShowErrorInStatusBar("Error opening file", e); } }