Adding description of individual lonely games. More verbose subject added too.
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4 * The contents of this file are subject to the terms of either the GNU
5 * General Public License Version 2 only ("GPL") or the Common
6 * Development and Distribution License("CDDL") (collectively, the
7 * "License"). You may not use this file except in compliance with the
8 * License. You can obtain a copy of the License at
9 * http://www.netbeans.org/cddl-gplv2.html
10 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
11 * specific language governing permissions and limitations under the
12 * License. When distributing the software, include this License Header
13 * Notice in each file and include the License file at
14 * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
15 * particular file as subject to the "Classpath" exception as provided
16 * by Sun in the GPL Version 2 section of the License file that
17 * accompanied this code. If applicable, add the following below the
18 * License Header, with the fields enclosed by brackets [] replaced by
19 * your own identifying information:
20 * "Portions Copyrighted [year] [name of copyright owner]"
24 * Portions Copyrighted 2009 Jaroslav Tulach
27 package cz.xelfi.quoridor.emailer
32 import scala.collection.Map
33 import scala.collection.mutable.HashMap
34 import javax.mail.internet._
35 import javax.mail.Message
36 import javax.mail.Transport
39 def main(args: Array[String]) {
40 if (args == null || args.size != 4) {
41 Console.println("Usage: emailer.jar <quoridor API URL> <login name> <password> <smtp server IP>")
45 val api = new URL(args(0));
47 val loginID = login(api, args(1), args(2))
49 val okDelay = 3600 * 1000 * 24
50 val props = java.lang.System.getProperties
51 props.put("mail.smtp.host", args(3));
53 val session = if (args(3).equals("print")) null else javax.mail.Session.getDefaultInstance(props, null)
55 val notify = new Notify() {
56 protected def allPlayers(): Map[String,List[Info]] = {
57 val u = new URL(api, "games");
58 val conn = u.openConnection
59 conn.setRequestProperty("Accept", "text/xml")
61 val ret = new HashMap[String,List[Info]]
63 val before = System.currentTimeMillis - okDelay
64 val games = XML.load(conn.getInputStream)
65 for (val g : Node <- games \\ "gameId") {
66 val modified = (g \\ "@modified").text.toLong
67 if (modified < before) {
68 val status = (g \\ "@status").text;
70 if (status == "blackMove") {
72 } else if (status == "whiteMove") {
78 val prev = ret.getOrElse(name, Nil)
79 val id = (g \\ "@id").text
80 val info = new Info(modified, id)
81 val next = info :: prev
89 protected def emails(ids : Collection[String]): Map[String,String] = {
90 var ret = new HashMap[String,String]
92 val u = new URL(api, "users/" + p + "?loginID=" + loginID)
93 val conn = u.openConnection
94 conn.setRequestProperty("Accept", "text/xml")
95 val xml = XML.load(conn.getInputStream)
96 val res = (xml \\ "property").filter({
97 n => n.attribute("name") match {
98 case Some(attr) => attr.text == "email"
103 ret.put(p, res(0).text)
109 protected def sendEmail(address : String, subject : String, text : String) : Unit = {
110 Console.println("Sending message to")
111 Console.println(" email: " + address.split('@')(0) + "@... ")
112 Console.println(" subject: " + subject)
113 Console.println(" " + text)
114 if (session == null) {
118 val message = new MimeMessage(session)
119 message.setFrom(new InternetAddress("quoridor@xelfi.cz"))
120 message.addRecipient(Message.RecipientType.TO, new InternetAddress(address))
121 message.setSubject(subject)
122 message.setText(text)
124 Transport.send(message)
131 def login(url : URL, name : String, password : String) : String = {
132 val u = new URL(url, "login?name=" + name + "&password=" + password);
133 val conn = u.openConnection.asInstanceOf[java.net.HttpURLConnection]
134 conn.setRequestMethod("PUT")
135 conn.setDoInput(true)
137 val reply = Source.fromInputStream(conn.getInputStream)
138 return reply.mkString("")