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;
                }
            }
        }
Ejemplo n.º 3
0
        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));
                }
            }
        }