public DiffCommentThreadViewModel( string diffHunk, int lineNumber, string path, InlineCommentThreadViewModel comments) { DiffHunk = diffHunk; LineNumber = lineNumber; Path = path; Comments = comments; }
async Task UpdateThread() { var placeholderBody = await GetPlaceholderBodyToPreserve(); Thread = null; threadSubscription?.Dispose(); if (file == null) { return; } var lineAndLeftBuffer = peekService.GetLineNumber(peekSession, triggerPoint); var lineNumber = lineAndLeftBuffer.Item1; var leftBuffer = lineAndLeftBuffer.Item2; var thread = file.InlineCommentThreads.FirstOrDefault(x => x.LineNumber == lineNumber && ((leftBuffer && x.DiffLineType == DiffChangeType.Delete) || (!leftBuffer && x.DiffLineType != DiffChangeType.Delete))); var apiClient = await CreateApiClient(session.LocalRepository); if (thread != null) { Thread = new InlineCommentThreadViewModel(apiClient, session, thread.Comments); } else { var newThread = new NewInlineCommentThreadViewModel(apiClient, session, file, lineNumber, leftBuffer); threadSubscription = newThread.Finished.Subscribe(_ => UpdateThread().Forget()); Thread = newThread; } if (!string.IsNullOrWhiteSpace(placeholderBody)) { var placeholder = Thread.Comments.LastOrDefault(); if (placeholder?.EditState == CommentEditState.Placeholder) { await placeholder.BeginEdit.ExecuteAsync(null); placeholder.Body = placeholderBody; } } }
public async Task Initialize() { var files = await session.GetAllFiles(); foreach (var file in files) { foreach (var thread in file.InlineCommentThreads) { var threadViewModel = new InlineCommentThreadViewModel( session, thread.Comments); FileComments.Add(new DiffCommentThreadViewModel( ToString(thread.DiffMatch), thread.LineNumber, file.RelativePath, threadViewModel)); } } }