1package eu.siacs.conversations.generator;
2
3import eu.siacs.conversations.entities.Account;
4import eu.siacs.conversations.entities.MucOptions;
5import eu.siacs.conversations.services.XmppConnectionService;
6import eu.siacs.conversations.xmpp.manager.PresenceManager;
7import im.conversations.android.xmpp.model.stanza.Presence;
8
9public class PresenceGenerator extends AbstractGenerator {
10
11 public PresenceGenerator(XmppConnectionService service) {
12 super(service);
13 }
14
15 public im.conversations.android.xmpp.model.stanza.Presence selfPresence(Account account, Presence.Availability status) {
16 return selfPresence(account, status, true, null);
17 }
18
19 public im.conversations.android.xmpp.model.stanza.Presence selfPresence(
20 final Account account, final Presence.Availability status, final boolean personal, final String nickname) {
21 final var connection = account.getXmppConnection();
22 if (connection == null) {
23 return new Presence();
24 }
25 final var packet = connection.getManager(PresenceManager.class).getPresence(status, personal);
26 if (nickname != null) {
27 final var nick = packet.addChild("nick", "http://jabber.org/protocol/nick");
28 nick.setContent(nickname);
29 }
30 return packet;
31 }
32
33 public im.conversations.android.xmpp.model.stanza.Presence leave(final MucOptions mucOptions) {
34 im.conversations.android.xmpp.model.stanza.Presence presence =
35 new im.conversations.android.xmpp.model.stanza.Presence();
36 presence.setTo(mucOptions.getSelf().getFullJid());
37 presence.setFrom(mucOptions.getAccount().getJid());
38 presence.setAttribute("type", "unavailable");
39 return presence;
40 }
41
42 public im.conversations.android.xmpp.model.stanza.Presence sendOfflinePresence(
43 Account account) {
44 im.conversations.android.xmpp.model.stanza.Presence packet =
45 new im.conversations.android.xmpp.model.stanza.Presence();
46 packet.setFrom(account.getJid());
47 packet.setAttribute("type", "unavailable");
48 return packet;
49 }
50}