Ejemplo n.º 1
0
 internal void Cancel(WikiPageModel model)
 {
     if (_editingSessions.FirstOrDefault(s => s.PageModel.Equals(model)) is EditingSession
         session)
     {
         _editingSessions.Remove(session);
     }
 }
Ejemplo n.º 2
0
 internal void LockForEditing(WikiPageModel pageModel, string username)
 {
     if (!_editingSessions.Any(s =>
                               s.PageModel.Equals(pageModel) && s.UserName.Equals(username)))
     {
         _editingSessions.Add(new EditingSession(pageModel, username));
     }
 }
Ejemplo n.º 3
0
        private WikiPageModel BuildPageModel(string filePath, string?folder)
        {
            var title    = CreatePageTitle(Path.GetFileNameWithoutExtension(filePath));
            var pageLink = CreatePageLink(title);
            var saved    = _loadedPages.FirstOrDefault(p => p.PageLink == pageLink);

            if (saved != null)
            {
                return(saved);
            }

            var content    = File.ReadAllText(filePath);
            var titleRgx   = new Regex("<!-- TITLE: (.*) -->");
            var titleMatch = titleRgx.Match(content);

            if (titleMatch.Success)
            {
                title   = titleMatch.Result("$1");
                content = titleRgx.Replace(content, "");
            }

            var subTitleRgx = new Regex("<!-- SUBTITLE: (.*) -->");
            var subTitle    = "A Special Page";
            var subMatch    = subTitleRgx.Match(content);

            if (subMatch.Success)
            {
                subTitle = subMatch.Result("$1");
                content  = subTitleRgx.Replace(content, "");
            }

            content = content.Trim();

            var model = new WikiPageModel
            {
                Content  = content,
                Title    = title,
                SubTitle = subTitle,
                PageLink = pageLink,
                Folder   = folder
            };

            _loadedPages.Add(model);

            return(model);
        }
Ejemplo n.º 4
0
        public bool SavePage(WikiPageModel model, string?userName)
        {
            try
            {
                if (model.Title == null)
                {
                    model.Title = "Unnamed";
                }

                if (model.PageLink != CreatePageLink(model.Title))
                {
                    DeletePage(model.PageLink, userName, model.Folder);
                    model.PageLink = CreatePageLink(model.Title);
                }

                var file     = BuildMarkdownFileContent(model);
                var savePath = GetFilePath(model.PageLink, model.Folder);

                File.WriteAllText(savePath, file);
                Task.Run(async() => { await _gitManager.Commit(model.PageLink, userName); });
                if (_editingSessions.FirstOrDefault(s => s.PageModel.Equals(model)) is
                    EditingSession session)
                {
                    _editingSessions.Remove(session);
                }

                if (_loadedPages.Contains(model))
                {
                    _loadedPages.Remove(model);
                }

                _loadedPages.Add(model);

                return(true);
            }
            catch (Exception ex)
            {
                LogException(ex);
                return(false);
            }
        }
Ejemplo n.º 5
0
        private string BuildMarkdownFileContent(WikiPageModel model)
        {
            return($@"<!-- TITLE: {model.Title} -->
<!-- SUBTITLE: {model.SubTitle} -->
{model.Content}");
        }
Ejemplo n.º 6
0
 internal bool CanEdit(WikiPageModel pageModel, string username)
 {
     return(!_editingSessions.Any(s =>
                                  s.PageModel.Equals(pageModel) && !s.UserName.Equals(username)));
 }
Ejemplo n.º 7
0
 public EditingSession(WikiPageModel model, string username)
 {
     PageModel      = model;
     UserName       = username;
     CheckedOutTime = DateTime.Now;
 }