1using Gee; 2 3namespace Xmpp { 4 5public class MessageStanza : Xmpp.Stanza { 6 public const string NODE_BODY = "body"; 7 public const string NODE_SUBJECT = "subject"; 8 public const string NODE_THREAD = "thread"; 9 10 public const string TYPE_CHAT = "chat"; 11 public const string TYPE_GROUPCHAT = "groupchat"; 12 public const string TYPE_HEADLINE = "headline"; 13 public const string TYPE_NORMAL = "normal"; 14 15 public bool rerun_parsing = false; 16 private ArrayList<MessageFlag> flags = new ArrayList<MessageFlag>(); 17 18 public string body { 19 get { 20 StanzaNode? body_node = stanza.get_subnode(NODE_BODY); 21 return body_node == null ? null : body_node.get_string_content(); 22 } 23 set { 24 StanzaNode? body_node = stanza.get_subnode(NODE_BODY); 25 if (body_node == null) { 26 body_node = new StanzaNode.build(NODE_BODY); 27 stanza.put_node(body_node); 28 } 29 body_node.sub_nodes.clear(); 30 body_node.put_node(new StanzaNode.text(value)); 31 } 32 } 33 34 public override string? type_ { 35 get { 36 return base.type_ ?? TYPE_NORMAL; 37 } 38 set { base.type_ = value; } 39 } 40 41 public MessageStanza(string? id = null) { 42 base.outgoing(new StanzaNode.build("message")); 43 stanza.set_attribute(ATTRIBUTE_ID, id ?? random_uuid()); 44 } 45 46 public MessageStanza.from_stanza(StanzaNode stanza_node, Jid my_jid) { 47 base.incoming(stanza_node, my_jid); 48 } 49 50 public void add_flag(MessageFlag flag) { 51 flags.add(flag); 52 } 53 54 public MessageFlag? get_flag(string ns, string id) { 55 foreach (MessageFlag flag in flags) { 56 if (flag.get_ns() == ns && flag.get_id() == id) return flag; 57 } 58 return null; 59 } 60} 61 62public abstract class MessageFlag : Object { 63 public abstract string get_ns(); 64 65 public abstract string get_id(); 66} 67 68} 69