Beispiel #1
0
        public override async Task HandleAsync(AddArticleCommitAction action, IDispatcher dispatcher)
        {
            var article = await _articleService.GetArticle(action.ArticleId, action.PrevCommitId);

            var prevCommit = article?.Commits?.FirstOrDefault(c => c.Id == action.PrevCommitId);

            if (prevCommit != null)
            {
                var oldContent = article.ArticleInfo.Content;
                var diffResult = Differ.Instance.CreateWordDiffs(oldContent, action.Content, false, false, new[] { ' ' });
                var diffWords  = new List <string>();
                foreach (var diff in diffResult.DiffBlocks)
                {
                    if (diff.InsertCountB != 0)
                    {
                        diffWords.AddRange(diffResult.PiecesNew.Skip(diff.InsertStartB).Take(diff.InsertCountB));
                    }
                }
                //var commit = new ArticleCommitVM
                //{
                //    Id = Guid.NewGuid(),
                //    Title = action.Title,
                //    Description = action.Description,
                //    Type = action.CommitType,
                //    CreatedAt = DateTime.Now,
                //    CreatedBy = "artbiel",
                //    CommitState = CommitState.Unsent,
                //    DiffBlocks = diffResult.DiffBlocks.ToArticleDiffBlocks(),
                //    DiffWords = diffWords.ToArray(),
                //    PrevCommitId = action.PrevCommitId
                //};
                //article.Commits.Add(commit);
                //dispatcher.Dispatch(new SetArticleCommitsAction(article.Commits, commit));
            }
            var commit = new ArticleCommitMainInfoVM
            {
                Id           = Guid.NewGuid(),
                Title        = action.Title,
                Description  = action.Description,
                Type         = action.CommitType,
                CreatedAt    = DateTime.Now,
                CreatedBy    = "artbiel",
                CommitState  = CommitState.Unsent,
                PrevCommitId = action.PrevCommitId,
                Content      = action.Content
            };
            await _articleService.AddCommit(action.ArticleId, commit);

            _toastService.ShowToast(MBToastLevel.Success, "Commit was successfully added!");
        }