1package eu.siacs.conversations.generator;
2
3import eu.siacs.conversations.entities.Account;
4import eu.siacs.conversations.entities.Contact;
5import eu.siacs.conversations.xml.Element;
6import eu.siacs.conversations.xmpp.stanzas.PresencePacket;
7
8public class PresenceGenerator extends AbstractGenerator {
9
10 private PresencePacket subscription(String type, Contact contact) {
11 PresencePacket packet = new PresencePacket();
12 packet.setAttribute("type", type);
13 packet.setAttribute("to", contact.getJid());
14 packet.setAttribute("from", contact.getAccount().getJid());
15 return packet;
16 }
17
18 public PresencePacket requestPresenceUpdatesFrom(Contact contact) {
19 return subscription("subscribe", contact);
20 }
21
22 public PresencePacket stopPresenceUpdatesFrom(Contact contact) {
23 return subscription("unsubscribe", contact);
24 }
25
26 public PresencePacket stopPresenceUpdatesTo(Contact contact) {
27 return subscription("unsubscribed", contact);
28 }
29
30 public PresencePacket sendPresenceUpdatesTo(Contact contact) {
31 return subscription("subscribed", contact);
32 }
33
34 public PresencePacket sendPresence(Account account) {
35 PresencePacket packet = new PresencePacket();
36 packet.setAttribute("from", account.getFullJid());
37 String sig = account.getPgpSignature();
38 if (sig != null) {
39 packet.addChild("status").setContent("online");
40 packet.addChild("x", "jabber:x:signed").setContent(sig);
41 }
42 String capHash = getCapHash();
43 if (capHash != null) {
44 Element cap = packet.addChild("c",
45 "http://jabber.org/protocol/caps");
46 cap.setAttribute("hash", "sha-1");
47 cap.setAttribute("node", "http://conversions.siacs.eu");
48 cap.setAttribute("ver", capHash);
49 }
50 return packet;
51 }
52}