]> Pileus Git - ~andy/spades/blobdiff - src/org/pileus/spades/Message.java
Initial text formatting
[~andy/spades] / src / org / pileus / spades / Message.java
index 07438a1f25ef058899ac3a724b0cb59f8a674e7b..ad71c2d5b2dbdee779b4ca3241d3575f9971844f 100644 (file)
@@ -1,15 +1,35 @@
 package org.pileus.spades;
 
+import java.util.Date;
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 
-import android.util.Log;
-
 public class Message
 {
-       /* Constnats */
-       private final  String  reMsg  = "(:([^ ]+) +)?(([A-Z0-9]+) +)(([^ ]+) +)?(([^: ]+) +)?(:(.*))";
-       private final  String  reFrom = "([^! ]+)!";
+       /* Enumerations */
+       enum Type {
+               OTHER,    // Unknown message type
+               PRIVMSG,  // Private message
+               TOPIC,    // Display current topic
+               NAMES,    // Display user names
+               ERROR,    // Error message from server
+               CAP,      // Server capabilities
+               AUTH,     // Authentication message
+               AUTHOK,   // Authentication succeeded
+               AUTHFAIL, // Authentication failed
+       };
+
+       enum How {
+               OTHER,    // Unknown message type
+               CHANNEL,  // Normal message to a channel
+               MENTION,  // User was mentioned in message text
+               DIRECT,   // Message directed towards user
+               PRIVMSG   // Private message to user only
+       };
+
+       /* Constants */
+       private final  String  reMsg  = "(:([^ ]+) +)?(([A-Z0-9]+) +)(([^ ]+)[= ]+)?(([^: ]+) *)?(:(.*))?";
+       private final  String  reFrom = "([^! ]+)!.*";
        private final  String  reTo   = "(([^ :,]*)[:,] *)?(.*)";
 
        private static Pattern ptMsg  = null;
@@ -17,6 +37,8 @@ public class Message
        private static Pattern ptTo   = null;
 
        /* Public data */
+       public Date    time = null;
+
        public String  line = "";
 
        public String  src  = "";
@@ -25,6 +47,8 @@ public class Message
        public String  arg  = "";
        public String  msg  = "";
 
+       public Type    type = Type.OTHER;
+       public How     how  = How.OTHER;
        public String  from = "";
        public String  to   = "";
        public String  txt  = "";
@@ -36,18 +60,31 @@ public class Message
        }
 
        /* Public Methods */
-       public Message(String line)
+       public Message(String dst, String from, String msg)
        {
+               this.cmd  = "PRIVMSG";
+               this.dst  = dst;
+               this.from = from;
+               this.msg  = msg;
+               this.line = this.cmd + " " + this.dst + " :" + this.msg;
+       }
 
+       public Message(String line, String name)
+       {
+               // Initialize regexes
                if (ptMsg  == null) ptMsg  = Pattern.compile(reMsg);
                if (ptFrom == null) ptFrom = Pattern.compile(reFrom);
                if (ptTo   == null) ptTo   = Pattern.compile(reTo);
 
+               // Set time stamp
+               this.time = new Date();
+
+               // Cleanup line
                line = line.replaceAll("\\s+",       " ");
                line = line.replaceAll("^ | $",      "");
-               line = line.replaceAll("\003[0-9]*", "");
                this.line = line;
 
+               // Split line into parts
                Matcher mrMsg = ptMsg.matcher(line);
                if (mrMsg.matches()) {
                        this.src  = notnull(mrMsg.group(2));
@@ -57,6 +94,7 @@ public class Message
                        this.msg  = notnull(mrMsg.group(10));
                }
 
+               // Determine friendly parts
                Matcher mrFrom = ptFrom.matcher(this.src);
                if (mrFrom.matches())
                        this.from = notnull(mrFrom.group(1));
@@ -69,20 +107,44 @@ public class Message
                        this.txt  = notnull(this.msg);
                else
                        this.txt  = notnull(mrTo.group(3));
+
+               // Parse commands names
+               if      (this.cmd.equals("PRIVMSG"))       this.type = Type.PRIVMSG;
+               else if (this.cmd.equals("332"))           this.type = Type.TOPIC;
+               else if (this.cmd.equals("353"))           this.type = Type.NAMES;
+               else if (this.cmd.equals("ERROR"))         this.type = Type.ERROR;
+               else if (this.cmd.equals("CAP"))           this.type = Type.CAP;
+               else if (this.cmd.equals("AUTHENTICATE"))  this.type = Type.AUTH;
+               else if (this.cmd.equals("903"))           this.type = Type.AUTHOK;
+               else if (this.cmd.equals("904"))           this.type = Type.AUTHFAIL;
+               else if (this.cmd.equals("905"))           this.type = Type.AUTHFAIL;
+               else if (this.cmd.equals("906"))           this.type = Type.AUTHFAIL;
+               else if (this.cmd.equals("907"))           this.type = Type.AUTHFAIL;
+
+               // Set directed
+               if      (this.dst.equals(name))            this.how  = How.PRIVMSG;
+               else if (this.to.equals(name))             this.how  = How.DIRECT;
+               else if (this.msg.contains(name))          this.how  = How.MENTION;
+               else if (this.type == Type.PRIVMSG)        this.how  = How.CHANNEL;
        }
 
        public void debug()
        {
-               Log.d("Spades", "---------------------");
-               Log.d("Spades", "line = [" + line + "]");
-               Log.d("Spades", "src  = " + this.src);
-               Log.d("Spades", "cmd  = " + this.cmd);
-               Log.d("Spades", "dst  = " + this.dst);
-               Log.d("Spades", "arg  = " + this.arg);
-               Log.d("Spades", "msg  = " + this.msg);
-               Log.d("Spades", "from = " + this.from);
-               Log.d("Spades", "to   = " + this.to);
-               Log.d("Spades", "txt  = " + this.txt);
-               Log.d("Spades", "---------------------");
+               Os.debug("---------------------");
+               Os.debug("line = [" + line + "]");
+               Os.debug("src  = " + this.src);
+               Os.debug("cmd  = " + this.cmd);
+               Os.debug("dst  = " + this.dst);
+               Os.debug("arg  = " + this.arg);
+               Os.debug("msg  = " + this.msg);
+               Os.debug("from = " + this.from);
+               Os.debug("to   = " + this.to);
+               Os.debug("txt  = " + this.txt);
+               Os.debug("---------------------");
+       }
+
+       public String toString()
+       {
+               return this.from + ": " + this.txt;
        }
 }