summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
Diffstat (limited to 'models')
-rw-r--r--models/issue.go25
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