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);
            }
        }
示例#2
0
        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
                                                                        ));
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
            }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
        /// <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);
            }
        }