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())); } }
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); }
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); }
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); }
/// <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); }
static IPullRequestSessionManager CreateSessionManager(DiffSide side) { var file = CreateSessionFile(); return(CreateSessionManager(file, side)); }