Ejemplo n.º 1
0
        async Task Initialize()
        {
            needsInitialize = false;

            var bufferInfo = sessionManager.GetTextBufferInfo(buffer);

            if (bufferInfo != null)
            {
                session      = bufferInfo.Session;
                relativePath = bufferInfo.RelativePath;
                file         = await session.GetFile(relativePath);

                fileSubscription = file.LinesChanged.Subscribe(LinesChanged);
                side             = bufferInfo.Side ?? DiffSide.Right;
                NotifyTagsChanged();
            }
            else
            {
                await InitializeLiveFile();

                sessionManagerSubscription = sessionManager
                                             .WhenAnyValue(x => x.CurrentSession)
                                             .Skip(1)
                                             .Subscribe(_ => ForgetWithLogging(InitializeLiveFile()));
            }
        }
Ejemplo n.º 2
0
        public async Task Initialize()
        {
            var buffer = peekSession.TextView.TextBuffer;
            var info   = sessionManager.GetTextBufferInfo(buffer);

            if (info != null)
            {
                relativePath = info.RelativePath;
                side         = info.Side ?? DiffSide.Right;
                file         = await info.Session.GetFile(relativePath);

                session = info.Session;
                await UpdateThread();
            }
            else
            {
                relativePath = sessionManager.GetRelativePath(buffer);
                file         = await sessionManager.GetLiveFile(relativePath, peekSession.TextView, buffer);
                await SessionChanged(sessionManager.CurrentSession);

                sessionSubscription = sessionManager.WhenAnyValue(x => x.CurrentSession)
                                      .Skip(1)
                                      .Subscribe(x => SessionChanged(x).Forget());
            }

            fileSubscription?.Dispose();
            fileSubscription = file.LinesChanged.Subscribe(LinesChanged);
        }
Ejemplo n.º 3
0
        Tuple <ITextSnapshotLine, ITrackingPoint> GetLineAndTrackingPoint(
            ITextView textView,
            DiffSide side,
            int lineNumber)
        {
            var diffModel = (textView as IWpfTextView)?.TextViewModel as IDifferenceTextViewModel;
            var snapshot  = textView.TextSnapshot;

            if (diffModel?.ViewType == DifferenceViewType.InlineView)
            {
                snapshot = side == DiffSide.Left ?
                           diffModel.Viewer.DifferenceBuffer.LeftBuffer.CurrentSnapshot :
                           diffModel.Viewer.DifferenceBuffer.RightBuffer.CurrentSnapshot;
            }

            var line          = snapshot.GetLineFromLineNumber(lineNumber);
            var trackingPoint = snapshot.CreateTrackingPoint(line.Start.Position, PointTrackingMode.Positive);

            ExpandCollapsedRegions(textView, line.Extent);
            peekBroker.TriggerPeekSession(textView, trackingPoint, relationship);

            usageTracker.IncrementCounter(x => x.NumberOfPRReviewDiffViewInlineCommentOpen).Forget();

            return(Tuple.Create(line, trackingPoint));
        }
            static IPullRequestSessionManager CreateSessionManager(
                IPullRequestSessionFile file,
                DiffSide side)
            {
                var session = Substitute.For <IPullRequestSession>();

                session.GetFile("file.cs").Returns(file);

                var info   = new PullRequestTextBufferInfo(session, "file.cs", side);
                var result = Substitute.For <IPullRequestSessionManager>();

                result.GetTextBufferInfo(null).ReturnsForAnyArgs(info);
                return(result);
            }
Ejemplo n.º 5
0
            static IPullRequestSessionManager CreateSessionManager(
                IPullRequestSessionFile file,
                DiffSide side,
                string bufferInfoCommitSha = "HEAD")
            {
                var session = Substitute.For <IPullRequestSession>();

                session.GetFile("file.cs", bufferInfoCommitSha).Returns(file);

                var info   = new PullRequestTextBufferInfo(session, "file.cs", bufferInfoCommitSha, side);
                var result = Substitute.For <IPullRequestSessionManager>();

                result.CurrentSession.Returns(session);
                result.GetTextBufferInfo(null).ReturnsForAnyArgs(info);
                return(result);
            }
Ejemplo n.º 6
0
        /// <inheritdoc/>
        public ITrackingPoint Show(ITextView textView, DiffSide side, int lineNumber)
        {
            var lineAndtrackingPoint = GetLineAndTrackingPoint(textView, side, lineNumber);
            var line          = lineAndtrackingPoint.Item1;
            var trackingPoint = lineAndtrackingPoint.Item2;
            var options       = new PeekSessionCreationOptions(
                textView,
                relationship,
                trackingPoint,
                defaultHeight: 0);

            ExpandCollapsedRegions(textView, line.Extent);

            var session = peekBroker.TriggerPeekSession(options);
            var item    = session.PeekableItems.OfType <IClosable>().FirstOrDefault();

            item?.Closed.Take(1).Subscribe(_ => session.Dismiss());

            return(trackingPoint);
        }
Ejemplo n.º 7
0
            static IPullRequestSessionManager CreateSessionManager(DiffSide side)
            {
                var file = CreateSessionFile();

                return(CreateSessionManager(file, side));
            }