package io.jandy.service; import io.jandy.domain.Build; import io.jandy.domain.User; import io.jandy.util.api.json.GHUser; import io.jandy.util.api.GitHubApi; import org.ocpsoft.prettytime.PrettyTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import javax.mail.MessagingException; import javax.xml.bind.DatatypeConverter; import java.util.HashMap; import java.util.Locale; /** * @author JCooky * @since 2015-09-03 */ @Service public class Reporter { @Autowired private JavaMailSender mailSender; @Autowired private FreeMarkerConfigurer freeMarkerConfigurer; @Autowired private GitHubApi github; @Async public void sendMail(User user, Build current) throws MessagingException { mailSender.send(msg -> { GHUser ghUser = null; if (current.getCommit() != null) ghUser = github.getUser(current.getCommit().getCommitterName()); PrettyTime p = new PrettyTime(Locale.ENGLISH); if (current.getFinishedAt() != null) current.setBuildAt(p.format(DatatypeConverter.parseDateTime(current.getFinishedAt()))); HashMap<String, Object> model = new HashMap<>(); model.put("project", current.getBranch().getProject()); model.put("build", current); model.put("committerAvatarUrl", ghUser == null ? null : user.getAvatarUrl()); MimeMessageHelper h = new MimeMessageHelper(msg, false, "UTF-8"); h.setFrom("[email protected]"); h.setTo(user.getEmail()); h.setSubject("Jandy Performance Report"); h.setText(FreeMarkerTemplateUtils.processTemplateIntoString(freeMarkerConfigurer.getConfiguration().getTemplate("email.ftl"), model), true); }); } }