1package eu.siacs.conversations.generator;
2
3import eu.siacs.conversations.entities.Account;
4import eu.siacs.conversations.entities.Contact;
5import eu.siacs.conversations.entities.Presence;
6import eu.siacs.conversations.services.XmppConnectionService;
7import eu.siacs.conversations.xml.Element;
8import eu.siacs.conversations.xmpp.stanzas.PresencePacket;
9
10public class PresenceGenerator extends AbstractGenerator {
11
12 public PresenceGenerator(XmppConnectionService service) {
13 super(service);
14 }
15
16 private PresencePacket subscription(String type, Contact contact) {
17 PresencePacket packet = new PresencePacket();
18 packet.setAttribute("type", type);
19 packet.setTo(contact.getJid());
20 packet.setFrom(contact.getAccount().getJid().toBareJid());
21 return packet;
22 }
23
24 public PresencePacket requestPresenceUpdatesFrom(Contact contact) {
25 return subscription("subscribe", contact);
26 }
27
28 public PresencePacket stopPresenceUpdatesFrom(Contact contact) {
29 return subscription("unsubscribe", contact);
30 }
31
32 public PresencePacket stopPresenceUpdatesTo(Contact contact) {
33 return subscription("unsubscribed", contact);
34 }
35
36 public PresencePacket sendPresenceUpdatesTo(Contact contact) {
37 return subscription("subscribed", contact);
38 }
39
40 public PresencePacket selfPresence(Account account, Presence.Status status) {
41 return selfPresence(account, status, true);
42 }
43
44 public PresencePacket selfPresence(Account account, Presence.Status status, boolean includePgpAnnouncement) {
45 PresencePacket packet = new PresencePacket();
46 if(status.toShowString() != null) {
47 packet.addChild("show").setContent(status.toShowString());
48 }
49 packet.setFrom(account.getJid());
50 String sig = account.getPgpSignature();
51 if (includePgpAnnouncement && sig != null && mXmppConnectionService.getPgpEngine() != null) {
52 packet.addChild("x", "jabber:x:signed").setContent(sig);
53 }
54 String capHash = getCapHash();
55 if (capHash != null) {
56 Element cap = packet.addChild("c",
57 "http://jabber.org/protocol/caps");
58 cap.setAttribute("hash", "sha-1");
59 cap.setAttribute("node", "http://conversations.im");
60 cap.setAttribute("ver", capHash);
61 }
62 return packet;
63 }
64
65 public PresencePacket sendOfflinePresence(Account account) {
66 PresencePacket packet = new PresencePacket();
67 packet.setFrom(account.getJid());
68 packet.setAttribute("type","unavailable");
69 return packet;
70 }
71}