Fixed bad presence issue occuring during a race condition with notifications.

git-svn-id: http://svn.igniterealtime.org/svn/repos/spark/trunk@5535 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Derek DeMoro
2006-09-28 03:34:07 +00:00
committed by derek
parent 24dc09d272
commit dd2c9f51ca

View File

@ -51,23 +51,6 @@ import org.jivesoftware.sparkimpl.profile.VCardManager;
import org.jivesoftware.sparkimpl.settings.local.LocalPreferences; import org.jivesoftware.sparkimpl.settings.local.LocalPreferences;
import org.jivesoftware.sparkimpl.settings.local.SettingsManager; import org.jivesoftware.sparkimpl.settings.local.SettingsManager;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
@ -95,6 +78,23 @@ import java.util.StringTokenizer;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public final class ContactList extends JPanel implements ActionListener, ContactGroupListener, Plugin, RosterListener, ConnectionListener { public final class ContactList extends JPanel implements ActionListener, ContactGroupListener, Plugin, RosterListener, ConnectionListener {
private JPanel mainPanel = new JPanel(); private JPanel mainPanel = new JPanel();
private JScrollPane treeScroller; private JScrollPane treeScroller;
@ -261,7 +261,7 @@ public final class ContactList extends JPanel implements ActionListener, Contact
RosterEntry entry = roster.getEntry(bareJID); RosterEntry entry = roster.getEntry(bareJID);
boolean isPending = entry != null && (entry.getType() == RosterPacket.ItemType.NONE || entry.getType() == RosterPacket.ItemType.FROM) boolean isPending = entry != null && (entry.getType() == RosterPacket.ItemType.NONE || entry.getType() == RosterPacket.ItemType.FROM)
&& RosterPacket.ItemStatus.SUBSCRIPTION_PENDING == entry.getStatus(); && RosterPacket.ItemStatus.SUBSCRIPTION_PENDING == entry.getStatus();
// If online, check to see if they are in the offline group. // If online, check to see if they are in the offline group.
// If so, remove from offline group and add to all groups they // If so, remove from offline group and add to all groups they
@ -296,7 +296,7 @@ public final class ContactList extends JPanel implements ActionListener, Contact
} }
private void moveToOfflineGroup(String bareJID) { private void moveToOfflineGroup(final String bareJID) {
final Iterator groupIterator = new ArrayList(groupList).iterator(); final Iterator groupIterator = new ArrayList(groupList).iterator();
while (groupIterator.hasNext()) { while (groupIterator.hasNext()) {
final ContactGroup group = (ContactGroup)groupIterator.next(); final ContactGroup group = (ContactGroup)groupIterator.next();
@ -313,6 +313,12 @@ public final class ContactList extends JPanel implements ActionListener, Contact
timer.schedule(new TimerTask() { timer.schedule(new TimerTask() {
public void run() { public void run() {
Roster roster = SparkManager.getConnection().getRoster();
Presence userPresence = roster.getPresence(bareJID);
if (userPresence != null) {
return;
}
item.setPresence(null); item.setPresence(null);
// Check for ContactItemHandler. // Check for ContactItemHandler.
@ -417,7 +423,7 @@ public final class ContactList extends JPanel implements ActionListener, Contact
ContactItem contactItem = new ContactItem(name, entry.getUser()); ContactItem contactItem = new ContactItem(name, entry.getUser());
contactItem.setPresence(null); contactItem.setPresence(null);
if ((entry.getType() == RosterPacket.ItemType.NONE || entry.getType() == RosterPacket.ItemType.FROM) if ((entry.getType() == RosterPacket.ItemType.NONE || entry.getType() == RosterPacket.ItemType.FROM)
&& RosterPacket.ItemStatus.SUBSCRIPTION_PENDING == entry.getStatus()) { && RosterPacket.ItemStatus.SUBSCRIPTION_PENDING == entry.getStatus()) {
// Add to contact group. // Add to contact group.
contactGroup.addContactItem(contactItem); contactGroup.addContactItem(contactItem);
contactGroup.setVisible(true); contactGroup.setVisible(true);
@ -647,7 +653,7 @@ public final class ContactList extends JPanel implements ActionListener, Contact
ContactItem offlineItem = offlineGroup.getContactItemByJID(jid); ContactItem offlineItem = offlineGroup.getContactItemByJID(jid);
if (offlineItem != null) { if (offlineItem != null) {
if ((rosterEntry.getType() == RosterPacket.ItemType.NONE || rosterEntry.getType() == RosterPacket.ItemType.FROM) if ((rosterEntry.getType() == RosterPacket.ItemType.NONE || rosterEntry.getType() == RosterPacket.ItemType.FROM)
&& RosterPacket.ItemStatus.SUBSCRIPTION_PENDING == rosterEntry.getStatus()) { && RosterPacket.ItemStatus.SUBSCRIPTION_PENDING == rosterEntry.getStatus()) {
// Remove from offlineItem and add to unfiledItem. // Remove from offlineItem and add to unfiledItem.
offlineGroup.removeContactItem(offlineItem); offlineGroup.removeContactItem(offlineItem);
unfiledGroup.addContactItem(offlineItem); unfiledGroup.addContactItem(offlineItem);