X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Fclub%2Fwpia%2Fgigi%2Foutput%2Ftemplate%2FMailTemplate.java;fp=src%2Fclub%2Fwpia%2Fgigi%2Foutput%2Ftemplate%2FMailTemplate.java;h=48034601f452013719e841243bed7ade0b6b1d82;hp=0000000000000000000000000000000000000000;hb=bccd4cc0dba0f89aa045b113bac46eb8cc1dab4e;hpb=c9ed09f0007fc2c813815be927a5a24b23dab83c diff --git a/src/club/wpia/gigi/output/template/MailTemplate.java b/src/club/wpia/gigi/output/template/MailTemplate.java new file mode 100644 index 00000000..48034601 --- /dev/null +++ b/src/club/wpia/gigi/output/template/MailTemplate.java @@ -0,0 +1,88 @@ +package club.wpia.gigi.output.template; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.net.URL; +import java.util.Collection; +import java.util.Map; + +import club.wpia.gigi.email.SendMail; +import club.wpia.gigi.localisation.Language; + +public class MailTemplate extends Template { + + private static final Template FOOTER = new Template(MailTemplate.class.getResource("MailFooter.templ")); + + public static final String SUBJECT_TAG = "[SomeCA] "; + + private TemplateBlock subjectBlock; + + public MailTemplate(URL u) { + super(u); + } + + public MailTemplate(Reader r) { + super(r); + } + + @Override + protected ParseResult parse(Reader r) throws IOException { + StringBuilder strb = new StringBuilder(); + int ct = 0; + int c; + while ((c = r.read()) > 0) { + if (c == '\n') { + ct++; + if (ct == 2) { + break; + } + } else { + ct = 0; + } + strb.append((char) c); + } + String[] lines = strb.toString().split("\n"); + for (int i = 0; i < lines.length; i++) { + String[] lineParts = lines[i].split(": ", 2); + if (lineParts.length != 2) { + throw new IOException("Mail template header malformed."); + } + if (lineParts[0].equals("Subject")) { + subjectBlock = parseContent(new StringReader(lineParts[1])).getBlock(null); + } + } + if (subjectBlock == null) { + throw new IOException("Mail template without subject line."); + } + return parseContent(r); + } + + public void sendMail(Language l, Map vars, String to) throws IOException { + tryReload(); + vars.put(Outputable.OUT_KEY_PLAIN, true); + + String body = runTemplate(this, l, vars); + body += runTemplate(FOOTER, l, vars); + String subject = runTemplate(subjectBlock, l, vars); + + SendMail.getInstance().sendMail(to, SUBJECT_TAG + subject, body, null, null, null, null, false); + } + + private static String runTemplate(Outputable toRun, Language l, Map vars) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + toRun.output(pw, l, vars); + pw.close(); + return sw.toString(); + } + + @Override + public void addTranslations(Collection s) { + subjectBlock.addTranslations(s); + super.addTranslations(s); + } + +}