diff options
Diffstat (limited to 'models')
-rw-r--r-- | models/issue.go | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/models/issue.go b/models/issue.go index 13973b7d1c..052ebf90c0 100644 --- a/models/issue.go +++ b/models/issue.go @@ -7,6 +7,7 @@ package models import ( "fmt" "path" + "regexp" "sort" "strings" @@ -54,6 +55,19 @@ type Issue struct { Reactions ReactionList `xorm:"-"` } +var ( + issueTasksPat *regexp.Regexp + issueTasksDonePat *regexp.Regexp +) + +const issueTasksRegexpStr = `(^\s*-\s\[[\sx]\]\s)|(\n\s*-\s\[[\sx]\]\s)` +const issueTasksDoneRegexpStr = `(^\s*-\s\[[x]\]\s)|(\n\s*-\s\[[x]\]\s)` + +func init() { + issueTasksPat = regexp.MustCompile(issueTasksRegexpStr) + issueTasksDonePat = regexp.MustCompile(issueTasksDoneRegexpStr) +} + func (issue *Issue) loadRepo(e Engine) (err error) { if issue.Repo == nil { issue.Repo, err = getRepositoryByID(e, issue.RepoID) @@ -741,6 +755,7 @@ func AddDeletePRBranchComment(doer *User, repo *Repository, issueID int64, branc func (issue *Issue) ChangeContent(doer *User, content string) (err error) { oldContent := issue.Content issue.Content = content + if err = UpdateIssueCols(issue, "content"); err != nil { return fmt.Errorf("UpdateIssueCols: %v", err) } @@ -818,6 +833,16 @@ func (issue *Issue) ChangeAssignee(doer *User, assigneeID int64) (err error) { return nil } +// GetTasks returns the amount of tasks in the issues content +func (issue *Issue) GetTasks() int { + return len(issueTasksPat.FindAllStringIndex(issue.Content, -1)) +} + +// GetTasksDone returns the amount of completed tasks in the issues content +func (issue *Issue) GetTasksDone() int { + return len(issueTasksDonePat.FindAllStringIndex(issue.Content, -1)) +} + // NewIssueOptions represents the options of a new issue. type NewIssueOptions struct { Repo *Repository |