Search in sources :

Example 16 with RosterEntry

use of org.jivesoftware.smack.roster.RosterEntry in project Spark by igniterealtime.

the class ContactGroupTransferHandler method addContactItem.

private void addContactItem(final ContactGroup contactGroup, final ContactItem item) {
    ContactItem newContact = UIComponentRegistry.createContactItem(Res.getString("group.empty"), null, null);
    newContact.setPresence(item.getPresence());
    newContact.setIcon(item.getIcon());
    newContact.getNicknameLabel().setFont(item.getNicknameLabel().getFont());
    if (!PresenceManager.isOnline(item.getJID())) {
        contactGroup.addOfflineContactItem(item.getAlias(), item.getNickname(), item.getJID(), null);
    } else {
        contactGroup.addContactItem(newContact);
    }
    contactGroup.clearSelection();
    // Updating group title
    contactGroup.fireContactGroupUpdated();
    final ContactGroup oldGroup = getContactGroup(item.getGroupName());
    SwingWorker worker = new SwingWorker() {

        public Object construct() {
            Roster roster = Roster.getInstanceFor(SparkManager.getConnection());
            RosterEntry entry = roster.getEntry(item.getJID());
            RosterGroup groupFound = null;
            for (RosterGroup group : roster.getGroups()) {
                if (group.getName().equals(contactGroup.getGroupName())) {
                    try {
                        groupFound = group;
                        group.addEntry(entry);
                    } catch (XMPPException | SmackException e1) {
                        Log.error(e1);
                        return false;
                    }
                }
            }
            // This is a new group
            if (groupFound == null) {
                groupFound = roster.createGroup(contactGroup.getGroupName());
                try {
                    groupFound.addEntry(entry);
                } catch (XMPPException | SmackException e) {
                    Log.error(e);
                }
            }
            return true;
        }

        public void finished() {
            if ((Boolean) get()) {
                // Now try and remove the group from the old one.
                removeContactItem(oldGroup, item);
            }
        }
    };
    worker.start();
}
Also used : Roster(org.jivesoftware.smack.roster.Roster) SmackException(org.jivesoftware.smack.SmackException) SwingWorker(org.jivesoftware.spark.util.SwingWorker) RosterEntry(org.jivesoftware.smack.roster.RosterEntry) XMPPException(org.jivesoftware.smack.XMPPException) RosterGroup(org.jivesoftware.smack.roster.RosterGroup)

Example 17 with RosterEntry

use of org.jivesoftware.smack.roster.RosterEntry in project Spark by igniterealtime.

the class ContactItem method updatePresenceIcon.

/**
 * Updates the icon of the user based on their presence.
 *
 * @param presence the users presence.
 */
public void updatePresenceIcon(Presence presence) {
    ChatManager chatManager = SparkManager.getChatManager();
    boolean handled = chatManager.fireContactItemPresenceChanged(this, presence);
    if (handled) {
        return;
    }
    String status = presence.getStatus();
    Icon statusIcon = SparkRes.getImageIcon(SparkRes.GREEN_BALL);
    boolean isAvailable = false;
    if (status == null && presence.isAvailable()) {
        Presence.Mode mode = presence.getMode();
        if (mode == Presence.Mode.available) {
            status = Res.getString("status.online");
            isAvailable = true;
        } else if (mode == Presence.Mode.away) {
            status = Res.getString("status.away");
            statusIcon = SparkRes.getImageIcon(SparkRes.IM_AWAY);
        } else if (mode == Presence.Mode.chat) {
            status = Res.getString("status.free.to.chat");
        } else if (mode == Presence.Mode.dnd) {
            status = Res.getString("status.do.not.disturb");
            statusIcon = SparkRes.getImageIcon(SparkRes.IM_AWAY);
        } else if (mode == Presence.Mode.xa) {
            status = Res.getString("status.extended.away");
            statusIcon = SparkRes.getImageIcon(SparkRes.IM_AWAY);
        }
    }
    if (presence.isAvailable() && (presence.getMode() == Presence.Mode.dnd || presence.getMode() == Presence.Mode.away || presence.getMode() == Presence.Mode.xa)) {
        statusIcon = SparkRes.getImageIcon(SparkRes.IM_AWAY);
    } else if (presence.isAvailable()) {
        isAvailable = true;
    } else if (!presence.isAvailable()) {
        getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize));
        getNicknameLabel().setForeground((Color) UIManager.get("ContactItemOffline.color"));
        RosterEntry entry = Roster.getInstanceFor(SparkManager.getConnection()).getEntry(getJID());
        if (entry != null && (entry.getType() == RosterPacket.ItemType.none || entry.getType() == RosterPacket.ItemType.from) && RosterPacket.ItemStatus.SUBSCRIPTION_PENDING == entry.getStatus()) {
            // Do not move out of group.
            setIcon(SparkRes.getImageIcon(SparkRes.SMALL_QUESTION));
            getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize));
            setStatusText(Res.getString("status.pending"));
        } else {
            // We should keep the offline bullet (not available) instead of putting icon null.
            setIcon(SparkRes.getImageIcon(SparkRes.CLEAR_BALL_ICON));
            setFont(new Font("Dialog", Font.PLAIN, fontSize));
            getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize));
            setAvailable(false);
            if (ModelUtil.hasLength(status)) {
                setStatusText(status);
            } else {
                setStatusText("");
            }
        }
        sideIcon.setIcon(null);
        setAvailable(false);
        return;
    }
    Icon sIcon = PresenceManager.getIconFromPresence(presence);
    if (sIcon != null) {
        setIcon(sIcon);
    } else {
        setIcon(statusIcon);
    }
    if (status != null) {
        setStatus(status);
    }
    if (PresenceManager.isOnPhone(presence)) {
        statusIcon = SparkRes.getImageIcon(SparkRes.ON_PHONE_IMAGE);
        setIcon(statusIcon);
    }
    // Always change nickname label to black.
    getNicknameLabel().setForeground((Color) UIManager.get("ContactItemNickname.foreground"));
    if (isAvailable) {
        getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize));
        if (Res.getString("status.online").equals(status) || Res.getString("available").equalsIgnoreCase(status)) {
            setStatusText("");
        } else {
            setStatusText(status);
        }
    } else if (presence.isAvailable()) {
        LocalPreferences pref = SettingsManager.getLocalPreferences();
        if (pref.isGrayingOutEnabled()) {
            getNicknameLabel().setFont(new Font("Dialog", Font.ITALIC, fontSize));
            getNicknameLabel().setForeground(Color.gray);
        } else {
            getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize));
            getNicknameLabel().setForeground(Color.black);
        }
        if (status != null) {
            setStatusText(status);
        }
    }
    setAvailable(true);
}
Also used : Presence(org.jivesoftware.smack.packet.Presence) RosterEntry(org.jivesoftware.smack.roster.RosterEntry) ImageIcon(javax.swing.ImageIcon) Icon(javax.swing.Icon) LocalPreferences(org.jivesoftware.sparkimpl.settings.local.LocalPreferences) ChatManager(org.jivesoftware.spark.ChatManager) Font(java.awt.Font)

Example 18 with RosterEntry

use of org.jivesoftware.smack.roster.RosterEntry in project Spark by igniterealtime.

the class SubscriptionDialog method addEntry.

/**
 * Adds a new entry to the users Roster.
 *
 * @param jid      the jid.
 * @param nickname the nickname.
 * @param group    the contact group.
 * @return the new RosterEntry.
 */
public RosterEntry addEntry(String jid, String nickname, String group) {
    String[] groups = { group };
    Roster roster = Roster.getInstanceFor(SparkManager.getConnection());
    RosterEntry userEntry = roster.getEntry(jid);
    boolean isSubscribed = true;
    if (userEntry != null) {
        isSubscribed = userEntry.getGroups().size() == 0;
    }
    if (isSubscribed) {
        try {
            roster.createEntry(jid, nickname, new String[] { group });
        } catch (XMPPException | SmackException e) {
            Log.error("Unable to add new entry " + jid, e);
        }
        return roster.getEntry(jid);
    }
    try {
        RosterGroup rosterGroup = roster.getGroup(group);
        if (rosterGroup == null) {
            rosterGroup = roster.createGroup(group);
        }
        if (userEntry == null) {
            roster.createEntry(jid, nickname, groups);
            userEntry = roster.getEntry(jid);
        } else {
            userEntry.setName(nickname);
            rosterGroup.addEntry(userEntry);
        }
        userEntry = roster.getEntry(jid);
    } catch (XMPPException | SmackException ex) {
        Log.error(ex);
    }
    return userEntry;
}
Also used : Roster(org.jivesoftware.smack.roster.Roster) SmackException(org.jivesoftware.smack.SmackException) RosterEntry(org.jivesoftware.smack.roster.RosterEntry) XMPPException(org.jivesoftware.smack.XMPPException) RosterGroup(org.jivesoftware.smack.roster.RosterGroup)

Example 19 with RosterEntry

use of org.jivesoftware.smack.roster.RosterEntry in project Spark by igniterealtime.

the class RosterDialog method addEntry.

/**
 * Adds a new entry to the users Roster.
 *
 * @param jid      the jid.
 * @param nickname the nickname.
 * @param group    the contact group.
 * @return the new RosterEntry.
 */
public RosterEntry addEntry(String jid, String nickname, String group) {
    String[] groups = { group };
    Roster roster = Roster.getInstanceFor(SparkManager.getConnection());
    RosterEntry userEntry = roster.getEntry(jid);
    boolean isSubscribed = true;
    if (userEntry != null) {
        isSubscribed = userEntry.getGroups().size() == 0;
    }
    if (isSubscribed) {
        try {
            roster.createEntry(jid, nickname, new String[] { group });
        } catch (XMPPException | SmackException e) {
            Log.error("Unable to add new entry " + jid, e);
        }
        return roster.getEntry(jid);
    }
    try {
        RosterGroup rosterGroup = roster.getGroup(group);
        if (rosterGroup == null) {
            rosterGroup = roster.createGroup(group);
        }
        if (userEntry == null) {
            roster.createEntry(jid, nickname, groups);
            userEntry = roster.getEntry(jid);
        } else {
            userEntry.setName(nickname);
            rosterGroup.addEntry(userEntry);
        }
        userEntry = roster.getEntry(jid);
    } catch (XMPPException | SmackException ex) {
        Log.error(ex);
    }
    return userEntry;
}
Also used : Roster(org.jivesoftware.smack.roster.Roster) SmackException(org.jivesoftware.smack.SmackException) RosterEntry(org.jivesoftware.smack.roster.RosterEntry) XMPPException(org.jivesoftware.smack.XMPPException) RosterGroup(org.jivesoftware.smack.roster.RosterGroup)

Example 20 with RosterEntry

use of org.jivesoftware.smack.roster.RosterEntry in project Spark by igniterealtime.

the class RosterTree method buildFromRoster.

private void buildFromRoster() {
    final Roster roster = Roster.getInstanceFor(SparkManager.getConnection());
    roster.addRosterListener(new RosterListener() {

        public void entriesAdded(Collection<String> addresses) {
        }

        public void entriesUpdated(Collection<String> addresses) {
        }

        public void entriesDeleted(Collection<String> addresses) {
        }

        public void presenceChanged(Presence presence) {
        // changePresence(presence.getFrom(), presence.getMode() == Presence.Mode.available);
        }
    });
    for (RosterGroup group : roster.getGroups()) {
        final JiveTreeNode groupNode = new JiveTreeNode(group.getName(), true);
        groupNode.setAllowsChildren(true);
        if (group.getEntryCount() > 0) {
            rootNode.add(groupNode);
        }
        for (RosterEntry entry : group.getEntries()) {
            String name = entry.getName();
            if (name == null) {
                name = entry.getUser();
            }
            final JiveTreeNode entryNode = new JiveTreeNode(name, false);
            final Presence usersPresence = PresenceManager.getPresence(entry.getUser());
            addressMap.put(entryNode, entry.getUser());
            boolean showUnavailableAgents = true;
            if (usersPresence.isAvailable() && !usersPresence.isAway()) {
                groupNode.add(entryNode);
            } else if (showUnavailableAgents) {
                groupNode.add(entryNode);
            }
            changePresence(entry.getUser(), usersPresence);
            final DefaultTreeModel model = (DefaultTreeModel) rosterTree.getModel();
            model.nodeStructureChanged(groupNode);
        }
    }
}
Also used : Roster(org.jivesoftware.smack.roster.Roster) Presence(org.jivesoftware.smack.packet.Presence) RosterEntry(org.jivesoftware.smack.roster.RosterEntry) DefaultTreeModel(javax.swing.tree.DefaultTreeModel) RosterListener(org.jivesoftware.smack.roster.RosterListener) RosterGroup(org.jivesoftware.smack.roster.RosterGroup)

Aggregations

RosterEntry (org.jivesoftware.smack.roster.RosterEntry)45 Roster (org.jivesoftware.smack.roster.Roster)35 RosterGroup (org.jivesoftware.smack.roster.RosterGroup)17 SmackException (org.jivesoftware.smack.SmackException)14 Presence (org.jivesoftware.smack.packet.Presence)13 XMPPException (org.jivesoftware.smack.XMPPException)12 IOException (java.io.IOException)6 SwingWorker (org.jivesoftware.spark.util.SwingWorker)4 RosterPacket (org.jivesoftware.smack.roster.packet.RosterPacket)3 AccountItem (com.xabber.android.data.account.AccountItem)2 ConnectionItem (com.xabber.android.data.connection.ConnectionItem)2 java.awt (java.awt)2 ActionEvent (java.awt.event.ActionEvent)2 ActionListener (java.awt.event.ActionListener)2 KeyEvent (java.awt.event.KeyEvent)2 java.util (java.util)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2 javax.swing (javax.swing)2 Icon (javax.swing.Icon)2