internal void Cancel(WikiPageModel model) { if (_editingSessions.FirstOrDefault(s => s.PageModel.Equals(model)) is EditingSession session) { _editingSessions.Remove(session); } }
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)); } }
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); }
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); } }
private string BuildMarkdownFileContent(WikiPageModel model) { return($@"<!-- TITLE: {model.Title} --> <!-- SUBTITLE: {model.SubTitle} --> {model.Content}"); }
internal bool CanEdit(WikiPageModel pageModel, string username) { return(!_editingSessions.Any(s => s.PageModel.Equals(pageModel) && !s.UserName.Equals(username))); }
public EditingSession(WikiPageModel model, string username) { PageModel = model; UserName = username; CheckedOutTime = DateTime.Now; }