1package eu.siacs.conversations.xmpp.manager;
2
3import com.google.common.base.Strings;
4import com.google.common.util.concurrent.ListenableFuture;
5import eu.siacs.conversations.entities.Contact;
6import eu.siacs.conversations.services.QuickConversationsService;
7import eu.siacs.conversations.services.XmppConnectionService;
8import eu.siacs.conversations.xml.Namespace;
9import eu.siacs.conversations.xmpp.Jid;
10import eu.siacs.conversations.xmpp.XmppConnection;
11import im.conversations.android.xmpp.NodeConfiguration;
12import im.conversations.android.xmpp.model.nick.Nick;
13import im.conversations.android.xmpp.model.pubsub.Items;
14
15public class NickManager extends AbstractManager {
16
17 private final XmppConnectionService service;
18
19 public NickManager(final XmppConnectionService service, final XmppConnection connection) {
20 super(service, connection);
21 this.service = service;
22 }
23
24 public void handleItems(final Jid from, final Items items) {
25 final var item = items.getFirstItem(Nick.class);
26 final var nick = item == null ? null : item.getContent();
27 if (from == null || Strings.isNullOrEmpty(nick)) {
28 return;
29 }
30 setNick(from, nick);
31 }
32
33 private void setNick(final Jid user, final String nick) {
34 final var account = getAccount();
35 if (user.asBareJid().equals(account.getJid().asBareJid())) {
36 account.setDisplayName(nick);
37 if (QuickConversationsService.isQuicksy()) {
38 service.getAvatarService().clear(account);
39 }
40 service.checkMucRequiresRename();
41 } else {
42 final Contact contact = account.getRoster().getContact(user);
43 if (contact.setPresenceName(nick)) {
44 connection.getManager(RosterManager.class).writeToDatabaseAsync();
45 service.getAvatarService().clear(contact);
46 }
47 }
48 service.updateConversationUi();
49 service.updateAccountUi();
50 }
51
52 public ListenableFuture<Void> publish(final String name) {
53 if (Strings.isNullOrEmpty(name)) {
54 return getManager(PepManager.class).delete(Namespace.NICK);
55 } else {
56 return getManager(PepManager.class)
57 .publishSingleton(new Nick(name), NodeConfiguration.PRESENCE);
58 }
59 }
60
61 public void handleDelete(final Jid from) {
62 this.setNick(from, null);
63 }
64}