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