Lint/issue &mail (#243)
* Lint models/release.go * Lint models/ issue_label, issue_mail & mail.go
This commit is contained in:
		
							parent
							
								
									081c2a9395
								
							
						
					
					
						commit
						c0ca6644ad
					
				
					 4 changed files with 35 additions and 27 deletions
				
			
		|  | @ -62,6 +62,7 @@ type Label struct { | ||||||
| 	IsChecked       bool `xorm:"-"` | 	IsChecked       bool `xorm:"-"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // APIFormat converts a Label to the api.Label format
 | ||||||
| func (label *Label) APIFormat() *api.Label { | func (label *Label) APIFormat() *api.Label { | ||||||
| 	return &api.Label{ | 	return &api.Label{ | ||||||
| 		ID:    label.ID, | 		ID:    label.ID, | ||||||
|  | @ -77,9 +78,9 @@ func (label *Label) CalOpenIssues() { | ||||||
| 
 | 
 | ||||||
| // ForegroundColor calculates the text color for labels based
 | // ForegroundColor calculates the text color for labels based
 | ||||||
| // on their background color.
 | // on their background color.
 | ||||||
| func (l *Label) ForegroundColor() template.CSS { | func (label *Label) ForegroundColor() template.CSS { | ||||||
| 	if strings.HasPrefix(l.Color, "#") { | 	if strings.HasPrefix(label.Color, "#") { | ||||||
| 		if color, err := strconv.ParseUint(l.Color[1:], 16, 64); err == nil { | 		if color, err := strconv.ParseUint(label.Color[1:], 16, 64); err == nil { | ||||||
| 			r := float32(0xFF & (color >> 16)) | 			r := float32(0xFF & (color >> 16)) | ||||||
| 			g := float32(0xFF & (color >> 8)) | 			g := float32(0xFF & (color >> 8)) | ||||||
| 			b := float32(0xFF & color) | 			b := float32(0xFF & color) | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ import ( | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func (issue *Issue) MailSubject() string { | func (issue *Issue) mailSubject() string { | ||||||
| 	return fmt.Sprintf("[%s] %s (#%d)", issue.Repo.Name, issue.Title, issue.Index) | 	return fmt.Sprintf("[%s] %s (#%d)", issue.Repo.Name, issue.Title, issue.Index) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -20,23 +20,24 @@ import ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
| 	MailAuthActivate       base.TplName = "auth/activate" | 	mailAuthActivate       base.TplName = "auth/activate" | ||||||
| 	MailAuthActivateEmail  base.TplName = "auth/activate_email" | 	mailAuthActivateEmail  base.TplName = "auth/activate_email" | ||||||
| 	MailAuthResetPassword  base.TplName = "auth/reset_passwd" | 	mailAuthResetPassword  base.TplName = "auth/reset_passwd" | ||||||
| 	MailAuthRegisterNotify base.TplName = "auth/register_notify" | 	mailAuthRegisterNotify base.TplName = "auth/register_notify" | ||||||
| 
 | 
 | ||||||
| 	MailIssueComment base.TplName = "issue/comment" | 	mailIssueComment base.TplName = "issue/comment" | ||||||
| 	MailIssueMention base.TplName = "issue/mention" | 	mailIssueMention base.TplName = "issue/mention" | ||||||
| 
 | 
 | ||||||
| 	MailNotifyCollaborator base.TplName = "notify/collaborator" | 	mailNotifyCollaborator base.TplName = "notify/collaborator" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type MailRender interface { | type mailRenderInterface interface { | ||||||
| 	HTMLString(string, interface{}, ...macaron.HTMLOptions) (string, error) | 	HTMLString(string, interface{}, ...macaron.HTMLOptions) (string, error) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var mailRender MailRender | var mailRender mailRenderInterface | ||||||
| 
 | 
 | ||||||
|  | // InitMailRender initializes the macaron mail renderer
 | ||||||
| func InitMailRender(dir, appendDir string, funcMap []template.FuncMap) { | func InitMailRender(dir, appendDir string, funcMap []template.FuncMap) { | ||||||
| 	opt := &macaron.RenderOptions{ | 	opt := &macaron.RenderOptions{ | ||||||
| 		Directory:         dir, | 		Directory:         dir, | ||||||
|  | @ -53,10 +54,12 @@ func InitMailRender(dir, appendDir string, funcMap []template.FuncMap) { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // SendTestMail sends a test mail
 | ||||||
| func SendTestMail(email string) error { | func SendTestMail(email string) error { | ||||||
| 	return gomail.Send(&mailer.Sender{}, mailer.NewMessage([]string{email}, "Gogs Test Email!", "Gogs Test Email!").Message) | 	return gomail.Send(&mailer.Sender{}, mailer.NewMessage([]string{email}, "Gogs Test Email!", "Gogs Test Email!").Message) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // SendUserMail sends a mail to the user
 | ||||||
| func SendUserMail(c *macaron.Context, u *User, tpl base.TplName, code, subject, info string) { | func SendUserMail(c *macaron.Context, u *User, tpl base.TplName, code, subject, info string) { | ||||||
| 	data := map[string]interface{}{ | 	data := map[string]interface{}{ | ||||||
| 		"Username":          u.DisplayName(), | 		"Username":          u.DisplayName(), | ||||||
|  | @ -76,15 +79,17 @@ func SendUserMail(c *macaron.Context, u *User, tpl base.TplName, code, subject, | ||||||
| 	mailer.SendAsync(msg) | 	mailer.SendAsync(msg) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // SendActivateAccountMail sends an activation mail to the user
 | ||||||
| func SendActivateAccountMail(c *macaron.Context, u *User) { | func SendActivateAccountMail(c *macaron.Context, u *User) { | ||||||
| 	SendUserMail(c, u, MailAuthActivate, u.GenerateActivateCode(), c.Tr("mail.activate_account"), "activate account") | 	SendUserMail(c, u, mailAuthActivate, u.GenerateActivateCode(), c.Tr("mail.activate_account"), "activate account") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // SendResetPasswordMail sends a password reset mail to the user
 | ||||||
| func SendResetPasswordMail(c *macaron.Context, u *User) { | func SendResetPasswordMail(c *macaron.Context, u *User) { | ||||||
| 	SendUserMail(c, u, MailAuthResetPassword, u.GenerateActivateCode(), c.Tr("mail.reset_password"), "reset password") | 	SendUserMail(c, u, mailAuthResetPassword, u.GenerateActivateCode(), c.Tr("mail.reset_password"), "reset password") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // SendActivateAccountMail sends confirmation email.
 | // SendActivateEmailMail sends confirmation email.
 | ||||||
| func SendActivateEmailMail(c *macaron.Context, u *User, email *EmailAddress) { | func SendActivateEmailMail(c *macaron.Context, u *User, email *EmailAddress) { | ||||||
| 	data := map[string]interface{}{ | 	data := map[string]interface{}{ | ||||||
| 		"Username":        u.DisplayName(), | 		"Username":        u.DisplayName(), | ||||||
|  | @ -92,7 +97,7 @@ func SendActivateEmailMail(c *macaron.Context, u *User, email *EmailAddress) { | ||||||
| 		"Code":            u.GenerateEmailActivateCode(email.Email), | 		"Code":            u.GenerateEmailActivateCode(email.Email), | ||||||
| 		"Email":           email.Email, | 		"Email":           email.Email, | ||||||
| 	} | 	} | ||||||
| 	body, err := mailRender.HTMLString(string(MailAuthActivateEmail), data) | 	body, err := mailRender.HTMLString(string(mailAuthActivateEmail), data) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error(3, "HTMLString: %v", err) | 		log.Error(3, "HTMLString: %v", err) | ||||||
| 		return | 		return | ||||||
|  | @ -109,7 +114,7 @@ func SendRegisterNotifyMail(c *macaron.Context, u *User) { | ||||||
| 	data := map[string]interface{}{ | 	data := map[string]interface{}{ | ||||||
| 		"Username": u.DisplayName(), | 		"Username": u.DisplayName(), | ||||||
| 	} | 	} | ||||||
| 	body, err := mailRender.HTMLString(string(MailAuthRegisterNotify), data) | 	body, err := mailRender.HTMLString(string(mailAuthRegisterNotify), data) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error(3, "HTMLString: %v", err) | 		log.Error(3, "HTMLString: %v", err) | ||||||
| 		return | 		return | ||||||
|  | @ -131,7 +136,7 @@ func SendCollaboratorMail(u, doer *User, repo *Repository) { | ||||||
| 		"RepoName": repoName, | 		"RepoName": repoName, | ||||||
| 		"Link":     repo.HTMLURL(), | 		"Link":     repo.HTMLURL(), | ||||||
| 	} | 	} | ||||||
| 	body, err := mailRender.HTMLString(string(MailNotifyCollaborator), data) | 	body, err := mailRender.HTMLString(string(mailNotifyCollaborator), data) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error(3, "HTMLString: %v", err) | 		log.Error(3, "HTMLString: %v", err) | ||||||
| 		return | 		return | ||||||
|  | @ -152,7 +157,7 @@ func composeTplData(subject, body, link string) map[string]interface{} { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func composeIssueMessage(issue *Issue, doer *User, tplName base.TplName, tos []string, info string) *mailer.Message { | func composeIssueMessage(issue *Issue, doer *User, tplName base.TplName, tos []string, info string) *mailer.Message { | ||||||
| 	subject := issue.MailSubject() | 	subject := issue.mailSubject() | ||||||
| 	body := string(markdown.RenderSpecialLink([]byte(issue.Content), issue.Repo.HTMLURL(), issue.Repo.ComposeMetas())) | 	body := string(markdown.RenderSpecialLink([]byte(issue.Content), issue.Repo.HTMLURL(), issue.Repo.ComposeMetas())) | ||||||
| 	data := composeTplData(subject, body, issue.HTMLURL()) | 	data := composeTplData(subject, body, issue.HTMLURL()) | ||||||
| 	data["Doer"] = doer | 	data["Doer"] = doer | ||||||
|  | @ -171,7 +176,7 @@ func SendIssueCommentMail(issue *Issue, doer *User, tos []string) { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	mailer.SendAsync(composeIssueMessage(issue, doer, MailIssueComment, tos, "issue comment")) | 	mailer.SendAsync(composeIssueMessage(issue, doer, mailIssueComment, tos, "issue comment")) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // SendIssueMentionMail composes and sends issue mention emails to target receivers.
 | // SendIssueMentionMail composes and sends issue mention emails to target receivers.
 | ||||||
|  | @ -179,5 +184,5 @@ func SendIssueMentionMail(issue *Issue, doer *User, tos []string) { | ||||||
| 	if len(tos) == 0 { | 	if len(tos) == 0 { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	mailer.SendAsync(composeIssueMessage(issue, doer, MailIssueMention, tos, "issue mention")) | 	mailer.SendAsync(composeIssueMessage(issue, doer, mailIssueMention, tos, "issue mention")) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -38,12 +38,14 @@ type Release struct { | ||||||
| 	CreatedUnix int64 | 	CreatedUnix int64 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // BeforeInsert is invoked from XORM before inserting an object of this type.
 | ||||||
| func (r *Release) BeforeInsert() { | func (r *Release) BeforeInsert() { | ||||||
| 	if r.CreatedUnix == 0 { | 	if r.CreatedUnix == 0 { | ||||||
| 		r.CreatedUnix = time.Now().Unix() | 		r.CreatedUnix = time.Now().Unix() | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // AfterSet is invoked from XORM after setting the value of a field of this object.
 | ||||||
| func (r *Release) AfterSet(colName string, _ xorm.Cell) { | func (r *Release) AfterSet(colName string, _ xorm.Cell) { | ||||||
| 	switch colName { | 	switch colName { | ||||||
| 	case "created_unix": | 	case "created_unix": | ||||||
|  | @ -151,15 +153,15 @@ func GetReleasesByRepoID(repoID int64, page, pageSize int) (rels []*Release, err | ||||||
| 	return rels, err | 	return rels, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type ReleaseSorter struct { | type releaseSorter struct { | ||||||
| 	rels []*Release | 	rels []*Release | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (rs *ReleaseSorter) Len() int { | func (rs *releaseSorter) Len() int { | ||||||
| 	return len(rs.rels) | 	return len(rs.rels) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (rs *ReleaseSorter) Less(i, j int) bool { | func (rs *releaseSorter) Less(i, j int) bool { | ||||||
| 	diffNum := rs.rels[i].NumCommits - rs.rels[j].NumCommits | 	diffNum := rs.rels[i].NumCommits - rs.rels[j].NumCommits | ||||||
| 	if diffNum != 0 { | 	if diffNum != 0 { | ||||||
| 		return diffNum > 0 | 		return diffNum > 0 | ||||||
|  | @ -167,13 +169,13 @@ func (rs *ReleaseSorter) Less(i, j int) bool { | ||||||
| 	return rs.rels[i].Created.After(rs.rels[j].Created) | 	return rs.rels[i].Created.After(rs.rels[j].Created) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (rs *ReleaseSorter) Swap(i, j int) { | func (rs *releaseSorter) Swap(i, j int) { | ||||||
| 	rs.rels[i], rs.rels[j] = rs.rels[j], rs.rels[i] | 	rs.rels[i], rs.rels[j] = rs.rels[j], rs.rels[i] | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // SortReleases sorts releases by number of commits and created time.
 | // SortReleases sorts releases by number of commits and created time.
 | ||||||
| func SortReleases(rels []*Release) { | func SortReleases(rels []*Release) { | ||||||
| 	sorter := &ReleaseSorter{rels: rels} | 	sorter := &releaseSorter{rels: rels} | ||||||
| 	sort.Sort(sorter) | 	sort.Sort(sorter) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue