diff --git a/src/java/org/jivesoftware/spark/Workspace.java b/src/java/org/jivesoftware/spark/Workspace.java index 743b82dc..556f6ba9 100644 --- a/src/java/org/jivesoftware/spark/Workspace.java +++ b/src/java/org/jivesoftware/spark/Workspace.java @@ -23,6 +23,7 @@ import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smackx.debugger.EnhancedDebuggerWindow; import org.jivesoftware.smackx.packet.DelayInformation; +import org.jivesoftware.smackx.packet.VCard; import org.jivesoftware.spark.component.tabbedPane.SparkTabbedPane; import org.jivesoftware.spark.filetransfer.SparkTransferManager; import org.jivesoftware.spark.search.SearchManager; @@ -34,7 +35,7 @@ import org.jivesoftware.spark.ui.ContactItem; import org.jivesoftware.spark.ui.ContactList; import org.jivesoftware.spark.ui.conferences.ConferenceServices; import org.jivesoftware.spark.ui.status.StatusBar; -import org.jivesoftware.spark.util.SwingTimerTask; +import org.jivesoftware.spark.util.ModelUtil; import org.jivesoftware.spark.util.TaskEngine; import org.jivesoftware.spark.util.log.Log; import org.jivesoftware.sparkimpl.plugin.alerts.BroadcastPlugin; @@ -43,16 +44,6 @@ import org.jivesoftware.sparkimpl.plugin.gateways.GatewayPlugin; import org.jivesoftware.sparkimpl.plugin.manager.Enterprise; import org.jivesoftware.sparkimpl.plugin.transcripts.ChatTranscriptPlugin; -import java.awt.CardLayout; -import java.awt.Color; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.util.ArrayList; -import java.util.List; -import java.util.TimerTask; - import javax.swing.AbstractAction; import javax.swing.JComponent; import javax.swing.JPanel; @@ -60,6 +51,14 @@ import javax.swing.JTabbedPane; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.util.TimerTask; + /** * The inner Container for Spark. The Workspace is the container for all plugins into the Spark @@ -307,11 +306,11 @@ public class Workspace extends JPanel implements PacketListener { boolean broadcast = message.getProperty("broadcast") != null; if (body == null || - isGroupChat || - broadcast || - message.getType() == Message.Type.normal || - message.getType() == Message.Type.headline || - message.getType() == Message.Type.error) { + isGroupChat || + broadcast || + message.getType() == Message.Type.normal || + message.getType() == Message.Type.headline || + message.getType() == Message.Type.error) { return; } @@ -386,6 +385,24 @@ public class Workspace extends JPanel implements PacketListener { if (contact != null) { nickname = contact.getNickname(); } + else { + // Attempt to load VCard from users who we are not subscribed to. + VCard vCard = SparkManager.getVCardManager().getVCard(bareJID); + if (vCard != null && vCard.getError() == null) { + String firstName = vCard.getFirstName(); + String lastName = vCard.getLastName(); + String userNickname = vCard.getNickName(); + if (ModelUtil.hasLength(userNickname)) { + nickname = userNickname; + } + else if (ModelUtil.hasLength(firstName) && ModelUtil.hasLength(lastName)) { + nickname = firstName + " " + lastName; + } + else if (ModelUtil.hasLength(firstName)) { + nickname = firstName; + } + } + } SparkManager.getChatManager().createChatRoom(bareJID, nickname, nickname); try { diff --git a/src/java/org/jivesoftware/spark/ui/RosterDialog.java b/src/java/org/jivesoftware/spark/ui/RosterDialog.java index 1735e6d1..6643fd0e 100644 --- a/src/java/org/jivesoftware/spark/ui/RosterDialog.java +++ b/src/java/org/jivesoftware/spark/ui/RosterDialog.java @@ -160,6 +160,31 @@ public class RosterDialog implements PropertyChangeListener, ActionListener { public void focusLost(FocusEvent e) { String jid = getJID(); + String vcardNickname = null; + + if (!publicBox.isSelected()) { + // This is not a transport. + String fullJID = getJID(); + if (fullJID.indexOf("@") == -1) { + fullJID = fullJID + "@" + SparkManager.getConnection().getServiceName(); + } + + VCard vCard = SparkManager.getVCardManager().getVCard(fullJID); + if (vCard != null && vCard.getError() == null) { + String firstName = vCard.getFirstName(); + String lastName = vCard.getLastName(); + String nickname = vCard.getNickName(); + if (ModelUtil.hasLength(nickname)) { + vcardNickname = nickname; + } + else if (ModelUtil.hasLength(firstName) && ModelUtil.hasLength(lastName)) { + vcardNickname = firstName + " " + lastName; + } + else if (ModelUtil.hasLength(firstName)) { + vcardNickname = firstName; + } + } + } String nickname = nicknameField.getText(); if (!ModelUtil.hasLength(nickname) && ModelUtil.hasLength(jid)) { @@ -167,7 +192,8 @@ public class RosterDialog implements PropertyChangeListener, ActionListener { if (!ModelUtil.hasLength(nickname)) { nickname = jid; } - nicknameField.setText(nickname); + + nicknameField.setText(vcardNickname != null ? vcardNickname : nickname); } } });